<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Domety &#187; 程序开发</title>
	<atom:link href="http://domety.com/archives/category/development/feed/" rel="self" type="application/rss+xml" />
	<link>http://domety.com</link>
	<description>分享软件、互联网应用技巧以及开发技能</description>
	<lastBuildDate>Fri, 03 Feb 2012 14:02:27 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Wordpress 2.9 的缩略图功能</title>
		<link>http://domety.com/archives/272/</link>
		<comments>http://domety.com/archives/272/#comments</comments>
		<pubDate>Mon, 03 Jan 2011 07:25:18 +0000</pubDate>
		<dc:creator>DDBug</dc:creator>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[缩略图]]></category>

		<guid isPermaLink="false">http://domety.com/archives/272/</guid>
		<description><![CDATA[Wordpress 2.9 新增的缩略图功能是一个很实用的功能，今天就和大家探讨一下如何开启以及使用该功能。
第一步：让主题支持缩略图功能
首先确保你的wordpress版本在2.9之上，然后在你的当前主题文件夹中找到并编辑functions.php文件，加入下面这句代码
&#60;?php if ( function_exists( 'add_theme_support' ) )
	add_theme_support( 'post-thumbnails' ); ?&#62;
(注：主题文件夹都保存在wp-content/themes/目录下)
这样当你在后台编辑文章的时候，右边的分类目录下面就会多出一个“文章缩略图”模块。
 
点击“设置缩略图”就可以该文章添加缩略图了。

记得在添加图片的时候要点击下面的“用作缩略图”。
第二步：使用缩略图
在需要显示缩略图的地方调用the_post_thumbnail函数，比如你想在首页为每篇文章显示缩略图，可以在index.php文件中加入下面这样的代码
&#60;? php if ( function_exists( 'the_post_thumbnail' ) )
          the_post_thumbnail( 'thumbnail' ); ?&#62;
这样就能显示缩略图了，其中参数”thumbnail”表示缩略图显示的大小。wordpress预置了4种大小，你可以使用下面的4个参数来替换’thumbnail’，当然不同的台数显示的图片大小也不同
Ø Thumbnail (缩略图尺寸)
Ø Medium （中等尺寸）
Ø Large （大尺寸）
Ø Full （原始尺寸）
具体尺寸大小可以在后台“设置”中的“媒体”选项中进行设置
&#160; 
你可以设置3种不同的大小，以方便在不同的情况下使用。
至此你的主题已经支持缩略图功能并可以灵活使用了。
下面我将介绍一下更高级的应用技巧。
自定义缩略图尺寸的三种方法
方法一：后台设置
就是上面提到的方法，不过这种方法只设置3种大小。
方法二：自定义
在调用the_post_thumbnail函数的时候，可以直接指定缩略图的大小
the_post_thumbnail(array(200,200)); // 显示200X200尺寸的缩略图
这种方法的优点的灵活，可以随时通过代码的调用显示不同尺寸的图片，缺点是修改有点麻烦，如果你有多处这样的代码，修改起来就要把每一处代码都要修改掉。
方法三：增加预置尺寸
通过前面的介绍我们已经知道，wordpress为我们预置了三种可以设置的尺寸。可不可以再增加一些预置的尺寸呢？当然可以，我们要用到的函数是add_image_size。比如我们想在首页和分类页面使用不同的缩略图大小，就可以先预置homepage-thumb和category-thumb这两大小。方法是在functions.php文件中加入以下代码
if ( function_exists( 'add_image_size' ) ){
	add_image_size( 'category-thumb', 200, 200 ); // 预置一个名为’category-thumb’,200*200的缩略图大小
	add_image_size( [...]]]></description>
			<content:encoded><![CDATA[<p>Wordpress 2.9 新增的缩略图功能是一个很实用的功能，今天就和大家探讨一下如何开启以及使用该功能。</p>
<h3>第一步：让主题支持缩略图功能</h3>
<p>首先确保你的wordpress版本在2.9之上，然后在你的当前主题文件夹中找到并编辑functions.php文件，加入下面这句代码</p>
<pre class="php" name="code">&lt;?php if ( function_exists( 'add_theme_support' ) )
	add_theme_support( 'post-thumbnails' ); ?&gt;</pre>
<p>(注：主题文件夹都保存在wp-content/themes/目录下)</p>
<p>这样当你在后台编辑文章的时候，右边的分类目录下面就会多出一个“文章缩略图”模块。</p>
<p><img title="文章缩略图模块" alt="文章缩略图模块" src="http://i623.domety.com/albums/tt312/baolai5/201101/wordpress_thumbnail_001.png" /> </p>
<p>点击“设置缩略图”就可以该文章添加缩略图了。</p>
<p><img title="点击&quot;用作缩略图&quot;" alt="点击&quot;用作缩略图&quot;" src="http://i623.domety.com/albums/tt312/baolai5/201101/wordpress_thumbnail_003.png" /></p>
<p>记得在添加图片的时候要点击下面的“用作缩略图”。</p>
<h3>第二步：使用缩略图</h3>
<p>在需要显示缩略图的地方调用the_post_thumbnail函数，比如你想在首页为每篇文章显示缩略图，可以在index.php文件中加入下面这样的代码</p>
<pre class="php" name="code">&lt;? php if ( function_exists( 'the_post_thumbnail' ) )
          the_post_thumbnail( 'thumbnail' ); ?&gt;</pre>
<p>这样就能显示缩略图了，其中参数”thumbnail”表示缩略图显示的大小。wordpress预置了4种大小，你可以使用下面的4个参数来替换’thumbnail’，当然不同的台数显示的图片大小也不同</p>
<p>Ø Thumbnail (缩略图尺寸)</p>
<p>Ø Medium （中等尺寸）</p>
<p>Ø Large （大尺寸）</p>
<p>Ø Full （原始尺寸）</p>
<p>具体尺寸大小可以在后台“设置”中的“媒体”选项中进行设置</p>
<p>&#160;<img title="媒体选项" alt="媒体选项" src="http://i623.domety.com/albums/tt312/baolai5/201101/wordpress_thumbnail_002.png" /> </p>
<p>你可以设置3种不同的大小，以方便在不同的情况下使用。</p>
<p>至此你的主题已经支持缩略图功能并可以灵活使用了。</p>
<p>下面我将介绍一下更高级的应用技巧。</p>
<h3>自定义缩略图尺寸的三种方法</h3>
<h4>方法一：后台设置</h4>
<p>就是上面提到的方法，不过这种方法只设置3种大小。</p>
<h4>方法二：自定义</h4>
<p>在调用the_post_thumbnail函数的时候，可以直接指定缩略图的大小</p>
<pre class="php" name="code">the_post_thumbnail(array(200,200)); // 显示200X200尺寸的缩略图</pre>
<p>这种方法的优点的灵活，可以随时通过代码的调用显示不同尺寸的图片，缺点是修改有点麻烦，如果你有多处这样的代码，修改起来就要把每一处代码都要修改掉。</p>
<h4>方法三：增加预置尺寸</h4>
<p>通过前面的介绍我们已经知道，wordpress为我们预置了三种可以设置的尺寸。可不可以再增加一些预置的尺寸呢？当然可以，我们要用到的函数是add_image_size。比如我们想在首页和分类页面使用不同的缩略图大小，就可以先预置homepage-thumb和category-thumb这两大小。方法是在functions.php文件中加入以下代码</p>
<pre class="php" name="code">if ( function_exists( 'add_image_size' ) ){
	add_image_size( 'category-thumb', 200, 200 ); // 预置一个名为’category-thumb’,200*200的缩略图大小
	add_image_size( 'homepage-thumb', 220, 180); //预置一个名为’homepage-thumb’,220*180的缩略图大小
}</pre>
<p>之后就可以在首页调用</p>
<pre class="php" name="code">the_post_thumbnail(‘homepage-thumb’);</pre>
<p>显示220*180的缩略图</p>
<p>在分类页面调用</p>
<pre class="php" name="code">the_post_thumbnail(‘category-thumb’);</pre>
<p>则显示200*200的缩略图。</p>
<h3>定义缩略图的样式</h3>
<p>首先我们先来看一下the_post_thumbnail函数输出的html是什么样的</p>
<pre class="html" name="code">&lt;img width=&quot;150&quot; height=&quot;150&quot; src=&quot;http://domety.com/wp-content/uploads/2010/10/screenshot-150x150.png&quot;
class=&quot;attachment-thumbnail wp-post-image&quot; alt=&quot;&quot; title=&quot;screenshot&quot; /&gt;</pre>
<p>由此可以看出，我们可以用css定义类attachment-thumbnail的样式就可以了。</p>
<p>但是如果我想分别为首页和分类页面定义不同的样式，该怎么做呢？</p>
<p>方法一是增加一个div，针对不同的div定义不同的样式，在此不多做介绍。</p>
<p>我要介绍的是另一种方法：给缩略图添加属性</p>
<p>你可以测试一下，如果把the_post_thumbnail(“thumbnail”)修改为下面这样的代码，看看输出的html结果是什么？</p>
<pre class="php" name="code">the_post_thumbnail(‘thumbnail’,array(‘class’ =&gt; ‘homepage-thumb’));</pre>
<p>我这边输出的html为</p>
<pre class="html" name="code">&lt;img width=&quot;150&quot; height=&quot;150&quot; src=&quot;http://domety.com/wp-content/uploads/2010/10/screenshot-150x150.png&quot;
class=&quot;homepage-thumb wp-post-image&quot; alt=&quot;&quot; title=&quot;screenshot&quot; /&gt;</pre>
<p>可以和之前的html对比一下，不难发现class属性变成了我们设置的’homepage-thumb’。可以通过这种方法，把首页缩略图和分类页面的缩略图设置为不同的class属性。</p>
<h3>改变the_post_thumbnail的html输出</h3>
<p>我们可以使用filter来改变缩略图的html输出结果，下面的这段代码为缩略图加了一个文章链接</p>
<pre class="php" name="code">add_filter( 'post_thumbnail_html', 'my_post_image_html', 10, 3 );
function my_post_image_html( $html, $post_id, $post_image_id ) {
	$html = '&lt;a href=&quot;' . get_permalink( $post_id ) . '&quot; title=&quot;' . esc_attr( get_post_field( 'post_title', $post_id ) ) . '&quot;&gt;' . $html . '&lt;/a&gt;';
	return $html;
}</pre>
<p>当你点击缩略图的时候就会跳转到相应的文章内页。</p>
<h3>检测文章是否有缩略图</h3>
<p>一个良好的习惯就是在调用the_post_thumbnail函数之前，先检测一下该文章有没有设置缩略图，检测的方法是调用has_post_thumbnail函数，代码如下</p>
<pre class="php" name="code">&lt;?php if ( has_post_thumbnail() )
	the_post_thumbnail( 'thumbnail' );?&gt;</pre>
<p>结合本站之前的提取文章内图片做为缩略图的方法，现在可以合二为一：首先判断文章有没有设置缩略图，如果有就直接显示，如果没有再提取文章内的图片为缩略图。</p>
<pre class="php" name="code">/* 

* 缩略图

*/

function dm_the_thumbnail() {

	global $post;

	// 判断该文章是否设置的缩略图，如果有则直接显示

	if ( has_post_thumbnail() ) {

		echo '&lt;a href=&quot;'.get_permalink().'&quot; title=&quot;阅读全文&quot;&gt;';

		the_post_thumbnail('thumbnail');

		echo '&lt;/a&gt;';

	} else { //如果文章没有设置缩略图，则查找文章内是否包含图片

		$content = $post-&gt;post_content;

		preg_match_all('/&lt;img.*?(?: |\\t|\\r|\\n)?src=[\'&quot;]?(.+?)[\'&quot;]?(?:(?: |\\t|\\r|\\n)+.*?)?&gt;/sim', $content, $strResult, PREG_PATTERN_ORDER);

		$n = count($strResult[1]);

		if($n &gt; 0){ // 如果文章内包含有图片，就用第一张图片做为缩略图

			echo '&lt;a href=&quot;'.get_permalink().'&quot; title=&quot;阅读全文&quot;&gt;&lt;img src=&quot;'.$strResult[1][0].'&quot; alt=&quot;缩略图&quot; /&gt;&lt;/a&gt;';

		}else { // 如果文章内没有图片，则用默认的图片。

			echo '&lt;a href=&quot;'.get_permalink().'&quot; title=&quot;阅读全文&quot;&gt;&lt;img src=&quot;'.get_bloginfo('template_url').'/imgs/default_thumbnail.jpg&quot; alt=&quot;缩略图&quot; /&gt;&lt;/a&gt;';

		}

	}

}</pre>
<p>有兴趣的朋友可以把以上代码复制到functions.php文件中，然后调用dm_the_thumbnail()即可。</p>
]]></content:encoded>
			<wfw:commentRss>http://domety.com/archives/272/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>如何设置wordpress主题的日期格式</title>
		<link>http://domety.com/archives/264/</link>
		<comments>http://domety.com/archives/264/#comments</comments>
		<pubDate>Sat, 24 Apr 2010 17:49:26 +0000</pubDate>
		<dc:creator>DDBug</dc:creator>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[日期]]></category>

		<guid isPermaLink="false">http://domety.com/?p=264</guid>
		<description><![CDATA[这里说的设置日期格式不是在控制台设置，而是在主题中调用日期函数的时候，如何传递正确的参数来达到我们想要的日期显示方式。阅读完此文，对你制作主题或者修改主题中日期的显示方式有所帮助。
比如在主题中调用这样一个时间函数
&#60;?php the_time('Y-m-d'); ?&#62;
那么在页面中显示的形式就是 2010-04-25 (年-月-日)。你也许会问：为什么要用Y m d这几个字母呢？有没有其它字母可以使用呢？又有哪些字母可以使用呢？以下就是一些可以使用的字母
星期

l    ——  Sunday – Saturday
D  ——  Mon – Sun （英文缩写）

不过对于中文wordpress而言，l和D的效果是一样的（星期一 ~ 星期日）。
年份

Y    ——    4位数的年份 （如 2010）
y    ——    2位数的年份 （如 10）

月份

m  ——  数字月份，单数前加0 （01 &#8211; 12）
n  ——  数字月份，单数前不加0  （1 &#8211; 12）
F  ——  英文月份 （January – December）
M ——  英文月份缩写 （Jan &#8211; Dec）

同样，对于中文wordpress而言F和M的效果是一样的（一月 ~ 十二月）。
日期

d  ——  数字，单数前加0 (01 &#8211; 31)
j  ——  数字，单数前不加0 [...]]]></description>
			<content:encoded><![CDATA[<p>这里说的设置日期格式不是在控制台设置，而是在主题中调用日期函数的时候，如何传递正确的参数来达到我们想要的日期显示方式。阅读完此文，对你制作主题或者修改主题中日期的显示方式有所帮助。</p>
<p>比如在主题中调用这样一个时间函数</p>
<pre>&lt;?php the_time('Y-m-d'); ?&gt;</pre>
<p>那么在页面中显示的形式就是 2010-04-25 (年-月-日)。你也许会问：为什么要用Y m d这几个字母呢？有没有其它字母可以使用呢？又有哪些字母可以使用呢？以下就是一些可以使用的字母</p>
<h4>星期</h4>
<ul>
<li>l    ——  Sunday – Saturday</li>
<li>D  ——  Mon – Sun （英文缩写）</li>
</ul>
<p>不过对于中文wordpress而言，l和D的效果是一样的（星期一 ~ 星期日）。</p>
<h4>年份</h4>
<ul>
<li>Y    ——    4位数的年份 （如 2010）</li>
<li>y    ——    2位数的年份 （如 10）</li>
</ul>
<h4>月份</h4>
<ul>
<li>m  ——  数字月份，单数前加0 （01 &#8211; 12）</li>
<li>n  ——  数字月份，单数前不加0  （1 &#8211; 12）</li>
<li>F  ——  英文月份 （January – December）</li>
<li>M ——  英文月份缩写 （Jan &#8211; Dec）</li>
</ul>
<p>同样，对于中文wordpress而言F和M的效果是一样的（一月 ~ 十二月）。</p>
<h4>日期</h4>
<ul>
<li>d  ——  数字，单数前加0 (01 &#8211; 31)</li>
<li>j  ——  数字，单数前不加0 （1 &#8211; 31）</li>
<li>S  ——  日期的英文复数形式(st, nd, rd or th)，需要结合d或j使用。比如dS (04th)、jS (4th)</li>
</ul>
<h4>时间</h4>
<ul>
<li>h  ——  12小时制，单数以0开头 (01 &#8211; 12)</li>
<li>g  ——  12小时制，不带0 （1 &#8211; 12）</li>
<li>a  ——  am (上午)，pm(下午)</li>
<li>A  ——  AM，PM （大写的上下午）</li>
<li>H  —— 24小时制，单数前加0 （00 &#8211; 23）</li>
<li>G  ——  24小时制，单数前不加0 （0 &#8211; 23）</li>
<li>i  ——  分，单数前加0 （00 &#8211; 59）</li>
<li>s  ——  秒，单数前加0 （00 &#8211; 59）</li>
</ul>
<p>如果参数中包含以上字母，就会自动转换为相应的日期和时间，其它字符不会被转换。如</p>
<pre>&lt;?php the_time('公元Y年m月d日'); ?&gt;</pre>
<p>显示形式为 公元2010年04月25日</p>
]]></content:encoded>
			<wfw:commentRss>http://domety.com/archives/264/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>为wordpress添加评论邮件回复功能</title>
		<link>http://domety.com/archives/253/</link>
		<comments>http://domety.com/archives/253/#comments</comments>
		<pubDate>Tue, 20 Apr 2010 14:28:06 +0000</pubDate>
		<dc:creator>DDBug</dc:creator>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[评论]]></category>
		<category><![CDATA[邮件]]></category>

		<guid isPermaLink="false">http://domety.com/?p=253</guid>
		<description><![CDATA[评论回复就是说如果你在一个博客或者网站上留了言，当有人回复你的时候，系统就会自动发一封邮件通知你。我最早在万戈那里留言的时候，就体会到的评论回复在用户体验上是很友好的。最近逛的博客多了，才发现几乎所有的博客都有评论回复功能。那好吧，我就也给小站增加一个邮件回复的功能。
最快最方便的方法就是使用插件，这样的插件很多，就不在这里多说了，再说我也没有使用过，也不好评价那一个插件好用。本文介绍的是自己动手，添加一些代码实现邮件回复的功能。
wp_mail函数简介
不知道大家有没有注意过，在wordpress安装成功后，会向你的邮件中发送一封邮件。从这一点就可以看出worpress自带有发送邮件的功能。而且控制台里也可以设置当日志有新评论的时候邮件通知。就是从这里下手，我找到了这个wp_mail函数，它的功能就是发送邮件。该函数定义在wp-includes目录下的plaggable.php文件中，其原型为
wp_mail( $to, $subject, $message, $headers = '', $attachments = array() )
其中参数$to代表收件人，$subject是邮件主题。通过$header可以设置发件人信息，比如发件人名称、email地址（Name &#60;email@address.com&#62;）等，还可以设置邮件的文本格式，默认是text/plain，该格式不支持html格式。如果想使用html格式，就要设置为text/html。具体设置的方法是传递一个字符串，如
$headers = "from:Domety &#60;ddbug@domety.com&#62;\n content-type:text/html"
注意中间是以\n隔开。或者传递一个数组，如
$headers = array("from" =&#62; "Domety &#60;ddbug@domety.com&#62;","content-type" = "text/html" );
最后还可以通过$attachments参数来发送附件。
action : wp_insert_comment
有了发送邮件的函数，就可以说是万事具备，只欠东风了。我们需要准确的知道在什么时候要发送邮件，我觉得至少要符合以下条件：

在有人发表评论的时候，这时候wordpress会调用wp_insert_comment函数。
该评论不是直接对日志的评论，而是回复的另一个评论。也就是这个评论一定要有parent.
该评论是通过审核的评论。也就是说approved == 1
被回复的评论要有email地址。

wp_inset_comment函数为开发人员提供了一个叫做wp_insert_comment的action,通过它我们可以很方便的完成对以上条件的审查工作。我们首先定义一个 dm_notify_commentauthor($comment_id,$comment)函数，用来处理邮件通知用户。然后增加一个action
add_action('wp_insert_comment','dm_notify_commentauthor',10,2);
这样一来，当有用户回复另一个人的评论的时候，就会邮件通知另一个人。至此我们的全部工作就做完了。以下是完整代码，添加到functions.php文件中即可生效。
function dm_notify_commentauthor($comment_id,$comment) {
 if($comment-&#62;comment_approved != 1 &#124;&#124; $comment-&#62;comment_type == 'trackback' &#124;&#124; $comment-&#62;comment_type == 'pingback' &#124;&#124; $comment-&#62;comment_parent == 0 )
  return $comment_id;
 $parent = get_comment($comment-&#62;comment_parent);
 if(empty($parent-&#62;comment_author_email))
  return $comment_id;
 $post = get_post($comment-&#62;comment_post_ID);
 $to = $parent-&#62;comment_author_email;
 $from_name = wp_specialchars_decode(get_option('blogname'), ENT_QUOTES);s;
 $from_email [...]]]></description>
			<content:encoded><![CDATA[<p>评论回复就是说如果你在一个博客或者网站上留了言，当有人回复你的时候，系统就会自动发一封邮件通知你。我最早在万戈那里留言的时候，就体会到的评论回复在用户体验上是很友好的。最近逛的博客多了，才发现几乎所有的博客都有评论回复功能。那好吧，我就也给小站增加一个邮件回复的功能。</p>
<p>最快最方便的方法就是使用插件，这样的插件很多，就不在这里多说了，再说我也没有使用过，也不好评价那一个插件好用。本文介绍的是自己动手，添加一些代码实现邮件回复的功能。</p>
<h3>wp_mail函数简介</h3>
<p>不知道大家有没有注意过，在wordpress安装成功后，会向你的邮件中发送一封邮件。从这一点就可以看出worpress自带有发送邮件的功能。而且控制台里也可以设置当日志有新评论的时候邮件通知。就是从这里下手，我找到了这个wp_mail函数，它的功能就是发送邮件。该函数定义在wp-includes目录下的plaggable.php文件中，其原型为</p>
<pre name="code" class="php">wp_mail( $to, $subject, $message, $headers = '', $attachments = array() )</pre>
<p>其中参数$to代表收件人，$subject是邮件主题。通过$header可以设置发件人信息，比如发件人名称、email地址（Name &lt;email@address.com&gt;）等，还可以设置邮件的文本格式，默认是text/plain，该格式不支持html格式。如果想使用html格式，就要设置为text/html。具体设置的方法是传递一个字符串，如</p>
<pre name="code" class="php">$headers = "from:Domety &lt;ddbug@domety.com&gt;\n content-type:text/html"</pre>
<p>注意中间是以\n隔开。或者传递一个数组，如</p>
<pre name="code" class="php">$headers = array("from" =&gt; "Domety &lt;ddbug@domety.com&gt;","content-type" = "text/html" );</pre>
<p>最后还可以通过$attachments参数来发送附件。</p>
<h3>action : wp_insert_comment</h3>
<p>有了发送邮件的函数，就可以说是万事具备，只欠东风了。我们需要准确的知道在什么时候要发送邮件，我觉得至少要符合以下条件：</p>
<ol>
<li>在有人发表评论的时候，这时候wordpress会调用wp_insert_comment函数。</li>
<li>该评论不是直接对日志的评论，而是回复的另一个评论。也就是这个评论一定要有parent.</li>
<li>该评论是通过审核的评论。也就是说approved == 1</li>
<li>被回复的评论要有email地址。</li>
</ol>
<p>wp_inset_comment函数为开发人员提供了一个叫做wp_insert_comment的action,通过它我们可以很方便的完成对以上条件的审查工作。我们首先定义一个 dm_notify_commentauthor($comment_id,$comment)函数，用来处理邮件通知用户。然后增加一个action</p>
<pre name="code" class="php">add_action('wp_insert_comment','dm_notify_commentauthor',10,2);</pre>
<p>这样一来，当有用户回复另一个人的评论的时候，就会邮件通知另一个人。至此我们的全部工作就做完了。以下是完整代码，添加到functions.php文件中即可生效。</p>
<pre name="code" class="php">function dm_notify_commentauthor($comment_id,$comment) {
 if($comment-&gt;comment_approved != 1 || $comment-&gt;comment_type == 'trackback' || $comment-&gt;comment_type == 'pingback' || $comment-&gt;comment_parent == 0 )
  return $comment_id;
 $parent = get_comment($comment-&gt;comment_parent);
 if(empty($parent-&gt;comment_author_email))
  return $comment_id;
 $post = get_post($comment-&gt;comment_post_ID);
 $to = $parent-&gt;comment_author_email;
 $from_name = wp_specialchars_decode(get_option('blogname'), ENT_QUOTES);s;
 $from_email = "<a href="mailto:ddbug@domety.com">ddbug@domety.com</a>";
 $mail_content_type = "text/html";
 $mail_headers = "from:$from_name &lt;$from_email&gt;\ncontent-type:$mail_content_type";
 $parent_name = empty($parent-&gt;comment_author) ?  '无名仕' : $parent-&gt;comment_author;
 $cur_name = empty($comment-&gt;comment_author) ?  '无名仕' : $comment-&gt;comment_author;
 $title = $cur_name.'回复了您在Domety.com的评论';

 $msg = '&lt;p&gt;'.$parent_name.',您好！&lt;/p&gt;';
 $msg .= '您在&lt;a href="'.get_permalink($post).'" style="text-decoration:none; color: #007EC4;"&gt;《'.$post-&gt;post_title.'》&lt;/a&gt;的评论：';
 $msg .= '&lt;p style="margin-left:50px; background:#fff;border:1px dashed #7C98B1;padding:10px 30px;"&gt;'.$parent-&gt;comment_content.'&lt;/p&gt;';
 $msg .= '&lt;p&gt;&lt;a href="'.$comment-&gt;comment_author_url.'" style="text-decoration:none; color: #007EC4;"&gt;'.$cur_name.'&lt;/a&gt;对您的回复：&lt;/p&gt;';
 $msg .= '&lt;p style="margin-left:50px; background:#fff;border:1px dashed #7C98B1;padding:10px 30px;"&gt;'.$comment-&gt;comment_content.'&lt;/p&gt;';
 $msg .= '&lt;p&gt;&lt;a href='.get_comment_link($comment).' style="text-decoration:none; color: #007EC4;"&gt;点此查看原始回复内容&lt;/a&gt;&lt;/p&gt;';
 $msg .= "&lt;p style='font-weight:bold'&gt;衷心的感谢您对 &lt;a href='http://domety.com/' style='text-decoration:none; color: #007EC4;'&gt;Domety&lt;/a&gt; 的关注和支持，欢迎 &lt;a href='http://feed.domety.com/' style='text-decoration:none; color: #007EC4;'&gt;订阅本站&lt;/a&gt;，以获取最新信息。&lt;/p&gt;";
 $msg = '&lt;div style="border:1px solid #7C98B1; background:#f1f1f1; padding:50px;font-size:16px;"&gt;'.$msg.'&lt;/div&gt;';
 @wp_mail($to,$title,$msg,$mail_headers);
 return $comment_id;
}
add_action('wp_insert_comment','dm_notify_commentauthor',10,2);</pre>
]]></content:encoded>
			<wfw:commentRss>http://domety.com/archives/253/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>开启Akismet插件，自动过滤垃圾留言</title>
		<link>http://domety.com/archives/247/</link>
		<comments>http://domety.com/archives/247/#comments</comments>
		<pubDate>Tue, 06 Apr 2010 13:45:58 +0000</pubDate>
		<dc:creator>DDBug</dc:creator>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[插件]]></category>

		<guid isPermaLink="false">http://domety.com/?p=247</guid>
		<description><![CDATA[Wordpress自带了一个叫做Akismet的插件，刚开始一直感觉它没有什么用处，也就没有开启这个插件。但后来发现，随着网站流量的增多，慢慢的垃圾留言也开始增多。后来就开启了Akismet，效果还真不错。这段时间Akismet帮我过虑了不少垃圾留言，请看截图

不过Akismet和其它插件不一样，不是点击“开启”就能起作用的，还需要一个wordpress.com的API key，具体开启过程请往下看。
开启过程
进入后台管理面板，查看插件列表，你会发现有一个Akismet插件，如下图

点击“wordpress.com API key”或者直接在浏览器的地址栏里输入http://akismet.com/get/，进入如下图所示的页面

在&#8221;your email address&#8221;一栏输入你的email地址，然后点击&#8221;Next&#8221;

在&#8221;choose a username&#8221;一栏输入一个用户名，并勾选&#8221;I have read and agree to the Akismet terms of service&#8221;，点击“Next”

这个页面是说已经向你的邮箱里发送了一封激活账号的邮件，需要你打开你的邮箱并点击激活链接进行激活账号操作。
那么下一步就是打开你的邮箱查看邮件

点击邮件内的链接进行激活

复制你的API Key，然后进入你的wordpress后台管理面板，开启Akismet插件

点击“输入一个wordpress.com API key”

把你刚才复制的API key粘贴过来，然后点击“更新选项”

恭喜你，你的Akismet过虑垃圾留言插件已经生效了。以后你可以通过控制板下面的“Akismet统计”来查看垃圾留言情况。

]]></description>
			<content:encoded><![CDATA[<p>Wordpress自带了一个叫做Akismet的插件，刚开始一直感觉它没有什么用处，也就没有开启这个插件。但后来发现，随着网站流量的增多，慢慢的垃圾留言也开始增多。后来就开启了Akismet，效果还真不错。这段时间Akismet帮我过虑了不少垃圾留言，请看截图<span id="more-247"></span></p>
<p><img class="alignnone" title="Akismet统计概况" src="http://i623.domety.com/albums/tt312/baolai5/201004/akismet_001.png" alt="" width="562" height="260" /></p>
<p>不过Akismet和其它插件不一样，不是点击“开启”就能起作用的，还需要一个wordpress.com的API key，具体开启过程请往下看。</p>
<h3>开启过程</h3>
<p>进入后台管理面板，查看插件列表，你会发现有一个Akismet插件，如下图</p>
<p><img class="alignnone" src="http://i623.domety.com/albums/tt312/baolai5/201004/akismet_002.png" alt="" width="535" height="135" /></p>
<p>点击“wordpress.com API key”或者直接在浏览器的地址栏里输入<a href="http://akismet.com/get/">http://akismet.com/get/</a>，进入如下图所示的页面</p>
<p><img class="alignnone" src="http://i623.domety.com/albums/tt312/baolai5/201004/akismet_003.png" alt="" width="516" height="349" /></p>
<p>在&#8221;your email address&#8221;一栏输入你的email地址，然后点击&#8221;Next&#8221;</p>
<p><img class="alignnone" src="http://i623.domety.com/albums/tt312/baolai5/201004/akismet_004.png" alt="" width="506" height="345" /></p>
<p>在&#8221;choose a username&#8221;一栏输入一个用户名，并勾选&#8221;I have read and agree to the Akismet terms of service&#8221;，点击“Next”</p>
<p><img class="alignnone" src="http://i623.domety.com/albums/tt312/baolai5/201004/akismet_005.png" alt="" width="514" height="136" /></p>
<p>这个页面是说已经向你的邮箱里发送了一封激活账号的邮件，需要你打开你的邮箱并点击激活链接进行激活账号操作。</p>
<p>那么下一步就是打开你的邮箱查看邮件</p>
<p><img class="alignnone" src="http://i623.domety.com/albums/tt312/baolai5/201004/akismet_006.png" alt="" width="566" height="130" /></p>
<p>点击邮件内的链接进行激活</p>
<p><img class="alignnone" src="http://i623.domety.com/albums/tt312/baolai5/201004/akismet_007.png" alt="" width="454" height="305" /></p>
<p>复制你的API Key，然后进入你的wordpress后台管理面板，开启Akismet插件</p>
<p><img class="alignnone" src="http://i623.domety.com/albums/tt312/baolai5/201004/akismet_008.png" alt="" width="475" height="89" /></p>
<p>点击“输入一个wordpress.com API key”</p>
<p><img class="alignnone" src="http://i623.domety.com/albums/tt312/baolai5/201004/akismet_009.png" alt="" width="515" height="446" /></p>
<p>把你刚才复制的API key粘贴过来，然后点击“更新选项”</p>
<p><img class="alignnone" src="http://i623.domety.com/albums/tt312/baolai5/201004/akismet_010.png" alt="" width="520" height="436" /></p>
<p>恭喜你，你的Akismet过虑垃圾留言插件已经生效了。以后你可以通过控制板下面的“Akismet统计”来查看垃圾留言情况。</p>
<p><img class="alignnone" title="Akismet统计报表" src="http://i623.domety.com/albums/tt312/baolai5/201004/akismet_011.png" alt="" width="559" height="522" /></p>
]]></content:encoded>
			<wfw:commentRss>http://domety.com/archives/247/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>对所有日志的指定字符串进行替换</title>
		<link>http://domety.com/archives/244/</link>
		<comments>http://domety.com/archives/244/#comments</comments>
		<pubDate>Sun, 04 Apr 2010 13:09:47 +0000</pubDate>
		<dc:creator>DDBug</dc:creator>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[phpmyadmin]]></category>

		<guid isPermaLink="false">http://domety.com/?p=244</guid>
		<description><![CDATA[上午写了一篇《终于解决了半角引号自动转换为全角引号的问题》，果真也有朋友和我一样，用blockquote引用代码，但他们又不想修改wordpress的源代码，所以想把blockquote替换成pre或者code。但又苦于日志太多，一篇一篇的修改也确实太麻烦。在QQ上问我有没有简单的方法&#8230;&#8230;
方法当然是有的，而且还有很多种。比如可以通过写一段php代码，先从数据库中取出所有的日志，再用str_replace函数进行字符串替换，然后再更新数据库。这种方法当然可以，特别是对于插件开发者，可以在插件中增加一个对所有日志替换字符串的功能。但是这个需要一般不是太高，也没必要做到插件中去。其实我们可以充分发挥mysql的实力，也就是一条sql语句的事情。
REPLACE()
稍微了解一点mysql的人都应该知道，mysql定义了很多实用的函数，其中就有一个字符串替换的函数REPLACE()，具体参数如下
REPLACE(str,from_str,to_str)
这是mysql5.5的参考手册中给出的解释，其中str是一个要查找的字符串，from_str是要被替换的字符串，to_str是替换字符串。手册中也给出了一个例子
mysql&#62; SELECT REPLACE('www.mysql.com', 'w', 'Ww');
-&#62; 'WwWwWw.mysql.com'
这段例子是把字符串&#8217;www.mysql.com&#8217;中的&#8217;w'替换成&#8217;Ww&#8217;，替换结果是&#8217;WwWwWw.mysql.com&#8217;。
开始行动
有了以上的准备知识，让我们实际动手试一试吧，把日志中的blockquote标签替换成code标签或pre标签，以替换成code标签为例。
首先登录你的phpmyadmin管理面板，进入你的wordpress所使用的数据库，编辑sql语句
UPDATE ddd_posts SET post_content = replace( post_content, 'blockquote', 'code' )
其中ddd_posts为你的日志表名，请根据实际情况进行更改(下同)。其实这一个简单的sql语句就可以达到我们的目的了，但是有一个缺点：它不仅会替换&#60;blockquote&#62;&#60;/blockquote&#62;标签中的blockquote字符串，也会替换掉你在正文中出现的字符串中包含的blockquote。为了避免出现这种情况，我们采取下面这样的安全措施
UPDATE ddd_posts SET post_content = replace( post_content, '&#60;blockquote&#62;', '&#60;code&#62;' ) ;
UPDATE ddd_posts SET post_content = replace( post_content, '&#60;/blockquote&#62;', '&#60;/code&#62;' ) ;
这样就可以准确的把blockquote标签替换成code标签。
替换昵称
我们再举一个常见的例子，有些人写文章的时候喜欢在文章中引入自己的昵称，就像我有的时候会在文章称自己是的DDBug一样。但是一段时间之后作者想改换昵称，这个时候REPLACE函数就又派上了用场。比如我想把DDBug替换成Domety，就可以执行下面这样的sql语句
UPDATE ddd_posts SET post_content = replace( post_content, 'DDBug', 'Domety' )
当然，针对不同的用户，可能还有更多类似的需求，当你碰到类似的问题的时候，考虑一下mysql的REPLACE函数吧，或许能帮上你的忙。
]]></description>
			<content:encoded><![CDATA[<p>上午写了一篇《<a href="http://domety.com/archives/241/">终于解决了半角引号自动转换为全角引号的问题</a>》，果真也有朋友和我一样，用blockquote引用代码，但他们又不想修改wordpress的源代码，所以想把blockquote替换成pre或者code。但又苦于日志太多，一篇一篇的修改也确实太麻烦。在QQ上问我有没有简单的方法&#8230;&#8230;</p>
<p>方法当然是有的，而且还有很多种。比如可以通过写一段php代码，先从数据库中取出所有的日志，再用str_replace函数进行字符串替换，然后再更新数据库。这种方法当然可以，特别是对于插件开发者，可以在插件中增加一个对所有日志替换字符串的功能。但是这个需要一般不是太高，也没必要做到插件中去。其实我们可以充分发挥mysql的实力，也就是一条sql语句的事情。<span id="more-244"></span></p>
<h3>REPLACE()</h3>
<p>稍微了解一点mysql的人都应该知道，mysql定义了很多实用的函数，其中就有一个字符串替换的函数REPLACE()，具体参数如下</p>
<pre name="code" class="sql">REPLACE(<em>str</em>,<em>from_str</em>,<em>to_str</em>)</pre>
<p>这是mysql5.5的参考手册中给出的解释，其中str是一个要查找的字符串，from_str是要被替换的字符串，to_str是替换字符串。手册中也给出了一个例子</p>
<pre name="code" class="sql">mysql&gt; SELECT REPLACE('www.mysql.com', 'w', 'Ww');
-&gt; 'WwWwWw.mysql.com'</pre>
<p>这段例子是把字符串&#8217;www.mysql.com&#8217;中的&#8217;w'替换成&#8217;Ww&#8217;，替换结果是&#8217;WwWwWw.mysql.com&#8217;。</p>
<h3>开始行动</h3>
<p>有了以上的准备知识，让我们实际动手试一试吧，把日志中的blockquote标签替换成code标签或pre标签，以替换成code标签为例。</p>
<p>首先登录你的phpmyadmin管理面板，进入你的wordpress所使用的数据库，编辑sql语句</p>
<pre name="code" class="sql">UPDATE ddd_posts SET post_content = replace( post_content, 'blockquote', 'code' )</pre>
<p>其中ddd_posts为你的日志表名，请根据实际情况进行更改(下同)。其实这一个简单的sql语句就可以达到我们的目的了，但是有一个缺点：它不仅会替换&lt;blockquote&gt;&lt;/blockquote&gt;标签中的blockquote字符串，也会替换掉你在正文中出现的字符串中包含的blockquote。为了避免出现这种情况，我们采取下面这样的安全措施</p>
<pre name="code" class="sql">UPDATE ddd_posts SET post_content = replace( post_content, '&lt;blockquote&gt;', '&lt;code&gt;' ) ;
UPDATE ddd_posts SET post_content = replace( post_content, '&lt;/blockquote&gt;', '&lt;/code&gt;' ) ;</pre>
<p>这样就可以准确的把blockquote标签替换成code标签。</p>
<h3>替换昵称</h3>
<p>我们再举一个常见的例子，有些人写文章的时候喜欢在文章中引入自己的昵称，就像我有的时候会在文章称自己是的DDBug一样。但是一段时间之后作者想改换昵称，这个时候REPLACE函数就又派上了用场。比如我想把DDBug替换成Domety，就可以执行下面这样的sql语句</p>
<pre name="code" class="sql">UPDATE ddd_posts SET post_content = replace( post_content, 'DDBug', 'Domety' )</pre>
<p>当然，针对不同的用户，可能还有更多类似的需求，当你碰到类似的问题的时候，考虑一下mysql的REPLACE函数吧，或许能帮上你的忙。</p>
]]></content:encoded>
			<wfw:commentRss>http://domety.com/archives/244/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>终于解决了半角引号自动转换为全角引号的问题</title>
		<link>http://domety.com/archives/241/</link>
		<comments>http://domety.com/archives/241/#comments</comments>
		<pubDate>Thu, 01 Apr 2010 12:42:19 +0000</pubDate>
		<dc:creator>DDBug</dc:creator>
				<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://domety.com/?p=241</guid>
		<description><![CDATA[以前就有朋友反应过日志中的代码中引号有问题，一直也没放在心上。今天仔细看了一下，原来wordpress会自动把blockquote中的半角引号转换成全角引号。以下是两种解决方法
修改formatting.php文件
wordpress对日志的格式化处理代码保存在includes文件夹下的formatting.php文件中。用文本编辑器打开该文件，找到以下代码片段
if ( !empty($curl) &#38;&#38; '&#60;' != $curl{0} &#38;&#38; '[' != $curl{0}
amp;&#38; empty($no_texturize_shortcodes_stack) &#38;&#38; empty($no_texturize_tags_stack)) {
// This is not a tag, nor is the texturization disabled
// static strings
$curl = str_replace($static_characters, $static_replacements, $curl);
// regular expressions
$curl = preg_replace($dynamic_characters, $dynamic_replacements, $curl);
}
注释掉两条$curl语句即可，修改后代码如下：
if ( !empty($curl) &#38;&#38; '&#60;' != $curl{0} &#38;&#38; '[' != $curl{0}
&#38;&#38; empty($no_texturize_shortcodes_stack) &#38;&#38; empty($no_texturize_tags_stack)) {
// This is not a [...]]]></description>
			<content:encoded><![CDATA[<p>以前就有朋友反应过日志中的代码中引号有问题，一直也没放在心上。今天仔细看了一下，原来wordpress会自动把blockquote中的半角引号转换成全角引号。以下是两种解决方法</p>
<h3>修改formatting.php文件</h3>
<p>wordpress对日志的格式化处理代码保存在includes文件夹下的formatting.php文件中。用文本编辑器打开该文件，找到以下代码片段</p>
<pre name="code" class="php">if ( !empty($curl) &amp;&amp; '&lt;' != $curl{0} &amp;&amp; '[' != $curl{0}
amp;&amp; empty($no_texturize_shortcodes_stack) &amp;&amp; empty($no_texturize_tags_stack)) {
// This is not a tag, nor is the texturization disabled
// static strings
$curl = str_replace($static_characters, $static_replacements, $curl);
// regular expressions
$curl = preg_replace($dynamic_characters, $dynamic_replacements, $curl);
}</pre>
<p>注释掉两条$curl语句即可，修改后代码如下：</p>
<pre name="code" class="php">if ( !empty($curl) &amp;&amp; '&lt;' != $curl{0} &amp;&amp; '[' != $curl{0}
&amp;&amp; empty($no_texturize_shortcodes_stack) &amp;&amp; empty($no_texturize_tags_stack)) {
// This is not a tag, nor is the texturization disabled
// static strings
//$curl = str_replace($static_characters, $static_replacements, $curl);
// regular expressions
//$curl = preg_replace($dynamic_characters, $dynamic_replacements, $curl);
}</pre>
<h3>还是修改formatting.php文件</h3>
<p>同样是修改formatting.php文件，上面提到的代码可以不用注释掉，找到下面这行代码</p>
<pre name="code" class="php">$default_no_texturize_tags = array('pre', 'code', 'kbd', 'style', 'script', 'tt');</pre>
<p>改为</p>
<pre name="code" class="php">$default_no_texturize_tags = array('pre', 'code', 'kbd', 'style', 'script', 'tt', 'blockquote');</pre>
<p>也就是在$default_no_texturize_tags中加入一个&#8217;blockquote&#8217;标签</p>
<h3>不使用blockquote</h3>
<p>以上两种方法都可以解决引号转换的问题，不过需要修改wordpress的源代码，对以后的升级带来了麻烦。从上面的代码中我们也可以看到，像pre,code这些标签都不会转换引号，可以使用这两个标签来代替blockquote。</p>
]]></content:encoded>
			<wfw:commentRss>http://domety.com/archives/241/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>HTML DOM实战——查找指定链接</title>
		<link>http://domety.com/archives/239/</link>
		<comments>http://domety.com/archives/239/#comments</comments>
		<pubDate>Thu, 01 Apr 2010 04:39:02 +0000</pubDate>
		<dc:creator>DDBug</dc:creator>
				<category><![CDATA[javascript]]></category>
		<category><![CDATA[DOM]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[js]]></category>

		<guid isPermaLink="false">http://domety.com/?p=239</guid>
		<description><![CDATA[今天又给页面添加了一些快捷键，主要是想加深一下对DOM的了解。到目前为止，本站支持以下快捷键操作

在首页或者分类列表页面，按数字0键直接进入第一篇文章，1进入第二篇文章，以次类推。
日志内容页面，按←或p键跳转到上一页，按→或N键跳转到下一页

我的处理方式是响应按键事件的时候，查找对应的链接地址，然后跳转。这个处理过程根据页面文档的结构不同而不同，不过思想是一样的。以本站的首页为例，日志标题列表的结构如下：
&#60;div id="posts"&#62;
&#60;h2&#62;&#60;a href="第一篇日志链接"&#62;第一篇日志标题&#60;/a&#62;&#60;/h2&#62;
&#60;h2&#62;&#60;a href="第二篇日志链接"&#62;第二篇日志标题&#60;/a&#62;&#60;/h2&#62;
......
&#60;h2&#62;&#60;a href="第十篇日志链接"&#62;第十篇日志标题&#60;/a&#62;&#60;/h2&#62;
&#60;/div&#62;
通过对HTML DOM模型的理解，获取连接地址的方法如下：
var elems = document.getElementById("posts").getElementsByTagName("h2");
var elem = elems[i].childNodes[0];
if(elem){
var lin = elem.href;
window.location.assign(lin);
}
其中i的值为0~9,由按键决定。这里我们用到了document对象以及getElementById、getElementByTagName方法，还有childNodes和href属性。elems保存Posts下的所有h2元素集合，然后再通过childNodes属性来得到a标签元素，也就是一个Anchor对象，其href属性就是我们要查找的链接地址。最后通过window.location的assign方法，重新加载页面。如果要在新窗口中打开页面的话，请使用window.open()方法。
查找上一篇文章和下一篇文章链接的方法是一样的，主要分析页面文档的结构。
目前对DOM模型的操作还很生疏，更深层次的东西暂时还无法和大家分享，我会在第一时间把实战经验分享给大家，谢谢关注。
]]></description>
			<content:encoded><![CDATA[<p>今天又给页面添加了一些快捷键，主要是想加深一下对DOM的了解。到目前为止，本站支持以下快捷键操作</p>
<ul>
<li>在首页或者分类列表页面，按数字0键直接进入第一篇文章，1进入第二篇文章，以次类推。</li>
<li>日志内容页面，按←或p键跳转到上一页，按→或N键跳转到下一页</li>
</ul>
<p>我的处理方式是响应按键事件的时候，查找对应的链接地址，然后跳转。这个处理过程根据页面文档的结构不同而不同，不过思想是一样的。以本站的首页为例，日志标题列表的结构如下：<span id="more-239"></span></p>
<pre name="code" class="html">&lt;div id="posts"&gt;
&lt;h2&gt;&lt;a href="第一篇日志链接"&gt;第一篇日志标题&lt;/a&gt;&lt;/h2&gt;
&lt;h2&gt;&lt;a href="第二篇日志链接"&gt;第二篇日志标题&lt;/a&gt;&lt;/h2&gt;
......
&lt;h2&gt;&lt;a href="第十篇日志链接"&gt;第十篇日志标题&lt;/a&gt;&lt;/h2&gt;
&lt;/div&gt;</pre>
<p>通过对<a href="http://domety.com/archives/238/">HTML DOM</a>模型的理解，获取连接地址的方法如下：</p>
<pre name="code" class="js">var elems = document.getElementById("posts").getElementsByTagName("h2");
var elem = elems[i].childNodes[0];
if(elem){
var lin = elem.href;
window.location.assign(lin);
}</pre>
<p>其中i的值为0~9,由按键决定。这里我们用到了document对象以及getElementById、getElementByTagName方法，还有childNodes和href属性。elems保存Posts下的所有h2元素集合，然后再通过childNodes属性来得到a标签元素，也就是一个Anchor对象，其href属性就是我们要查找的链接地址。最后通过window.location的assign方法，重新加载页面。如果要在新窗口中打开页面的话，请使用window.open()方法。</p>
<p>查找上一篇文章和下一篇文章链接的方法是一样的，主要分析页面文档的结构。</p>
<p>目前对DOM模型的操作还很生疏，更深层次的东西暂时还无法和大家分享，我会在第一时间把实战经验分享给大家，谢谢关注。</p>
]]></content:encoded>
			<wfw:commentRss>http://domety.com/archives/239/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>HTML DOM 模型</title>
		<link>http://domety.com/archives/238/</link>
		<comments>http://domety.com/archives/238/#comments</comments>
		<pubDate>Tue, 30 Mar 2010 09:15:46 +0000</pubDate>
		<dc:creator>DDBug</dc:creator>
				<category><![CDATA[javascript]]></category>
		<category><![CDATA[DOM]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[js]]></category>

		<guid isPermaLink="false">http://domety.com/?p=238</guid>
		<description><![CDATA[本文收集整理自http://w3schools.com,简单的介绍一下HTML DOM模型。
HTML DOM模型可以用下面的html tree进行概括：

上图中的每一个方框都代表一个节点(Node)。如果你想动态的更改页面内容，只需要更改相应的节点即可。如果你打开任何一个网站，查看其源代码，会发现这个模型无处不在。
下面是节点之间的关系图

&#60;html&#62;节点是一个页面的根节点，当然你可以把上图中的节点替换成其它节点，也可以找到类似的关系。通过firstChild、lastChild、nextsibling、previousSibling、childNodes、parentNode等节点属性，可以遍历整个页面文档。
常用的节点属性和方法
我们假设x是一个一个节点对象，下面是一些常用的属性：

x.innerHTML —— 可以获取或更改x的文本内容
x.nodeName —— x的节点名称，只读，不可改写。如果x是HTML元素，返回的就是元素名(如p,h1,a等)，如果x是HTML标签的属性，返回的就是属性名(如href、title等)。
x.nodeValue —— 节点值。如果x是HTML元素,nodeValue无意义。如果果x是HTML标签的属性，则表示属性值。如果x是文本节点(Text)，则表示文本的内容。
x.parentNode —— x的父节点
x.childNodes —— x 的子节点集合
x.attributes —— x的属性集合

另外还有一个nodeType属性，表示节点类型：



Element type
NodeType


Element
1


Attribute
2


Text
3


Comment
8


Document
9



下面是一些常用的方法：

x.getElementById(id) &#8211; 根据元素id获取节点对象
x.getElementsByTagName(name) &#8211; 根据标签名获取所有元素的集合
x.appendChild(node) &#8211; 给x插入一个子节点
x.removeChild(node) &#8211; 从x中删除一个子节点

最后再了解一下HTML DOM中的事件
页面中的每一个元素都有触发脚本语句或函数的事件。比如我们点击页面中的某个按钮的时候，就触发了相应的&#8221;点击&#8221;事件，如果我们为这个&#8221;click&#8221;事件注册了脚本语句或函数的话，这个时候就会执行注册的脚本语句或函数。
以下列举几个事件触发的例子：

当鼠标点击的时候，触发&#8221;onclick&#8221;
当加载完页面或图片的时候，触发&#8221;onload&#8221;
当鼠标经过指定的区域的时候，触发&#8221;onmouseover&#8221;
当元素获得焦点的时候，触发&#8221;onfocus&#8221;
当按下键盘的时候，触发&#8221;onkeydown&#8221;,&#8221;onkeypress&#8221;,&#8221;onkeyup&#8221;

更多事件请参考http://w3schools.com/jsref/dom_obj_event.asp
]]></description>
			<content:encoded><![CDATA[<p>本文收集整理自http://w3schools.com,简单的介绍一下HTML DOM模型。</p>
<p>HTML DOM模型可以用下面的html tree进行概括：<span id="more-238"></span></p>
<p><img class="alignnone" title="html tree" src="http://i623.domety.com/albums/tt312/baolai5/201004/htmltree.gif" alt="" width="486" height="266" /></p>
<p>上图中的每一个方框都代表一个节点(Node)。如果你想动态的更改页面内容，只需要更改相应的节点即可。如果你打开任何一个网站，查看其源代码，会发现这个模型无处不在。</p>
<p>下面是节点之间的关系图</p>
<p><img class="alignnone" title="navigate" src="http://i623.domety.com/albums/tt312/baolai5/201004/navigate.gif" alt="" width="362" height="255" /></p>
<p>&lt;html&gt;节点是一个页面的根节点，当然你可以把上图中的节点替换成其它节点，也可以找到类似的关系。通过firstChild、lastChild、nextsibling、previousSibling、childNodes、parentNode等节点属性，可以遍历整个页面文档。</p>
<h3>常用的节点属性和方法</h3>
<p>我们假设x是一个一个节点对象，下面是一些常用的属性：</p>
<ul>
<li>x.innerHTML —— 可以获取或更改x的文本内容</li>
<li>x.nodeName —— x的节点名称，只读，不可改写。如果x是HTML元素，返回的就是元素名(如p,h1,a等)，如果x是HTML标签的属性，返回的就是属性名(如href、title等)。</li>
<li>x.nodeValue —— 节点值。如果x是HTML元素,nodeValue无意义。如果果x是HTML标签的属性，则表示属性值。如果x是文本节点(Text)，则表示文本的内容。</li>
<li>x.parentNode —— x的父节点</li>
<li>x.childNodes —— x 的子节点集合</li>
<li>x.attributes —— x的属性集合</li>
</ul>
<p>另外还有一个nodeType属性，表示节点类型：</p>
<table style="height: 102px;" border="1" cellspacing="0" cellpadding="0" width="368">
<tbody>
<tr>
<th width="85%" align="left" valign="top">Element type</th>
<th width="15%" align="left" valign="top">NodeType</th>
</tr>
<tr>
<td valign="top">Element</td>
<td valign="top">1</td>
</tr>
<tr>
<td valign="top">Attribute</td>
<td valign="top">2</td>
</tr>
<tr>
<td valign="top">Text</td>
<td valign="top">3</td>
</tr>
<tr>
<td valign="top">Comment</td>
<td valign="top">8</td>
</tr>
<tr>
<td valign="top">Document</td>
<td valign="top">9</td>
</tr>
</tbody>
</table>
<p>下面是一些常用的方法：</p>
<ul>
<li>x.getElementById(<em>id</em>) &#8211; 根据元素id获取节点对象</li>
<li>x.getElementsByTagName(<em>name</em>) &#8211; 根据标签名获取所有元素的集合</li>
<li>x.appendChild(<em>node</em>) &#8211; 给x插入一个子节点</li>
<li>x.removeChild(<em>node</em>) &#8211; 从x中删除一个子节点</li>
</ul>
<h3>最后再了解一下HTML DOM中的事件</h3>
<p>页面中的每一个元素都有触发脚本语句或函数的事件。比如我们点击页面中的某个按钮的时候，就触发了相应的&#8221;点击&#8221;事件，如果我们为这个&#8221;click&#8221;事件注册了脚本语句或函数的话，这个时候就会执行注册的脚本语句或函数。</p>
<p>以下列举几个事件触发的例子：</p>
<ul>
<li>当鼠标点击的时候，触发&#8221;onclick&#8221;</li>
<li>当加载完页面或图片的时候，触发&#8221;onload&#8221;</li>
<li>当鼠标经过指定的区域的时候，触发&#8221;onmouseover&#8221;</li>
<li>当元素获得焦点的时候，触发&#8221;onfocus&#8221;</li>
<li>当按下键盘的时候，触发&#8221;onkeydown&#8221;,&#8221;onkeypress&#8221;,&#8221;onkeyup&#8221;</li>
</ul>
<p>更多事件请参考<a href="http://w3schools.com/jsref/dom_obj_event.asp">http://w3schools.com/jsref/dom_obj_event.asp</a></p>
]]></content:encoded>
			<wfw:commentRss>http://domety.com/archives/238/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>为页面添加快捷键响应</title>
		<link>http://domety.com/archives/237/</link>
		<comments>http://domety.com/archives/237/#comments</comments>
		<pubDate>Mon, 29 Mar 2010 17:52:28 +0000</pubDate>
		<dc:creator>DDBug</dc:creator>
				<category><![CDATA[javascript]]></category>
		<category><![CDATA[js]]></category>
		<category><![CDATA[快捷键]]></category>

		<guid isPermaLink="false">http://domety.com/?p=237</guid>
		<description><![CDATA[虽然wordpress的默认主题也把该链接加入到了页面中，因为这确实为管理网站带来了方便。但我总觉得像“登录控制台”这样的链接不应该出现在页面上，所以一直没有在主题中加入这样的链接。但是时间长了，也感觉老是从地址栏输入登录地址也有些不方便，于是就想到了给页面添加一个登录后台的快捷键。
首先写一个响应事件的js函数

function getKeyCode(evt) {
evt = (evt) ? evt : ((window.event) ? window.event : "");
if(evt) {
// 按下Ctrl+L键后打开后台页面
if(evt.ctrlKey&#38;&#38;evt.keyCode==76)
window.open("http://domety.com/wp-admin/");
}
}

这样的函数并没有什么难点，主要就是要知道对应按键的键码（本例中使用的快捷键是Ctrl+L，L的键码是76）。
接下来在body元素响应onkeydown事件

&#60;body onkeydown="getKeyCode(event)"&#62;

同样，我们也可以为评论回复按钮添加快捷键(通常为Ctrl+Enter)，当然你也可以定义一个响应函数，或者在上面函数的基础稍作修改。不过我认为最简单和最直接的方法是把响应代码直接写到form元素的属性里，因为代码很短，如下
onkeydown="if(event.ctrlKey&#38;&#38;event.keyCode==13)this.submit.click()"
只需要在form的属性中把上面一段代码加进去即可，在wordpress中，form一般位于comments.php文件中。
拓展一下思路，还可以为你的网站添加一些更好玩的快捷键，比如说“上一篇文章”、“下一篇文章”、“评论”等等&#8230;&#8230;
下面是一张键盘的键码对照表，以供参考，或者去我的domety实验室查询http://lab.domety.com/keycode/

]]></description>
			<content:encoded><![CDATA[<p>虽然wordpress的默认主题也把该链接加入到了页面中，因为这确实为管理网站带来了方便。但我总觉得像“登录控制台”这样的链接不应该出现在页面上，所以一直没有在主题中加入这样的链接。但是时间长了，也感觉老是从地址栏输入登录地址也有些不方便，于是就想到了给页面添加一个登录后台的快捷键。<span id="more-237"></span><br id="__mce" /></p>
<div>首先写一个响应事件的js函数</div>
<pre name="code" class="js">
function getKeyCode(evt) {
evt = (evt) ? evt : ((window.event) ? window.event : "");
if(evt) {
// 按下Ctrl+L键后打开后台页面
if(evt.ctrlKey&amp;&amp;evt.keyCode==76)
window.open("<a href="http://domety.com/wp-admin/" target="_blank">http://domety.com/wp-admin/</a>");
}
}
</pre>
<div>这样的函数并没有什么难点，主要就是要知道对应按键的键码（本例中使用的快捷键是Ctrl+L，L的键码是76）。</div>
<div>接下来在body元素响应onkeydown事件</div>
<pre name="code" class="js">
&lt;body onkeydown="getKeyCode(event)"&gt;
</pre>
<div>同样，我们也可以为评论回复按钮添加快捷键(通常为Ctrl+Enter)，当然你也可以定义一个响应函数，或者在上面函数的基础稍作修改。不过我认为最简单和最直接的方法是把响应代码直接写到form元素的属性里，因为代码很短，如下</div>
<pre name="code" class="js">onkeydown="if(event.ctrlKey&amp;&amp;event.keyCode==13)this.submit.click()"</pre>
<div>只需要在form的属性中把上面一段代码加进去即可，在wordpress中，form一般位于comments.php文件中。</div>
<div>拓展一下思路，还可以为你的网站添加一些更好玩的快捷键，比如说“上一篇文章”、“下一篇文章”、“评论”等等&#8230;&#8230;</div>
<div>下面是一张键盘的键码对照表，以供参考，或者去我的domety实验室查询<a href="http://lab.domety.com/keycode/" target="_blank">http://lab.domety.com/keycode/</a></div>
<div><img class="alignnone" title="keycode" src="http://i623.domety.com/albums/tt312/baolai5/201004/KeyCode.png" alt="" width="472" height="1023" /></div>
]]></content:encoded>
			<wfw:commentRss>http://domety.com/archives/237/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>给文章添加“收藏到”(QQ书签、Google书签、百度搜藏)</title>
		<link>http://domety.com/archives/234/</link>
		<comments>http://domety.com/archives/234/#comments</comments>
		<pubDate>Sat, 30 Jan 2010 04:01:18 +0000</pubDate>
		<dc:creator>DDBug</dc:creator>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[QQ]]></category>
		<category><![CDATA[收藏]]></category>

		<guid isPermaLink="false">http://domety.com/?p=234</guid>
		<description><![CDATA[为了方便有需要的朋友收藏小站有用的文章，做了一个收藏到 QQ书签 、 Google书签 、 百度搜藏 、 Yahoo收藏 、 乐收 的链接。其实网上也有很多第三方的js文件可以很方便的做到这一点，只需要加载一个js文件即可。因为DDBug不太喜欢加载第三方的东西，能不加载就不加载，所以本文讨论的是最原始的链接形式的。
下面给出几个常用的在线收藏夹的收藏链接，标题以domety为例，网址以http://domety.com/为例。在具体的使用过程中，只需要把这两个替换掉你自己文章的标题和网址即可。
QQ书签：http://shuqian.qq.com/post?title=domety&#38;uri=http://domety.com/
google书签：http://www.google.com/bookmarks/mark?op=add&#38;hl=zh_cn&#38;title=domety&#38;bkmk=http://domety.com/
百度搜藏：http://cang.baidu.com/do/add?it=domety&#38;iu=http://domety.com/
yahoo收藏：http://myweb.cn.yahoo.com/popadd.html?title=domety&#38;url=http://domety.com/
新浪ViVi：http://vivi.sina.com.cn/collect/icollect.php?title=domety&#38;url=http://domety.com/
乐收：http://leshou.com/post?act=shou&#38;title=domety&#38;url=http://domety.com/
以下是本站的实现代码，以做参考

&#60;?php $title = get_the_title();
$permalink = get_permalink();
$title = urlencode($title);
$permalink = esc_url($permalink);
// QQ书签
$output = '&#60;a href="http://shuqian.qq.com/post?title='.$title.'&#38;uri='.$permalink.'" title="收藏到QQ书签" target="_blank"&#62;QQ书签&#60;/a&#62;';
// google书签
$output .= ' &#124; &#60;a href="http://www.google.com/bookmarks/mark?op=add&#38;hl=zh_cn&#38;title='.$title.'&#38;bkmk='.$permalink.'" title="收藏到google书签" target="_blank"&#62;Google书签&#60;/a&#62;';
// 百度搜藏
$output .= ' &#124; &#60;a href="http://cang.baidu.com/do/add?it='.$title.'&#38;iu='.$permalink.'" title="收藏到百度搜藏" target="_blank"&#62;百度搜藏&#60;/a&#62;';
// yahoo收藏
$output .= ' &#124; &#60;a href="http://myweb.cn.yahoo.com/popadd.html?title='.$title.'&#38;url='.$permalink.'" title="收藏到Yahoo收藏" target="_blank"&#62;Yahoo收藏&#60;/a&#62;';
// 乐收
$output .= ' &#124; &#60;a href="http://leshou.com/post?act=shou&#38;title='.$title.'&#38;url='.$permalink.'" title="收藏到乐收" target="_blank"&#62;乐收&#60;/a&#62;';
echo $output; ?&#62;
]]></description>
			<content:encoded><![CDATA[<p>为了方便有需要的朋友收藏小站有用的文章，做了一个收藏到 QQ书签 、 Google书签 、 百度搜藏 、 Yahoo收藏 、 乐收 的链接。其实网上也有很多第三方的js文件可以很方便的做到这一点，只需要加载一个js文件即可。因为DDBug不太喜欢加载第三方的东西，能不加载就不加载，所以本文讨论的是最原始的链接形式的。</p>
<p>下面给出几个常用的在线收藏夹的收藏链接，标题以domety为例，网址以http://domety.com/为例。在具体的使用过程中，只需要把这两个替换掉你自己文章的标题和网址即可。</p>
<p>QQ书签：<a href="http://shuqian.qq.com/post?title=domety&amp;uri=http://domety.com/" target="_blank">http://shuqian.qq.com/post?title=domety&amp;uri=http://domety.com/</a></p>
<p>google书签：<a href="http://www.google.com/bookmarks/mark?op=add&amp;hl=zh_cn&amp;title=domety&amp;bkmk=http://domety.com/" target="_blank">http://www.google.com/bookmarks/mark?op=add&amp;hl=zh_cn&amp;title=domety&amp;bkmk=http://domety.com/</a></p>
<p>百度搜藏：<a href="http://cang.baidu.com/do/add?it=domety&amp;iu=http://domety.com/" target="_blank">http://cang.baidu.com/do/add?it=domety&amp;iu=http://domety.com/</a></p>
<p>yahoo收藏：<a href="http://myweb.cn.yahoo.com/popadd.html?title=domety&amp;url=http://domety.com/" target="_blank">http://myweb.cn.yahoo.com/popadd.html?title=domety&amp;url=http://domety.com/</a></p>
<p>新浪ViVi：<a href="http://vivi.sina.com.cn/collect/icollect.php?title=domety&amp;url=http://domety.com/" target="_blank">http://vivi.sina.com.cn/collect/icollect.php?title=domety&amp;url=http://domety.com/</a></p>
<p>乐收：<a href="http://leshou.com/post?act=shou&amp;url=http://domety.com/&amp;title=domety" target="_blank">http://leshou.com/post?act=shou&amp;title=domety&amp;url=http://domety.com/</a></p>
<p>以下是本站的实现代码，以做参考</p>
<pre name="code" class="php">
&lt;?php $title = get_the_title();
$permalink = get_permalink();
$title = urlencode($title);
$permalink = esc_url($permalink);
// QQ书签
$output = '&lt;a href="http://shuqian.qq.com/post?title='.$title.'&amp;uri='.$permalink.'" title="收藏到QQ书签" target="_blank"&gt;QQ书签&lt;/a&gt;';
// google书签
$output .= ' | &lt;a href="http://www.google.com/bookmarks/mark?op=add&amp;hl=zh_cn&amp;title='.$title.'&amp;bkmk='.$permalink.'" title="收藏到google书签" target="_blank"&gt;Google书签&lt;/a&gt;';
// 百度搜藏
$output .= ' | &lt;a href="http://cang.baidu.com/do/add?it='.$title.'&amp;iu='.$permalink.'" title="收藏到百度搜藏" target="_blank"&gt;百度搜藏&lt;/a&gt;';
// yahoo收藏
$output .= ' | &lt;a href="http://myweb.cn.yahoo.com/popadd.html?title='.$title.'&amp;url='.$permalink.'" title="收藏到Yahoo收藏" target="_blank"&gt;Yahoo收藏&lt;/a&gt;';
// 乐收
$output .= ' | &lt;a href="http://leshou.com/post?act=shou&amp;title='.$title.'&amp;url='.$permalink.'" title="收藏到乐收" target="_blank"&gt;乐收&lt;/a&gt;';
echo $output; ?&gt;</pre>
]]></content:encoded>
			<wfw:commentRss>http://domety.com/archives/234/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
	</channel>
</rss>

