年前实现的一个小功能,实现按英文标题首字母A-Z排序,jQuery+ajax载入文章列表。比如点击字母A,就会ajax载入以A开头的文章列表,如下图所示:

test

估计只能用于字母或数字做标题博客,一些CMS项目估计用得上。下面是主要js和相应部分。

放在function.php里的:

首先是输出A-Z的链接,包含0~9的数字开头的文章,去数据库里查询是否存在以各个字母开头的文章,(这一步可能对文章很多的站点是个问题,因为遍历了所有文字,目前还没有好的想法,大概优化的思路是数据库新建一个表专门用来存储文章首字母数据)

<?php
function aznav(){
    $num=array('0','1','2','3','4','5','6','7','8'.'9');
    $alphabet=array('A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z');
       global $wpdb;
    $myposts = $wpdb->get_results("
  SELECT post_title FROM $wpdb->posts
  WHERE post_status = 'publish'
  AND post_type = 'post'
  ORDER BY post_title
 "); 
 $n[]='';
 foreach($myposts as $mypost) {
    $n[]=strtoupper(SUBSTR(trim($mypost->post_title),0,1));
 }

    $outpot='<div id="aznav"><ol><li class="home">A-Z index:</li><li class="back" style="display:none;"><a href="javascript:void(0);">Back</a></li>';
    for ($i=0; $i < count($num); $i++) {if(in_array($num[$i],$n)){$number=true;break;}}
        if($number){
        $outpot .='<li><a href="javascript:void(0);" class="azindex" rel="num">0-9</a></li>';
    }else{
        $outpot .='<li>0-9</li>';

    }

  for ($i=0; $i < count($alphabet); $i++) {
    if(in_array($alphabet[$i],$n)){
        $outpot .='<li><a href="javascript:void(0);" class="azindex" rel="'.$alphabet[$i].'">'.$alphabet[$i].'</a></li>';
    }else{
        $outpot .='<li>'.$alphabet[$i].'</li>';

    }
  }
    $outpot .='</ol></div><div style="clear:both"></div>';
  echo $outpot;
}

 

其次是对ajax处理的响应部分,从数据库里面取出对应字母开头的文章列表,对数字和字母分别进行处理,在这了用了wp自带的缓存”wp_cache_get”,减少数据库查询,提高性能:

<?php
/**
 * Ajaxletter
 *
 * @by winy 2011.2.6
 */
function Ajaxletter(){
if( isset($_GET['action'])&& $_GET['action'] == 'Ajaxletter'  ){
 nocache_headers();	//(FIX for IE)
 $letter = isset($_GET['letter']) ? $_GET['letter'] : null;

if(!$letter){
	fail(__('Error post letter.'));
	}else{
	if($output = wp_cache_get('index_'.$letter, 'Winy')){//use the cache function for better performance
		echo $output;
		die();
	}
	global $wpdb; // This query is the KEY to find the post!
if ($letter=='num'){//for numbers
	$myposts = $wpdb->get_results("
  SELECT ID, post_title, post_name FROM $wpdb->posts
  WHERE SUBSTRING(LOWER(post_title),1,1) BETWEEN '0' AND '9'
  AND post_status = 'publish'
  AND post_type = 'post'
  ORDER BY post_title ASC
 "); 
}else{//For alphabet
	$myposts = $wpdb->get_results("
  SELECT ID, post_title, post_name FROM $wpdb->posts
  WHERE post_title LIKE '".$letter."%'
  AND post_status = 'publish'
  AND post_type = 'post'
  ORDER BY post_title ASC
 "); 
}
	$output = '<div id="azload" class="hentry">';
	if(empty($myposts)){
		$output.='Apologies, but no results were found for the requested archive. Perhaps searching will help find a related post.';

	}else{
		foreach($myposts as $mypost) {
		$output .='<div><a href="'. get_permalink($mypost->ID). '">'.$mypost->post_title .'</a></div>';
		}
		wp_cache_add('index_'.$letter, $output, 'Winy');//add a cache
	}
	$output .= '</div>';
	echo $output;
	die();
	}
}else{
  return;
 }
}
add_action('init', 'Ajaxletter');

 

最后用的是jQuery的ajax过程,这个就简单了:

jQuery(document).ready(function($) {
    $('.azindex').click(function(){
		if ($(this).parent().hasClass("active")){
		return false;
		}
		var contentCache =false;
	    var letter=$(this).attr("rel");
		//alert(letter);//for test
        $.ajax({
        url : base+ "?action=Ajaxletter&letter="+letter,//base url must be defined
        type: 'get',
        beforeSend: function() {
			document.body.style.cursor = 'wait';
			var load='<h1 class="page-title">Loading...Please wait for a while</h1>';
			$(this).parent().addClass("active").siblings().removeClass();
			$('#aznav li.home').hide();
			$('#aznav li.back').show();
			contentCache = $('#content')[0].innerHTML;
        	$('#content').empty().html(load);
          },
		error: function(request) {
			alert(request.responseText);
		},
        success:function (data) {
			document.body.style.cursor = 'auto';
			$('#content').empty().html(data);

			$('#aznav li.back a').click( function() {
				$('#content').empty().html(contentCache);
				$('#aznav li.back').hide();
				$('#aznav li.home').show();
                return false;
				});
        }

        });
        return false;
    });
});

思路是很简单,主要是php响应部分,涉及到数据库查询,这个比较麻烦一点。另外,只适合英文首字母,对于中文的博客就没那么简单了。需要把汉字编码转换成拼音,再来排序存储在一个新的表里面,按拼音首字母排序,想想就麻烦..

Timthumb是一个专门为 WordPress 而开发的缩略图应用的项目,在这里了解和下载最新版本的 timthumb.php。最近写一个主题用到了这个缩略图程序,本地调试一切正常,上传主机测试发现所有的缩略图不能正常显示。开始以为是权限问题:尝试将Timthumb.php 属性改成755,并将主题目录下的cache文件夹也改为755权限。但是还是不能正常工作。Google了一下Timthumb 403错误,在国外的blog上找到的解决方法是使用相对路径解决,我不会正则觉得处理链接麻烦,又找到了这个方法:(来自这里

<img src=””http://www.tu-pian.net/wp-content/themes/gallery/scripts/timthumb.php?h=180&amp;w=290&amp;zc=1&amp;src=http://www.tu-pian.net/wp-content/uploads/2010/06/Hydrangeas-300×225.jpg”” alt=””草”” />

如果你当前使用的主题,图片链接形式和上面的链接一样。又出现了访问403错误。这表明服务器需要开启 mod_security ,联系主机提供商确认这个。我的主机默认开启这个,但默认开启mod_security 并不表明这个功能可以使用,我们需要向根目录.htaccess文件里添加两行代码,这样,才是真正的开启mod_security 功能。

需要向 .htaccess里添加的代码是:

 SecFilterEngine Off 

SecFilterScanPOST Off 

 

总结问题就是如果使用Timthumb出现403错误,解决方法有;1、使用相对路径;2、修改开启mod_security和URL转向功能。

放假了果然无聊,现在该回去了,转个蛋疼的文章解解闷儿。让我想起了:在上网聊天时,喜欢在一句话结束后加上“。。。”的一般是好人,像我似的。。。喜欢加上“!” 一般比较强势;喜欢加上“O(∩_∩)O”等等的一般未成年。。。等等

转载自bdwm:
口头禅有时是可以反映一个人的性格的,一个你经常脱口而出的字,在心理学家那里就有可能成为他们解读你的武器~下面就来看看,超准哦!你常说的那个字:---你的性格:

1、唉:你有点老了,还有点认命。

2、嗷:你年轻敏感,折磨吧娘们。

3、滚:你不仅易怒,还不算后果。

4、哈:你玩的时候,会觉得尴尬。

5、嘿:你不仅拘谨,但知道分寸。

6、日:你不仅愤闷,还有点虚伪。

7、操:你不仅愤青,还非常直接。

8、二:你经常夸人,且是个天才。

9、贱:你熟悉朋友,不爱陌生人。

10、嗨:你显得老练,但你刚入门。

11、啊:你故意惊讶,可爱刚刚好。

12、喂:你有领导力,现在被领导。

13、死:你非常麻辣,有小姐脾气。

14、闪:你用词年轻,压力却不轻。

15、啥:你常常放弃,你也不觉得。

16、哦:你做的决定,都无关痛痒。

17、额:你的幸福是,再平淡一点。

18、擦:你懂得判断,处事有菱角。

19、恩:你不要太烦,少一点应付。

20、偶:你认为自己,还没有长大。

21、呵:你不仅装逼,而且装文艺。

22、汗:你缺乏真知,也缺乏灼见。

23、哎:你经常无奈,也常常忍耐。

24、靠:你应该爆发,别只是说说。

25、干:你非常大气,也有点粗心。

26、好:你无话可说,常随意他人。

27、吃:你对自己好,那你就对了。

28、乖:你长大了吗,还是别了吧。

29、喝:你该少喝点,也包括饮料。

30、扯:你不认同的,就认为荒渺。

31、晕:你的判断力,经常会透支。

32、毛:你不屑一顾,但你真懂吗?

33、丫:你目空一切,自大的可爱。

34、哧:你挺好玩的,会讨人喜欢。

35、呸:你不仅可爱,还比较可恨。

36、吆:你说这个字,代表你妒忌。

37、顶:你果然牛逼。

大年三十到正月十五在百度搜索框中输入“红包”“春节红包”就可以参与抽奖----百度首页有个倒计时,点进去发现是这个“红包”抽奖,这个听起来好像很给力啊,“有机会搜到红包大礼,超过 2000万 好礼等你拿”,网民千千万,我可不相信这种机会,但春季搜索下“红包”又不会怀孕,我也去抢车抢房抢惊喜,哈哈。。。百度搜红包官方:http://chunjie.baidu.com/

话说回来,春季红包这个习惯倒是中国习俗,春节派"红包"是华人新年的一种习俗,中国人喜欢红色,因为红色象征活力、愉快与好运。 给红包给未成年的晚辈也叫压岁钱,是表示把祝愿和好运带给他们。红包里的钱,只是要让孩子们开心,其主要意义是在红纸,因为它象征好运。我也从小拿了不少红包,享受了很多年啊。记得小时候拿红包可是很高兴地,收到一个红包,两个红包三个红包四个红包……然后就可以攒起来买各种想要的东西。压岁饯的数额从几十到一百不等,我家没特有钱的亲戚,收到一百就不错了,想起现在的孩子长辈一给红包就是几百一千的,只能羡慕下。但现在,就算是拿一个红包这种待遇都没啦,要是再过几年,该给我的侄子侄女们发红包了,囧~

--------------------------------分割线--------------------------------------

以上是为了配合活动,做点关键词。话说还有二十多个小时就到兔年了,也是我的本命年。放假也没什么事儿干,在家过年也好好过吧。只是最近特别懒,早上是起不来了,放假前安排的学习计划完全没用,看来放假学习什么的完全不靠谱。哎,全当休整身心吧!最近什么事儿都没办好,写个主题一直拖着没办法,中途为了上网,一口气连续破解了周围邻居N个无线路由密码,谁让信号这么好还是wep加密,蹭网用用应该问题不大吧。。。

新年打算,这个可以有,但鉴于计划赶不上变化,我也就弄个方向就好了。过年只是一种意义上的东西,总结了过去的2010,新的一年我感觉充满了希望,日子也许走上正轨了,据说今年白羊座运气不差啊,又是本命年,为了理想,继续冲啊~

c94efa9b-8165-464e-8d72-25d089c323ef

--------------------------------继续分割------------------------------------

过年之前把W1收费主题加上了后台选项,增加了一些主题选项,现在可以自定义开启无限分页,顶部幻灯片内容,自定义Rss地址,自定义顶部公告,自定义ajax短句内容。价格不变88RMB包售后,升级后功能更强大,详情见发布页面

过年期间有没有人给我发红包啊?嘿嘿

option

--------------------------------新年割割------------------------------------

最后,新的一年恭祝各位新老朋友兔年给力,办事不唐突、赚钱不含糊!祝大家新年宏“兔”大展,祝来往的朋友们春节快乐~

换个背景