Хук integrate_load_theme

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

Расположение

Load.php

    call_integration_hook('integrate_load_theme');

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

Использование

Подключение хука через базу данных:

Хуки легко подключаются с помощью PHP-файла (например, hooks.php), вызываемого при установке/удалении вашего приложения:

<?php

if (file_exists(dirname(__FILE__) . '/SSI.php') && !defined('SMF'))
    require_once(dirname(__FILE__) . '/SSI.php');
elseif (!defined('SMF'))
    exit('<b>Error:</b> Cannot install - please verify you put this in the same place as SMF\'s index.php.');

$hooks = array(
    'integrate_pre_include' => '$sourcedir/MyApplication.php',
    'integrate_load_theme'  => 'example'
);

if (!empty($context['uninstalling']))
    $call = 'remove_integration_function';
else
    $call = 'add_integration_function';

foreach ($hooks as $hook => $function)
    $call($hook, $function);

В примере выше происходит добавление хука integrate_pre_include, подключающего нужный вам файл на любой странице SMF, и хука integrate_load_theme, вызывающего функцию example, находящуюся в вашем файле /Sources/MyApplication.php. $sourcedir — глобальная переменная, содержащая полный путь к директории /Sources форума. Вместо $sourcedir можно использовать переменную $boarddir, содержащую путь к корню форума. Информация об указанных хуках добавляется в базу данных (таблица smf_settings).

Подключение хука путем вызова в PHP-файле:

add_integration_function('integrate_load_theme', 'example', false);

Пример функции example (файл MyApplication.php)

<?php

if (!defined('SMF'))
    die('Hacking attempt...');

function example()
{
    global $context, $settings;

    // Подключение языкового файла /Themes/default/languages/MyApplication.{язык пользователя}.php
    loadLanguage('MyApplication');

    // Подключение языкового файла /Themes/default/languages/MyApplication/.{язык пользователя}.php
    loadLanguage('MyApplication/');

    // Подключение произвольного CSS-файла в шапке страницы
    $context['html_headers'] .= '
    <link rel="stylesheet" type="text/css" href="' . $settings['default_theme_url'] . '/css/style.css" />';

    // Подключение произвольного JS-файла в подвале страницы
    $context['insert_after_template'] .= '
    <script src="//code.jquery.com/jquery.min.js" type="text/javascript"></script>';

    // Вызов произвольной функции
    other_function();

    // И другие нужные вам действия
}

В SMF 2.1 для подключения внешних CSS и JS файлов добавлены функции loadCSSFile и loadJavaScriptFile. Также добавлены функции для подключения внутренних стилей и скриптов: addInlineCss и addInlineJavaScript. Примеры их использования — в отдельной статье.

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

Поделиться
Отправить
Класснуть
Вотсапнуть