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

# CodeIgniter User Guide Version 2.1.3

Search User Guide

# Класс трекбеков (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 был отправлен!';
}`

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

- ping_url - URL сайта, куда вы отправляете трекбек. Вы можете отправить трекбеки на несколько URLов, разделяя их запятой.
- url - URL к вашему сайту, где можно увидеть записи блога.
- title - Название вашего блога.
- excerpt - Содержимое записи вашего блога. Примечание: класс трекбеков автоматичеки отправляет только первые 500 символов вашей записи. Он также обрезает весь HTML.
- blog_name - Имя вашего блога.
- charset - Кодировка символов вашего блога. Если опущено, используется UTF-8.

Отправляющая трекбеки функция возвращает 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` отражает индивидуальный идентификатор для каждой записи.

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

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

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(16) NOT NULL, PRIMARY KEY `tb_id` (`tb_id`), KEY `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