CodeIgniter User Guide Version 2.0.0


Класс Trackback

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

Если вы не знакомы с трекбеками, можете найти информацию по этому вопросу тут.

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

Как и большинство других классов CodeIgniter, класс Trackback инициализируется в вашем контроллере посредством функции $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'     => '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!';
}

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

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

$this->trackback->display_errors();

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

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

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

Ваш пинг URL

Для того, чтобы принимать трекбеки, вы должны указывать URL трекбека в каждой теме блога. Это будет URL, который люди будут использовать, чтобы присылать вам трекбеки (мы называем это вашим "Пинг URL").

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

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

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

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

Создание таблицы базы данных

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

Спецификация трекбеков требует четыре элемента информации (url, title, excerpt, blog_name), но для того, чтобы сделать данные более полезными, мы добавили несколько больше (date, IP address и т.д.).

Обслуживание трекбека

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

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

Примечания:

Ожидается присутствие идентификатора записи в третьем сегменте 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();

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