# 引用通告类
引用通告类提供了一些方法用于发送和接受引用通告数据。
如果你还不知道什么是引用通告,可以在 [这里](http://en.wikipedia.org/wiki/Trackback) 找到更多信息。
* [使用引用通告类](http://codeigniter.org.cn/user_guide/libraries/trackback.html#id3)
* [初始化类](http://codeigniter.org.cn/user_guide/libraries/trackback.html#id4)
* [发送引用通告](http://codeigniter.org.cn/user_guide/libraries/trackback.html#id5)
* [接受引用通告](http://codeigniter.org.cn/user_guide/libraries/trackback.html#id6)
* [你的 Ping URL](http://codeigniter.org.cn/user_guide/libraries/trackback.html#ping-url)
* [新建 Trackback 表](http://codeigniter.org.cn/user_guide/libraries/trackback.html#trackback)
* [处理引用通告](http://codeigniter.org.cn/user_guide/libraries/trackback.html#id7)
* [说明](http://codeigniter.org.cn/user_guide/libraries/trackback.html#id8)
* [类参考](http://codeigniter.org.cn/user_guide/libraries/trackback.html#id9)
## [使用引用通告类](http://codeigniter.org.cn/user_guide/libraries/trackback.html#id10)
### [初始化类](http://codeigniter.org.cn/user_guide/libraries/trackback.html#id11)
正如 CodeIgniter 中的其他类一样,在你的控制器中使用 $this->load->library() 方法来初始化引用通告类:
~~~
$this->load->library('trackback');
~~~
初始化之后,引用通告类的对象就可以这样访问:
~~~
$this->trackback
~~~
### [发送引用通告](http://codeigniter.org.cn/user_guide/libraries/trackback.html#id12)
可以在你的控制器的任何方法中使用类似于如下代码来发送引用通告:
~~~
$this->load->library('trackback');
$tb_data = array(
'ping_url' => 'http://example.com/trackback/456',
'url' => 'http://www.my-example.com/blog/entry/123',
'title' => 'The Title of My Entry',
'excerpt' => 'The entry content.',
'blog_name' => 'My Blog Name',
'charset' => 'utf-8'
);
if ( ! $this->trackback->send($tb_data))
{
echo $this->trackback->display_errors();
}
else
{
echo 'Trackback was sent!';
}
~~~
数组中每一项的解释:
* **ping_url** - 你想发送引用通告到该站点的 URL ,你可以同时向发送多个 URL 发送,多个 URL 之间使用逗号分割
* **url** - 对应的是你的博客的 URL
* **title** - 你的博客标题
* **excerpt** - 你的博客内容(摘要)
* **blog_name** - 你的博客的名称
* **charset** - 你的博客所使用的字符编码,如果忽略,默认使用 UTF-8
注解
引用通告类会自动发送你的博客的前 500 个字符,同时它也会去除所有的 HTML 标签。
发送引用通告的方法会根据成功或失败返回 TRUE 或 FALSE ,如果失败,可以使用下面的代码获取错误信息:
~~~
$this->trackback->display_errors();
~~~
### [接受引用通告](http://codeigniter.org.cn/user_guide/libraries/trackback.html#id13)
在接受引用通告之前,你必须先创建一个博客,如果你还没有博客, 那么接下来的内容对你来说就没什么意义。
接受引用通告比发送要复杂一点,这是因为你需要一个数据库表来保存它们, 而且你还需要对接受到的引用通告数据进行验证。我们鼓励你实现一个完整的验证过程, 来防止垃圾信息和重复数据。你可能还希望限制一段时间内从某个 IP 发送过来的引用通告的数量, 以此减少垃圾信息。接受引用通告的过程很简单,验证才是难点。
### [你的 Ping URL](http://codeigniter.org.cn/user_guide/libraries/trackback.html#id14)
为了接受引用通告,你必须在你的每篇博客旁边显示一个引用通告 URL , 人们使用这个 URL 来向你发送引用通告(我们称其为 Ping URL)。
你的 Ping URL 必须指向一个控制器方法,在该方法中写接受引用通告的代码,而且该 URL 必须包含你博客的 ID ,这样当接受到引用通告时你就可以知道是针对哪篇博客的。
例如,假设你的控制器类叫 Trackback ,接受方法叫 receive ,你的 Ping URL 将类似于下面这样:
~~~
http://example.com/index.php/trackback/receive/entry_id
~~~
其中,entry_id 代表你每篇博客的 ID 。
### [新建 Trackback 表](http://codeigniter.org.cn/user_guide/libraries/trackback.html#id15)
在接受引用通告之前,你必须创建一个数据库表来储存它。下面是表的一个基本原型:
~~~
CREATE TABLE trackbacks (
tb_id int(10) unsigned NOT NULL auto_increment,
entry_id int(10) unsigned NOT NULL default 0,
url varchar(200) NOT NULL,
title varchar(100) NOT NULL,
excerpt text NOT NULL,
blog_name varchar(100) NOT NULL,
tb_date int(10) NOT NULL,
ip_address varchar(45) NOT NULL,
PRIMARY KEY `tb_id` (`tb_id`),
KEY `entry_id` (`entry_id`)
);
~~~
在引用通告的规范中只有四项信息是发送一个引用通告所必须的:url、title、excerpt 和 blog_name 。 但为了让数据更有用,我们还在表中添加了几个其他的字段(date、ip_address 等)。
### [处理引用通告](http://codeigniter.org.cn/user_guide/libraries/trackback.html#id16)
下面是一个如何接受并处理引用通告的例子。下面的代码将放在你的接受引用通告的控制器方法中:
~~~
$this->load->library('trackback');
$this->load->database();
if ($this->uri->segment(3) == FALSE)
{
$this->trackback->send_error('Unable to determine the entry ID');
}
if ( ! $this->trackback->receive())
{
$this->trackback->send_error('The Trackback did not contain valid data');
}
$data = array(
'tb_id' => '',
'entry_id' => $this->uri->segment(3),
'url' => $this->trackback->data('url'),
'title' => $this->trackback->data('title'),
'excerpt' => $this->trackback->data('excerpt'),
'blog_name' => $this->trackback->data('blog_name'),
'tb_date' => time(),
'ip_address' => $this->input->ip_address()
);
$sql = $this->db->insert_string('trackbacks', $data);
$this->db->query($sql);
$this->trackback->send_success();
~~~
#### [说明](http://codeigniter.org.cn/user_guide/libraries/trackback.html#id17)
entry_id 将从你的 URL 的第三段获取,这是基于我们之前例子中的 URL:
~~~
http://example.com/index.php/trackback/receive/entry_id
~~~
注意 entry_id 是第三段,你可以这样获取:
~~~
$this->uri->segment(3);
~~~
在我们上面的接受引用通告的代码中,如果第三段为空,我们将发送一个错误信息。 如果没有有效的 entry_id ,没必要继续处理下去。
$this->trackback->receive() 是个简单的验证方法,它检查接受到的数据并确保包含了 我们所需的四种信息:url、title、excerpt 和 blog_name 。该方法成功返回 TRUE , 失败返回 FALSE 。如果失败,也发送一个错误信息。
接受到的引用通告数据可以通过下面的方法来获取:
~~~
$this->trackback->data('item')
~~~
其中,item 代表四种信息中的一种:url、title、excerpt 和 blog_name 。
如果引用通告数据成功接受,你可以使用下面的代码发送一个成功消息:
~~~
$this->trackback->send_success();
~~~
注解
上面的代码中不包含数据校验,我们建议你添加。
## [类参考](http://codeigniter.org.cn/user_guide/libraries/trackback.html#id18)
classCI_Trackback
$data = array('url' => '', 'title' => '', 'excerpt' => '', 'blog_name' => '', 'charset' => '')
引用通告数据的数组。
$convert_ascii = TRUE
是否将高位 ASCII 和 MS Word 特殊字符 转换为 HTML 实体。
send($tb_data)
参数:
* **$tb_data** (array) -- Trackback data
返回: TRUE on success, FALSE on failure
返回类型: bool
发送引用通告。
receive()
返回: TRUE on success, FALSE on failure
返回类型: bool
该方法简单的检验接受到的引用通告数据,成功返回 TRUE ,失败返回 FALSE 。 如果数据是有效的,将添加到 $this->data 数组,以便保存到数据库。
send_error([$message = 'Incomplete information')
参数:
* **$message** (string) -- Error message
返回类型: void
向引用通告请求返回一条错误信息。
注解
该方法将会终止脚本的执行。
send_success()
返回类型: void
向引用通告请求返回一条成功信息。
注解
该方法将会终止脚本的执行。
data($item)
参数:
* **$item** (string) -- Data key
返回: Data value or empty string if not found
返回类型: string
从引用通告数据中获取一项记录。
process($url, $data)
参数:
* **$url** (string) -- Target url
* **$data** (string) -- Raw POST data
返回: TRUE on success, FALSE on failure
返回类型: bool
打开一个 socket 连接,并将数据传送到服务器。成功返回 TRUE ,失败返回 FALSE 。
extract_urls($urls)
参数:
* **$urls** (string) -- Comma-separated URL list
返回: Array of URLs
返回类型: array
该方法用于发送多条引用通告,它接受一个包含多条 URL 的字符串 (以逗号或空格分割),将其转换为一个数组。
validate_url(&$url)
参数:
* **$url** (string) -- Trackback URL
返回类型: void
如果 URL 中没有包括协议部分,该方法简单将 http:// 前缀添加到 URL 前面。
get_id($url)
参数:
* **$url** (string) -- Trackback URL
返回: URL ID or FALSE on failure
返回类型: string
查找并返回一个引用通告 URL 的 ID ,失败返回 FALSE 。
convert_xml($str)
参数:
* **$str** (string) -- Input string
返回: Converted string
返回类型: string
将 XML 保留字符转换为实体。
limit_characters($str[, $n = 500[, $end_char = '…']])
参数:
* **$str** (string) -- Input string
* **$n** (int) -- Max characters number
* **$end_char** (string) -- Character to put at end of string
返回: Shortened string
返回类型: string
将字符串裁剪到指定字符个数,会保持单词的完整性。
convert_ascii($str)
参数:
* **$str** (string) -- Input string
返回: Converted string
返回类型: string
将高位 ASCII 和 MS Word 特殊字符转换为 HTML 实体。
set_error($msg)
参数:
* **$msg** (string) -- Error message
返回类型: void
设置一个错误信息。
display_errors([$open = ''[, $close = '']])
参数:
* **$open** (string) -- Open tag
* **$close** (string) -- Close tag
返回: HTML formatted error messages
返回类型: string
返回 HTML 格式的错误信息,如果没有错误,返回空字符串。
- 欢迎使用 CodeIgniter
- 安装说明
- 下载 CodeIgniter
- 安装说明
- 从老版本升级
- 疑难解答
- CodeIgniter 概览
- CodeIgniter 将从这里开始
- CodeIgniter 是什么?
- 支持特性
- 应用程序流程图
- 模型-视图-控制器
- 设计与架构目标
- 教程 - 内容提要
- 加载静态内容
- 读取新闻条目
- 创建新闻条目
- 结束语
- 常规主题
- CodeIgniter URL
- 控制器
- 保留名称
- 视图
- 模型
- 辅助函数
- 使用 CodeIgniter 类库
- 创建类库
- 使用 CodeIgniter 驱动器
- 创建驱动器
- 创建核心系统类
- 创建附属类
- 钩子 - 扩展框架核心
- 自动加载资源
- 公共函数
- 兼容性函数
- URI 路由
- 错误处理
- 网页缓存
- 程序分析
- 以 CLI 方式运行
- 管理你的应用程序
- 处理多环境
- 在视图文件中使用 PHP 替代语法
- 安全
- PHP 开发规范
- 类库参考
- 基准测试类
- 缓存驱动器
- 日历类
- 购物车类
- 配置类
- Email 类
- 加密类
- 加密类(新版)
- 文件上传类
- 表单验证类
- FTP 类
- 图像处理类
- 输入类
- Javascript 类
- 语言类
- 加载器类
- 迁移类
- 输出类
- 分页类
- 模板解析类
- 安全类
- Session 类
- HTML 表格类
- 引用通告类
- 排版类
- 单元测试类
- URI 类
- 用户代理类
- XML-RPC 与 XML-RPC 服务器类
- Zip 编码类
- 数据库参考
- 数据库快速入门: 示例代码
- 数据库配置
- 连接你的数据库
- 查询
- 生成查询结果
- 查询辅助函数
- 查询构造器类
- 事务
- 数据库元数据
- 自定义函数调用
- 数据库缓存类
- 数据库工厂类
- 数据库工具类
- 数据库驱动器参考
- 辅助函数参考
- 数组辅助函数
- 验证码辅助函数
- Cookie 辅助函数
- 日期辅助函数
- 目录辅助函数
- 下载辅助函数
- 邮件辅助函数
- 文件辅助函数
- 表单辅助函数
- HTML 辅助函数
- 语言辅助函数
- Inflector 辅助函数
- 数字辅助函数
- 路径辅助函数
- 安全辅助函数
- 表情辅助函数
- 字符串辅助函数
- 文本辅助函数
- 排版辅助函数
- URL 辅助函数
- XML 辅助函数
- 向 CodeIgniter 贡献你的力量