Получите помощь, поддержку и профессиональное общение в Клубе CodeIgniter

CodeIgniter User Guide Version 2.1.3


Класс трекбеков (Trackback Class)

Класс трекбеков предоставляет функции, которые позволяют вам отправлять и получать данные трекбеков.

Если вы не знакомы с трекбеками, вы можете найти больше информации о них здесь.

Инициализация класса

Как и большинство других классов CodeIgniter, класс трекбеков инициализируется в вашем контроллере, используя функцию $this->load->library:

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

Загруженный объект библиотеки трекбеков доступен как $this->trackback

Отправка трекбеков

Трекбеки могут быть отправлены из любого из ваших контроллеров, используя код, соответствующий этому примеру:

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

$tb_data = array(
                'ping_url'  => 'http://example.com/trackback/456',
                'url'       => 'http://www.my-example.com/blog/entry/123',
                'title'     => 'Заголовок моей записи',
                'excerpt'   => 'Содержимое записи',
                'blog_name' => 'Название моего блога',
                'charset'   => 'utf-8'
                );

if ( ! $this->trackback->send($tb_data))
{
     echo $this->trackback->display_errors();
}
else
{
     echo 'Trackback был отправлен!';
}

Описание данных массива:

Отправляющая трекбеки функция возвращает TRUE или FALSE в зависимости от успеха или неудачи. При неудаче вы можете получить сообщения об ошибках, используя:

$this->trackback->display_errors();

Получение трекбеков

Перед тем, как вы получаете трекбеки, вы должны создать блог. Если у вас нет блога, нет смысла продолжать чтение.

Получение трекбеков несколько сложнее, чем их отправка, так как вам нужна таблица БД для хранения элементов, и вы должны будете проверять входящие данные. Вы должны будете тщательно обеспечить фильтрацию данных для защиты от спама и дублирующихся данных. Также вы можете ограничить количество трекбеков, которые вы будете принимать от конкретного IP в течении определенного времени, для сокращения спама. Процесс получения трекбеков достаточно прост, так как валидация занимает большую часть усилий.

Ваш пингующий URL

Чтобы принимать трекбеки вы должны отображать URL трекбека следом за каждым вхождением. Это будет URL, который люби будут использовать для того, чтобы отправлять трекбеки (мы называем его «пингующим URLом»).

Ваш пингующий URL должен указывать на функцию контроллера, где находится принимающий трекбеки код, и URL должен содержать идентификатор для каждого вхождения, так что когда трекбек принят, вы сможете ассоциировать его с конкретной записью.

Например, если класс вашего контроллера называется Trackback, и принимающая функция receive, ваш пингующий URL будет выглядеть так:

http://example.com/index.php/trackback/receive/entry_id

Где entry_id отражает индивидуальный идентификатор для каждой записи.

Создание таблицы трекбеков

Перед тем, как принимать трекбеки, вы должны создать таблицу, в которой вы будете сохранять элементы. Вот основной прототип таблицы:

Спецификация класса трекбек требует отправки только четырех элементов информации в трекбеке (URL, title, excerpt, blog_name), но чтобы сделать эти данные более полезными, мы добавили еще несколько полей в схему таблицы, указанной выше (дату, IP-адрес).

Обработка трекбека

Вот пример, показывающий вам как принимать и обрабатывать трекбеки. Следующий код предназначен для использования в функции контроллера, которая должна принимать трекбеки.

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

if ($this->uri->segment(3) == FALSE)
{
    $this->trackback->send_error("Невозможно определить идентификатор записи");
}

if ( ! $this->trackback->receive())
{
    $this->trackback->send_error("Trackback не содержит валидных данных");
}

$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();

Примечания:

Идентификатор записи ожидается в третьем сегменте вашего URL. Он основывается на примере URI, который мы давали ранее:

http://example.com/index.php/trackback/receive/entry_id

Обратите внимание, что entry_id находится в третьем сегменте URI, который вы можете получить так:

$this->uri->segment(3);

В нашем примере кода, принимающем трекбеки, если третий сегмент отсутствует, мы обрабатываем ошибку. Без корректного идентификатора записи нет смысла продолжать.

Функция $this->trackback->receive() это просто проверяющая функция, которая ищет входящие данные, и проверяет наличие четырех требуемых элементов данных (url, title, excerpt, blog_name). Она возвращает TRUE при успехе и FALSE при неудаче. При неудаче вы можете обрабатывать сообщение об ошибке.

Входящие данные трекбеков могут быть получены посредством этой функции:

$this->trackback->data('item')

Где item представляет один из четырех элементов информации: url, title, excerpt или blog_name

Если данные трекбека успешно приняты, вы получите сообщение об успехе, используя

$this->trackback->send_success();

Примечание: Код выше не содержит проверки данных, которую вы должны будете запрограммировать.

Поделиться


Переведено в компании Аринт.

Спасибо!

Вы тоже можете оказать помощь проекту! Как это сделать?

Помощь и поддержка

Вы можете задать вопросы и получить ответы и советы от гуру CodeIgniter и веб-разработки: вступайте в Клуб CodeIgniter

Яндекс.Метрика