W3Cschool
恭喜您成為首批注冊(cè)用戶(hù)
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
引用通告類(lèi)提供了一些方法用于發(fā)送和接受引用通告數(shù)據(jù)。
如果你還不知道什么是引用通告,可以在 這里 找到更多信息。
正如 CodeIgniter 中的其他類(lèi)一樣,在你的控制器中使用 $this->load->library() 方法來(lái)初始化引用通告類(lèi):
$this->load->library('trackback');
初始化之后,引用通告類(lèi)的對(duì)象就可以這樣訪問(wèn):
$this->trackback
可以在你的控制器的任何方法中使用類(lèi)似于如下代碼來(lái)發(fā)送引用通告:
$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!';
}
數(shù)組中每一項(xiàng)的解釋?zhuān)?/p>
注解
引用通告類(lèi)會(huì)自動(dòng)發(fā)送你的博客的前 500 個(gè)字符,同時(shí)它也會(huì)去除所有的 HTML 標(biāo)簽。
發(fā)送引用通告的方法會(huì)根據(jù)成功或失敗返回 TRUE 或 FALSE ,如果失敗,可以使用下面的代碼獲取錯(cuò)誤信息:
$this->trackback->display_errors();
在接受引用通告之前,你必須先創(chuàng)建一個(gè)博客,如果你還沒(méi)有博客, 那么接下來(lái)的內(nèi)容對(duì)你來(lái)說(shuō)就沒(méi)什么意義。
接受引用通告比發(fā)送要復(fù)雜一點(diǎn),這是因?yàn)槟阈枰粋€(gè)數(shù)據(jù)庫(kù)表來(lái)保存它們, 而且你還需要對(duì)接受到的引用通告數(shù)據(jù)進(jìn)行驗(yàn)證。我們鼓勵(lì)你實(shí)現(xiàn)一個(gè)完整的驗(yàn)證過(guò)程, 來(lái)防止垃圾信息和重復(fù)數(shù)據(jù)。你可能還希望限制一段時(shí)間內(nèi)從某個(gè) IP 發(fā)送過(guò)來(lái)的引用通告的數(shù)量, 以此減少垃圾信息。接受引用通告的過(guò)程很簡(jiǎn)單,驗(yàn)證才是難點(diǎn)。
為了接受引用通告,你必須在你的每篇博客旁邊顯示一個(gè)引用通告 URL , 人們使用這個(gè) URL 來(lái)向你發(fā)送引用通告(我們稱(chēng)其為 Ping URL)。
你的 Ping URL 必須指向一個(gè)控制器方法,在該方法中寫(xiě)接受引用通告的代碼,而且該 URL 必須包含你博客的 ID ,這樣當(dāng)接受到引用通告時(shí)你就可以知道是針對(duì)哪篇博客的。
例如,假設(shè)你的控制器類(lèi)叫 Trackback ,接受方法叫 receive ,你的 Ping URL 將類(lèi)似于下面這樣:
http://example.com/index.php/trackback/receive/entry_id
其中,entry_id 代表你每篇博客的 ID 。
在接受引用通告之前,你必須創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)表來(lái)儲(chǔ)存它。下面是表的一個(gè)基本原型:
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`)
);
在引用通告的規(guī)范中只有四項(xiàng)信息是發(fā)送一個(gè)引用通告所必須的:url、title、excerpt 和 blog_name 。 但為了讓數(shù)據(jù)更有用,我們還在表中添加了幾個(gè)其他的字段(date、ip_address 等)。
下面是一個(gè)如何接受并處理引用通告的例子。下面的代碼將放在你的接受引用通告的控制器方法中:
$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();
entry_id 將從你的 URL 的第三段獲取,這是基于我們之前例子中的 URL:
http://example.com/index.php/trackback/receive/entry_id
注意 entry_id 是第三段,你可以這樣獲取:
$this->uri->segment(3);
在我們上面的接受引用通告的代碼中,如果第三段為空,我們將發(fā)送一個(gè)錯(cuò)誤信息。 如果沒(méi)有有效的 entry_id ,沒(méi)必要繼續(xù)處理下去。
$this->trackback->receive() 是個(gè)簡(jiǎn)單的驗(yàn)證方法,它檢查接受到的數(shù)據(jù)并確保包含了 我們所需的四種信息:url、title、excerpt 和 blog_name 。該方法成功返回 TRUE , 失敗返回 FALSE 。如果失敗,也發(fā)送一個(gè)錯(cuò)誤信息。
接受到的引用通告數(shù)據(jù)可以通過(guò)下面的方法來(lái)獲取:
$this->trackback->data('item')
其中,item 代表四種信息中的一種:url、title、excerpt 和 blog_name 。
如果引用通告數(shù)據(jù)成功接受,你可以使用下面的代碼發(fā)送一個(gè)成功消息:
$this->trackback->send_success();
注解
上面的代碼中不包含數(shù)據(jù)校驗(yàn),我們建議你添加。
classCI_Trackback
$data = array('url' => '', 'title' => '', 'excerpt' => '', 'blog_name' => '', 'charset' => '')
引用通告數(shù)據(jù)的數(shù)組。
$convert_ascii = TRUE
是否將高位 ASCII 和 MS Word 特殊字符 轉(zhuǎn)換為 HTML 實(shí)體。
send($tb_data)
參數(shù):
返回: TRUE on success, FALSE on failure
返回類(lèi)型: bool
發(fā)送引用通告。
receive()
返回: TRUE on success, FALSE on failure
返回類(lèi)型: bool
該方法簡(jiǎn)單的檢驗(yàn)接受到的引用通告數(shù)據(jù),成功返回 TRUE ,失敗返回 FALSE 。 如果數(shù)據(jù)是有效的,將添加到 $this->data 數(shù)組,以便保存到數(shù)據(jù)庫(kù)。
send_error([$message = 'Incomplete information')
參數(shù):
返回類(lèi)型: void
向引用通告請(qǐng)求返回一條錯(cuò)誤信息。
注解
該方法將會(huì)終止腳本的執(zhí)行。
send_success()
返回類(lèi)型: void
向引用通告請(qǐng)求返回一條成功信息。
注解
該方法將會(huì)終止腳本的執(zhí)行。
data($item)
參數(shù):
返回: Data value or empty string if not found
返回類(lèi)型: string
從引用通告數(shù)據(jù)中獲取一項(xiàng)記錄。
process($url, $data)
參數(shù):
返回: TRUE on success, FALSE on failure
返回類(lèi)型: bool
打開(kāi)一個(gè) socket 連接,并將數(shù)據(jù)傳送到服務(wù)器。成功返回 TRUE ,失敗返回 FALSE 。
extract_urls($urls)
參數(shù):
返回: Array of URLs
返回類(lèi)型: array
該方法用于發(fā)送多條引用通告,它接受一個(gè)包含多條 URL 的字符串 (以逗號(hào)或空格分割),將其轉(zhuǎn)換為一個(gè)數(shù)組。
validate_url(&$url)
參數(shù):
返回類(lèi)型: void
如果 URL 中沒(méi)有包括協(xié)議部分,該方法簡(jiǎn)單將 http:// 前綴添加到 URL 前面。
get_id($url)
參數(shù):
返回: URL ID or FALSE on failure
返回類(lèi)型: string
查找并返回一個(gè)引用通告 URL 的 ID ,失敗返回 FALSE 。
convert_xml($str)
參數(shù):
返回: Converted string
返回類(lèi)型: string
將 XML 保留字符轉(zhuǎn)換為實(shí)體。
limit_characters($str[, $n = 500[, $end_char = '…']])
參數(shù):
返回: Shortened string
返回類(lèi)型: string
將字符串裁剪到指定字符個(gè)數(shù),會(huì)保持單詞的完整性。
convert_ascii($str)
參數(shù):
返回: Converted string
返回類(lèi)型: string
將高位 ASCII 和 MS Word 特殊字符轉(zhuǎn)換為 HTML 實(shí)體。
set_error($msg)
參數(shù):
返回類(lèi)型: void
設(shè)置一個(gè)錯(cuò)誤信息。
display_errors([$open = ''[, $close = '']])
參數(shù):
返回: HTML formatted error messages
返回類(lèi)型: string
返回 HTML 格式的錯(cuò)誤信息,如果沒(méi)有錯(cuò)誤,返回空字符串。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話(huà):173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: