trackback.html 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="utf-8" lang="utf-8">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5. <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=0" />
  6. <title>引用通告类 - CodeIgniter 中文手册|用户手册|用户指南|Wiki文档</title>
  7. <link rel="shortcut icon" href="http://codeigniter.org.cn/user_guide/../images/design/favicon.ico" type="image/x-icon" />
  8. <link rel="stylesheet" type="text/css" media="all" href="../userguide.css" />
  9. <link rel="search" href="http://codeigniter.org.cn/user_guide/../CodeIgniterSearch.xml" type="application/opensearchdescription+xml" title="CodeIgniter 搜索"/>
  10. <link rel="canonical" href="http://codeigniter.org.cn/user_guide/libraries/trackback.html" />
  11. <script type="text/javascript" src="../nav/mootools.js-ver=20130324.js"></script>
  12. <script type="text/javascript" src="../nav/mootools-more.js-ver=20130324.js"></script>
  13. <script type="text/javascript" src="../nav/nav.js-ver=20130324.js"></script>
  14. <script type="text/javascript" src="../nav/user_guide_menu.js-ver=20130324.js"></script>
  15. <meta name="robots" content="all" />
  16. <meta name="author" content="ExpressionEngine Dev Team" />
  17. <meta name="description" content="CodeIgniter 中文手册, CodeIgniter 用户指南, CodeIgniter User Guide, Wiki 文档" />
  18. </head>
  19. <body>
  20. <!-- START NAVIGATION -->
  21. <div id="nav">
  22. <div id="nav_inner">
  23. <script type="text/javascript">create_menu('../');</script>
  24. </div>
  25. </div>
  26. <script type="text/javascript">_setNavigation();</script>
  27. <div id="nav2"><a name="top"></a><a href="javascript:void(0);" onclick="myHeight.toggle();"><img src="../images/nav_toggle_darker.jpg" width="154" height="43" border="0" title="切换目录" alt="切换目录" /></a></div>
  28. <div id="masthead" class="clearfix">
  29. <div class="topbar-hd"><h1>CodeIgniter 用户指南 版本 2.2.0</h1></div>
  30. <div class="topbar-tip">编辑文档、查看近期更改请 <a href="#">登录</a> 或 <a href="#">注册</a>  <a href="#">找回密码</a></div> <div id="breadcrumb_right"><a href="../toc.html">目录页</a></div>
  31. </div>
  32. <!-- END NAVIGATION -->
  33. <!-- START BREADCRUMB -->
  34. <table cellpadding="0" cellspacing="0" border="0" style="width:100%">
  35. <tr>
  36. <td id="breadcrumb">
  37. <a href="#" target="_blank">CodeIgniter 中国首页</a>&nbsp;&#8250;&nbsp;
  38. <a href="../index.html">用户指南首页</a>&nbsp;&#8250;&nbsp;引用通告类 </td>
  39. <td id="searchbox">
  40. <form method="get" action="http://www.google.com.hk/search" target="google_window">
  41. <input type="hidden" name="client" value="pub-0176846097796333"></input>
  42. <input type="hidden" name="forid" value="1"></input>
  43. <input type="hidden" name="ie" value="UTF-8"></input>
  44. <input type="hidden" name="oe" value="UTF-8"></input>
  45. <input type="hidden" name="as_sitesearch" id="as_sitesearch" value="codeigniter.org.cn/user_guide/" />
  46. 搜索用户指南&nbsp;
  47. <input type="text" class="input" style="width:200px;" name="q" id="q" size="31" maxlength="255" value="" />
  48. &nbsp;
  49. <input type="submit" class="submit" name="sa" value="Go" />
  50. </form>
  51. </td>
  52. </tr>
  53. </table>
  54. <!-- END BREADCRUMB -->
  55. <div style="clear:both;text-align:right;padding: 6px 40px 0 0;">
  56. <a href="#" target="_blank">查看原文</a>
  57. </div>
  58. <!--<br clear="all" />--><!-- START CONTENT -->
  59. <div id="content">
  60. <h1>引用通告类</h1>
  61. <p>这个类提供了一组函数使你能够发送和接收引用通告的数据.</p>
  62. <p>如果你对引用通告不太熟悉的话可以在<a href="#">这里</a>查看更多的信息.</p>
  63. <h2>初始化类</h2>
  64. <p>和其它大多数类一样,Trackback 类 也是使用<dfn>$this-&gt;load-&gt;library</dfn> function:</p>
  65. <code>$this-&gt;load-&gt;library('trackback');</code>
  66. <p>加载完毕后,Trackback 对象就能够用: <dfn>$this-&gt;trackback</dfn>方式使用.</p>
  67. <h2>发送引用通告(Trackbacks)</h2>
  68. <p>引用通告可以从任何控制器函数中使用与示例相似的代码来发送:</p>
  69. <code>$this-&gt;load-&gt;library('trackback');<br />
  70. <br />
  71. $tb_data = array(<br />
  72. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'ping_url'&nbsp;&nbsp;=> 'http://example.com/trackback/456',<br />
  73. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'url'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=> 'http://www.my-example.com/blog/entry/123',<br />
  74. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'title'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=> 'The Title of My Entry',<br />
  75. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'excerpt'&nbsp;&nbsp;&nbsp;=> 'The entry content.',<br />
  76. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'blog_name' => 'My Blog Name',<br />
  77. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'charset'&nbsp;&nbsp;&nbsp;=> 'utf-8'<br />
  78. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;);<br />
  79. <br />
  80. if ( ! $this-&gt;trackback-&gt;send($tb_data))<br />
  81. &#123;<br />
  82. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo $this-&gt;trackback-&gt;display_errors();<br />
  83. &#125;<br />
  84. else<br />
  85. &#123;<br />
  86. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo 'Trackback was sent!';<br />
  87. &#125;</code>
  88. <p>数组数据说明:</p>
  89. <ul>
  90. <li><strong>ping_url</strong> - 你想要发送引用通告的站点的URL。要把引用通告发送至多个URL,请将这些URL用逗号分隔开来。</li>
  91. <li><strong>url</strong> - 能够浏览到你站点上的博客日志的URL。</li>
  92. <li><strong>title</strong> - 你的博客日志的标题。</li>
  93. <li><strong>excerpt</strong> - 你的博客日志的内容。说明:引用通告类只会自动地发送日志内容的前500个字符。它还会去除所有的HTML。</li>
  94. <li><strong>blog_name</strong> - 你的博客的名称。</li>
  95. <li><strong>charset</strong> - 你的博客所使用的字符编码。如果省略,将会默认使用UTF-8。</li>
  96. </ul>
  97. <p>根据发送的成功与否,引用通告发送函数将分别返回 TRUE/FALSE(布尔值)。如果发送失败,你可以通过下面的方式获取到错误信息:</p>
  98. <code>$this-&gt;trackback-&gt;display_errors();</code>
  99. <h2>接收引用通告</h2>
  100. <p>在接收引用通告之前你必须得创建一个博客。如果你连博客都没有,那就没有必要继续下去了。</p>
  101. <p>接收引用通告要比发送复杂一点,这仅仅是因为你将需要一个数据表来存储它们,而且你还得验证发送过来的引用通告数据。我们鼓励你去实现一个完整的验证过程,目的是防范垃圾信息和重复数据。你也许还想限制某个给定的时间范围内某个特定IP所能发送给你的引用通告数量,这样可以防范今后的垃圾邮件。接收引用通告的处理过程是很简单的;只不过验证过程占用了大部分的工作量。</p>
  102. <h2>你的 Ping URL</h2>
  103. <p>为了接受引用通告,你必须在每个博客日志旁边显示一个引用通告URL。这就是人们向你发送引用通告时用到的URL(我们把这个称为你的"Ping URL")。</p>
  104. <p>你的Ping URL必须指向一个包含了引用通告接收代码的控制器,而且URL也必须包含每个特定的日志条目的ID,因此当你接收到引用通告的时候,你就能够将它与某篇日志关联起来。</p>
  105. <p>例如,如果你的控制器类叫做 <dfn>Trackback</dfn>,接收函数叫做 <dfn>receive</dfn>,那么你的Ping URL看起来应该是这样的:</p>
  106. <code>http://example.com/index.php/trackback/receive/<samp>entry_id</samp></code>
  107. <p>其中 <samp>entry_id</samp> 代表了你的每篇日志单独的ID号。</p>
  108. <h2>创建一个引用通告表</h2>
  109. <p>在接收引用通告之前你必须创建一个表来存储它们。 下面是表的基础原型:</p>
  110. <textarea class="textarea" style="width:100%" cols="50" rows="13">
  111. CREATE TABLE trackbacks (
  112. tb_id int(10) unsigned NOT NULL auto_increment,
  113. entry_id int(10) unsigned NOT NULL default 0,
  114. url varchar(200) NOT NULL,
  115. title varchar(100) NOT NULL,
  116. excerpt text NOT NULL,
  117. blog_name varchar(100) NOT NULL,
  118. tb_date int(10) NOT NULL,
  119. ip_address varchar(16) NOT NULL,
  120. PRIMARY KEY `tb_id` (`tb_id`),
  121. KEY `entry_id` (`entry_id`)
  122. );</textarea>
  123. <p>引用通告规范只需要发送四部分信息(url,title,excerpt,blog_name)到引用通告,但是为了使数据更有用,我们在上面的数据表架构中添加了一些字段(日期、IP地址等等)。</p>
  124. <h2>处理一个引用通告</h2>
  125. <p>这里有一个关于如何接收和处理引用通告的范例。下面这些代码应该被用在你要接收引用通告的控制器函数里面。</p>
  126. <code>$this-&gt;load-&gt;library('trackback');<br />
  127. $this-&gt;load-&gt;database();<br />
  128. <br />
  129. if ($this-&gt;uri-&gt;segment(3) == FALSE)<br />
  130. &#123;<br />
  131. &nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;trackback-&gt;send_error("Unable to determine the entry ID");<br />
  132. &#125;<br />
  133. <br />
  134. if ( ! $this-&gt;trackback-&gt;receive())<br />
  135. &#123;<br />
  136. &nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;trackback-&gt;send_error("The Trackback did not contain valid data");<br />
  137. &#125;<br />
  138. <br />
  139. $data = array(<br />
  140. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'tb_id'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=> '',<br />
  141. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'entry_id'&nbsp;&nbsp;&nbsp;=> $this-&gt;uri-&gt;segment(3),<br />
  142. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'url'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=> $this-&gt;trackback-&gt;data('url'),<br />
  143. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'title'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=> $this-&gt;trackback-&gt;data('title'),<br />
  144. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'excerpt'&nbsp;&nbsp;&nbsp;&nbsp;=> $this-&gt;trackback-&gt;data('excerpt'),<br />
  145. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'blog_name'&nbsp;&nbsp;=> $this-&gt;trackback-&gt;data('blog_name'),<br />
  146. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'tb_date'&nbsp;&nbsp;&nbsp;&nbsp;=> time(),<br />
  147. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'ip_address' => $this-&gt;input-&gt;ip_address()<br />
  148. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;);<br />
  149. <br />
  150. $sql = $this-&gt;db-&gt;insert_string('trackbacks', $data);<br />
  151. $this-&gt;db-&gt;query($sql);<br />
  152. <br />
  153. $this-&gt;trackback-&gt;send_success();</code>
  154. <h4>说明:</h4>
  155. <p>条目ID号应该出现在你的URL的第三段中。这个的依据是我们之前给出的URI范例:</p>
  156. <code>http://example.com/index.php/trackback/receive/<samp>entry_id</samp></code>
  157. <p>注意 entry_id 位于URI的第三段,这样你就可以通过下面这种方式获取到它:</p>
  158. <code>$this-&gt;uri-&gt;segment(3);</code>
  159. <p>在上面的引用通告接收代码中,如果缺少第三段,我们将发出错误警告。缺少有效的条目ID,也就没有理由继续下去了。</p>
  160. <p> <dfn>$this-&gt;trackback-&gt;receive()</dfn> 函数只是一个简单的验证函数,作用是检查输入的数据以确保其中包含了必需的四部分数据(url, title, excerpt, blog_name)。如果成功则返回 TRUE,失败则返回 FALSE。如果失败,你将看到一条错误信息。</p>
  161. <p>可以使用下面的函数获取输入的引用通告数据:</p>
  162. <code>$this-&gt;trackback-&gt;data('<var>item</var>')</code>
  163. <p>其中 <var>item</var> 代表这四部分信息中的一部分: url, title, excerpt, 或者 blog_name。</p>
  164. <p>如果引用通告数据被成功地接收,你将可以使用下面的方式获取到一条成功信息:</p>
  165. <code>$this-&gt;trackback-&gt;send_success();</code>
  166. <p class="important"><strong>注意:</strong> 上面的代码不包含数据验证,那正是我们鼓励你去添加的。</p><p>&nbsp;</p>
  167. <div id="Contributors">
  168. 翻译贡献者:
  169. Drice, Hex, shnwqshnwq, yinzhili</div>
  170. <div id="DocDate">
  171. 最后修改: 2010-11-10 11:48:26</div>
  172. </div>
  173. <!-- END CONTENT -->
  174. <div id="footer">
  175. <p>
  176. 上一个主题:&nbsp;&nbsp;<a href="sessions.html">Session 类</a>&nbsp;&nbsp;&middot;&nbsp;&nbsp;<a href="#top">页首</a>
  177. &nbsp;&middot;&nbsp;&nbsp;<a href="../index.html">用户指南首页</a>&nbsp;&nbsp;&middot;&nbsp;&nbsp;下一个主题:&nbsp;&nbsp;<a href="parser.html">模板解析器类</a> </p>
  178. <p><a href="#">CodeIgniter</a> &nbsp;&middot;&nbsp; 版权所有 &#169; 2006-2013 &nbsp;&middot;&nbsp; <a href="#">Ellislab, Inc.</a></p>
  179. <p>中文化: <a href="#">CodeIgniter 中国</a> &nbsp;&middot;&nbsp; 制作: Hex &nbsp;&middot;&nbsp; 版本: 1.30 &nbsp;&middot;&nbsp; 鸣谢: 子非鱼</p>
  180. </div>
  181. </body>
  182. </html>