Хук integrate_theme_context
Хук, появившийся в SMF 2.1. Помогает управлять переменными в начале загрузки страницы.
Расположение⚓︎
Как видим, хук не имеет параметров; в нем доступны для использования любые переменные, определённые до его вызова.
Назначение⚓︎
Это хук, который позволяет вам модифицировать глобальный массив $context непосредственно перед тем, как он будет передан в шаблон (theme) для отрисовки страницы.
Массив $context — это главный «транспорт» для передачи данных из PHP-логики в шаблоны (файлы .template.php) и в сами темы (файлы .php и .tpl в папке Themes). В нем содержится вся информация, необходимая для отображения страницы: от заголовка и содержимого сообщений до данных о пользователе и структуры меню.
Использование⚓︎
<?php
if (! defined('SMF'))
die('No direct access...');
class YourModName
{
// Подключаем используемые хуки
public function hooks(): void
{
add_integration_function('integrate_theme_context', self::class . '::themeContext#', false, __FILE__);
}
// Например, в Optimus через этот хук добавляются свои мета-теги
public function themeContext(): void
{
global $modSettings, $context;
if (! empty($modSettings['optimus_meta'])) {
$tags = unserialize($modSettings['optimus_meta']);
foreach ($tags as $name => $value) {
if (! empty($value)) {
$context['meta_tags'][] = ['name' => $name, 'content' => $value];
}
}
}
}
}
Особенности и лучшие практики⚓︎
Всё уже загружено: К моменту вызова этого хука загружено абсолютно всё: база данных, пользовательские данные, права доступа, языковые строки. Вы можете использовать любые функции SMF.
Не для логики: этот хук предназначен для подготовки данных к выводу, а не для выполнения основной бизнес-логики. Логика должна выполняться раньше, в хуках, специфичных для действий (например, integrate_actions).
Производительность: Не делайте в этом хуке тяжелых запросов к базе данных или сложных вычислений, так как он выполняется при каждой загрузке страницы. Кэшируйте результаты, если это необходимо.
Конфликты: Будьте осторожны с названиями ключей в массиве $context. Используйте уникальные префиксы для ваших модов (например, my_mod_some_value), чтобы избежать перезаписи ключей другими модами или самим SMF.
Хук вызывается после определения основных метаданных SMF ($context['page_title'], $context['meta_keywords'], $context['meta_tags']), поэтому его удобно использовать для дополнения или изменения этих переменных.