CodeIgniter 引用通告類(lèi)

2018-07-21 15:40 更新

引用通告類(lèi)

引用通告類(lèi)提供了一些方法用于發(fā)送和接受引用通告數(shù)據(jù)。

如果你還不知道什么是引用通告,可以在 這里 找到更多信息。

使用引用通告類(lèi)

初始化類(lèi)

正如 CodeIgniter 中的其他類(lèi)一樣,在你的控制器中使用 $this->load->library() 方法來(lái)初始化引用通告類(lèi):

$this->load->library('trackback');

初始化之后,引用通告類(lèi)的對(duì)象就可以這樣訪問(wèn):

$this->trackback

發(fā)送引用通告

可以在你的控制器的任何方法中使用類(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>

  • ping_url - 你想發(fā)送引用通告到該站點(diǎn)的 URL ,你可以同時(shí)向發(fā)送多個(gè) URL 發(fā)送,多個(gè) URL 之間使用逗號(hào)分割
  • url - 對(duì)應(yīng)的是你的博客的 URL
  • title - 你的博客標(biāo)題
  • excerpt - 你的博客內(nèi)容(摘要)
  • blog_name - 你的博客的名稱(chēng)
  • charset - 你的博客所使用的字符編碼,如果忽略,默認(rèn)使用 UTF-8

注解

引用通告類(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)。

你的 Ping URL

為了接受引用通告,你必須在你的每篇博客旁邊顯示一個(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 。

新建 Trackback 表

在接受引用通告之前,你必須創(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();

說(shuō)明

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),我們建議你添加。

類(lèi)參考

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ù):

  • $tb_data (array) -- Trackback data

返回: 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ù):

  • $message (string) -- Error message

返回類(lèi)型: void

向引用通告請(qǐng)求返回一條錯(cuò)誤信息。

注解

該方法將會(huì)終止腳本的執(zhí)行。

send_success()

返回類(lèi)型: void

向引用通告請(qǐng)求返回一條成功信息。

注解

該方法將會(huì)終止腳本的執(zhí)行。

data($item)

參數(shù):

  • $item (string) -- Data key

返回: Data value or empty string if not found

返回類(lèi)型: string

從引用通告數(shù)據(jù)中獲取一項(xiàng)記錄。

process($url, $data)

參數(shù):

  • $url (string) -- Target url
  • $data (string) -- Raw POST data

返回: TRUE on success, FALSE on failure

返回類(lèi)型: bool

打開(kāi)一個(gè) socket 連接,并將數(shù)據(jù)傳送到服務(wù)器。成功返回 TRUE ,失敗返回 FALSE 。

extract_urls($urls)

參數(shù):

  • $urls (string) -- Comma-separated URL list

返回: Array of URLs

返回類(lèi)型: array

該方法用于發(fā)送多條引用通告,它接受一個(gè)包含多條 URL 的字符串 (以逗號(hào)或空格分割),將其轉(zhuǎn)換為一個(gè)數(shù)組。

validate_url(&$url)

參數(shù):

  • $url (string) -- Trackback URL

返回類(lèi)型: void

如果 URL 中沒(méi)有包括協(xié)議部分,該方法簡(jiǎn)單將 http:// 前綴添加到 URL 前面。

get_id($url)

參數(shù):

  • $url (string) -- Trackback URL

返回: URL ID or FALSE on failure

返回類(lèi)型: string

查找并返回一個(gè)引用通告 URL 的 ID ,失敗返回 FALSE 。

convert_xml($str)

參數(shù):

  • $str (string) -- Input string

返回: Converted string

返回類(lèi)型: string

將 XML 保留字符轉(zhuǎn)換為實(shí)體。

limit_characters($str[, $n = 500[, $end_char = '…']])

參數(shù):

  • $str (string) -- Input string
  • $n (int) -- Max characters number
  • $end_char (string) -- Character to put at end of string

返回: Shortened string

返回類(lèi)型: string

將字符串裁剪到指定字符個(gè)數(shù),會(huì)保持單詞的完整性。

convert_ascii($str)

參數(shù):

  • $str (string) -- Input string

返回: Converted string

返回類(lèi)型: string

將高位 ASCII 和 MS Word 特殊字符轉(zhuǎn)換為 HTML 實(shí)體。

set_error($msg)

參數(shù):

  • $msg (string) -- Error message

返回類(lèi)型: void

設(shè)置一個(gè)錯(cuò)誤信息。

display_errors([$open = ''[, $close = '']])

參數(shù):

  • $open (string) -- Open tag
  • $close (string) -- Close tag

返回: HTML formatted error messages

返回類(lèi)型: string

返回 HTML 格式的錯(cuò)誤信息,如果沒(méi)有錯(cuò)誤,返回空字符串。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)