С помощью этого хука можно изменить или дополнить выборку при получении данных о просматриваемой теме форума.
Расположение
Display.php
call_integration_hook('integrate_display_topic', array(&$topic_selects, &$topic_tables, &$topic_parameters));
Хук принимает в качестве параметров массивы $topic_selects, $topic_tables и $topic_parameters. С помощью них можно получать дополнительные столбцы $topic_selects из таблиц smf_topics, smf_messages, smf_members, а также из других, перечисленных в переменной $topic_tables. Переменная $topic_parameters используется для указания дополнительных параметров запроса.
Использование
Рассмотрим пример:
<?php
if (!defined('SMF'))
die('No direct access...');
class YourModName
{
// В этой функции подключаем используемые хуки
public function hooks()
{
add_integration_function('integrate_display_topic', __CLASS__ . '::displayTopic#', false, __FILE__);
}
// Получаем дополнительные сведения при просмотре темы
public function displayTopic(&$topic_selects, &$topic_tables, &$topic_parameters)
{
// Запрашиваемый столбец
$topic_selects[] = 'your_column_name';
// Запрашиваемая таблица, связанная с smf_tables
$topic_tables[] = 'LEFT JOIN {db_prefix}your_table AS yt ON (yt.id_topic = t.id_topic AND yt.other_column_name = {string:your_parameter})';
// Требуемое значение параметра (если нужно)
$topic_parameters['your_parameter'] = 'your_value';
}
// Далее в коде (на странице текущей темы) можно будет обращаться к полученному столбцу через $context['topicinfo']['your_column_name']
}
Благодаря этому хуку, например, Optimus при просмотре темы в одном запросе получает сведения об описании, ключевых словах, а также о первом вложении.