Добавление своих возможностей в админ.панель SMF

Автор devICE, 10 января 2007, 23:40:53

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

devICE

Пришлось мне конечно со всем этим помучаться, но зато разобрался :)
Итак, приступим.

Зайдите в папку Sources и откройте файл Subs.php, туда мы сейчас будем добавлять свой блок. Находим строку:

function adminIndex($area)

у меня она была под номером 2704. Проходим немножко по коду и видим что блоки начинаются со строк:

if (allowedTo(array(некоторый_набор_переменных)))

После нужного блока можем вставлять свой.

if (allowedTo(array('ActionName')))
{
$context['admin_areas']['site_admin'] = array(
'title' => $txt['BlockName'],
'areas' => array()
);
if (allowedTo('ActionName'))
$context['admin_areas']['site_admin']['areas']['ActionName'] = '<a href="' . $scripturl . '?action=LinkName">'.$txt['ViewLinkName'].'</a>';
}


Разберёмся в переменных:
ActionName - уникальная переменная, по ней будет форум будет узнавать нужное действие. Должна быть написана СТРОЧНЫМИ (маленькими) буквами.
BlockName - имя блока (само значение переменной у меня находиться в языковом файле.
LinkName - строка, которая будет помещаться в урл, тоже уникальна, а также возможно (но не желательно) её совпадение с ActionName. Должна быть написана СТРОЧНЫМИ (маленькими) буквами.
ViewLinkName - Имя ссылки, которая будет отображаться.

Запоминаем ActionName и LinkName и можем сохранять изменения. Следующим шагом открываем файл index.php, который находиться в корневой папке форума и ищем следующую строку:

$actionArray = array(

после этой строки видим массив переменных, благодаря которым выполняются нужные действия. Вставляем следующую строку:

'LinkName' => array('MyScriptFile.php', 'FuncName'),

LinkName - уже знаем что такое.
MyScriptFile.php - сам файл скрипта, который мы положим в папку Sources.
FuncName - имя функции в файле, который мы только что указали.

Сохраняем изменения и закрываем. Следующим шагом создаём файл MyScriptFile.php в папке Sources и пишем там следующий код.

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

// The controller; doesn't do anything, just delegates.
function FuncName()
{
global $context, $scripturl, $txt;

isAllowedTo(array('ActionName'));

adminIndex('ActionName');

$context['page_title'] = $txt['PageTitle'];

LoadTemplate('MyTemplateFile');

$context['admin_tabs'] = array(
'title' => $txt['ViewLinkName'],
'description' => $txt['LinkDescription'],
'tabs' => array(),
);

if (allowedTo('ActionName'))
{
$context['admin_tabs']['tabs'][] = array(
'title' => $txt['TabName'],
'description' => $txt['TabDescription'],
'href' => $scripturl . '?action=LinkName',
'is_selected' => 'LinkName',
);
}
}

?>


Начинаем разбираться:
ActionName - уже познакомились.
PageTitle - Заголовок страницы.
MyTemplateFile - Файл шаблона, обычно называется как и файл скрипта, например MyScriptFile.Template.php (Указывается только имя файла ДО .Template.php).
ViewLinkName - имя ссылки, о ней мы уже говорили, но на сей раз она будет заголовком таблицы.
LinkDescription - подпись, то что отобразиться под заголовком таблицы.
TabName - имя таба.
TabDescription - и его подпись соответственно.
LinkName - описывалось выше.
После всего этого пишем уже сам исполняемый код.

Закрываем и сохраняем. Создаём в папке темы файл MyScriptFile.Template.php и пишем в нём следующее:

<?php

function template_main()
{
global $context$scripturl$txt;

echo '
        '
;
}

?>


В эхе пишем весь HTML код шаблона. Ну и последнее изменение. Открываем файл index.template.php, который лежит в корне папки с темой и находим там строку:

if (in_array($context['current_action'], array('admin', 'ban', 'boardrecount', 'cleanperms', 'detailedversion', 'dumpdb', 'featuresettings', 'featuresettings2', 'findmember', 'maintain', 'manageattachments', 'manageboards', 'managecalendar', 'managesearch', 'membergroups', 'modlog', 'news', 'optimizetables', 'packageget', 'packages', 'permissions', 'pgdownload', 'postsettings', 'regcenter', 'repairboards', 'reports', 'serversettings', 'serversettings2', 'smileys', 'viewErrorLog', 'viewmembers')))

и после всех переменных указанных в скобках пишем наш LinkName.

Вот собственно и всё, если что-то не понятно, то задавайте вопросы в личку или в асю.

P.S.: Здесь описан пример добавления только одного пункта, добавление в пункт подпунктов (табов) чуть сложнее делается.
Проблемы только в голове.

shmaltorhbooks

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