Хук integrate_current_action

Хук для подсвечивания нужного пункта в главном меню форума.

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

Subs.php

call_integration_hook('integrate_current_action', array(&$current_action));

Этот хук появился в SMF 2.1 и работает совместно с хуком integrate_menu_buttons, если для какой-нибудь кнопки указан атрибут action_hook.

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

Как подключить

Например, ваша модификация добавляет на форум область Задачи (action=tasks), но без кнопки в главном меню. При этом вы хотите, чтобы когда пользователь находился на странице задач, в меню подсвечивался пункт Начало. Реализуем это:

<?php

if (!defined('SMF'))
    die('No direct access...');

class YourModName
{
    // В этой функции подключаем используемые хуки
    public function hooks()
    {
        add_integration_function('integrate_menu_buttons', __CLASS__ . '::menuButtons#', false, __FILE__);
        add_integration_function('integrate_current_action', __CLASS__ . '::currentAction#', false, __FILE__);
    }

    // Определяем подключение хука integrate_current_action для пункта «Начало» в меню
    public function menuButtons(&$buttons)
    {
        if (!empty($buttons['home']))
            $buttons['home']['action_hook'] = true;
    }

    // А здесь получаем подсвечиваемый пункт меню, при заходе на страницу «Задачи»
    public function currentAction(&$current_action)
    {
        global $context;

        if ($context['current_action'] == 'tasks')
            $current_action = 'home';
    }
}

Как видите, то, что раньше можно было сделать только правкой исходных файлов движка, в SMF 2.1 уже настраивается через хуки. Пример работы данного хука можно увидеть в моде Optimus, при посещении страницы ключевых слов — в меню будет подсвечиваться пункт «Начало» (или «Форум», если установлен мод портала).