Хук integrate_actions

С помощью этого хука легко создать собственную область — страницу или действие.

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

index.php (в корне форума)

call_integration_hook('integrate_actions', array(&$actionArray));

Хук принимает как параметр массив, в котором содержится список действий, доступных переменной $_REQUEST['action']. Например, запись $actionArray['calendar'] = array('Calendar.php', 'CalendarMain') означает, что при обработке действия calendar происходит вызов функции CalendarMain из файла Calendar.php.

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

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

Как уже упоминалось в других статьях, используемые хуки подключаются с помощью 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_actions' => 'my_actions',
    'integrate_menu_buttons' => 'my_menu_buttons'
);

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

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

В примере выше происходит:

  • добавление хука integrate_pre_include, который подключает файл /Sources/MyApplication.php на каждой странице форума,
  • добавление хука integrate_actions, с вызовом функции my_actions из файла /Sources/MyApplication.php,
  • добавление хука integrate_menu_buttons, с вызовом функции my_menu_buttons из файла /Sources/MyApplication.php.

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

add_integration_function('integrate_actions', 'my_actions', false);

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

<?php

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

function my_actions(&$actions)
{
    // Добавляем действие my_page для обработки адреса /index.php?action=my_page
    $actions['my_page] = array('MyApplication.php', 'my_page_action')
}

function my_menu_buttons(&$buttons)
{
    // Добавляем пункт «Моя страница» в главное меню
    $buttons['my_page'] = array(
        'title' => 'Моя страница',
        'href' => $scripturl . '?action=my_page',
        'show' => true
    );
}

// Эта функция вызывается при переходе по адресу /index.php?action=my_page
function my_page_action()
{
    // Здесь можно подключить свой шаблон и выполнить любые другие действия
    print_r('Моя страница');
}

Хук пригодится как для добавления новых страниц и действий, так и для изменения уже созданных.

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