# 引用通告類
引用通告類提供了一些方法用于發送和接受引用通告數據。
如果你還不知道什么是引用通告,可以在?[這里](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 貢獻你的力量