Информация к новости
  • Просмотров: 5317
  • Автор: Алексей
  • Дата: 26-05-2011, 20:32
26-05-2011, 20:32

Как написать модуль для DLE 8 с админкой

Категория: Уроки Dle


Для вашего удобства, я буду отмечать цветом некоторые лова в тексте. Зеленым цветом я отмечаю описания тех действий, которые не могут глобально что-то испортить в движке, а красным - те, которые могут. И синим цветом я буду отмечать имя модуля. Если вы занимаетесь дизайном и такое количество цветов оскорбляет ваш вкус, понимание юзабельного текста и т.д. - простите меня, я всего лишь хотел сделать так, чтобы было проще видеть, что и где меняется в коде.
Я постараюсь максимально подробно комментировать код там, где это нужно, и где мне хватит знаний, чтобы хоть что-то полезное сказать.

Что нам надо сделать, чтобы получить работающий модуль для DLE? В этой статье будет рассмотрен случай, когда требуется, чтобы модуль имел четко заданный адрес на сайте, который можно было бы открыть, и что-то там увидеть. (Допустим, что его предназначение и функционал нам сейчас не интересны, а нужно лишь предоставить возможность редактировать какие-нибудь его настройки в админпанели, и чтобы этот модуль мог вызываться на самом сайте обычными пользователями.)

1. Придумать имена файлам модуля.
Я придумал имя:
"my-module"и его буду использовать всюду в пределах этой статьи.

2. Отредактировать файлы:
/admin.php
/engine/engine.php
/engine/inc/options.php
3. Создать файлы:
/engine/modules/my-module.php
/engine/inc/my-module.php
А теперь, начнем углубляться!


2. Редактирование системных файлов движка.
Для начала, сделаем так, чтобы модуль имел свой адрес. То есть, чтобы по адресу http://mysite.com/index.php?do=my-module открывалась страничка, на которой бы выводилась информация из нашего модуля.
Для этого, откроем файл
/engine/engine.php
Если присмотреться, то можно там увидеть приблизительно такие повторяющиеся блоки:
case "comments" :
include ENGINE_DIR . '/modules/comments.php';
break;

case "stats" :
include ENGINE_DIR . '/modules/stats.php';
break;

case "addnews" :
include ENGINE_DIR . '/modules/addnews.php';
break;
Эти блоки кода описывают реакцию движка на разные параметры, указанные в адресной строке после index.php?do=, а точнее - какой модуль подгружать.

Вставляем под любым словом "break;" следующий код:
case "my-module" :
include_once ENGINE_DIR . '/modules/my-module.php';
break;

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

Открываем файл
/admin.php
Там мы видим приблиительно такое:
$system_modules = array('addnews',
'editnews',
'comments',
'main',
'options',
'files',
'editusers',
'preview',
В этом куске кода перечисляется, какие модули подключаются в админке. Нам надо дописать туда и наш модуль.

Вставляем под именем одного из модулей, указанных в этом куске кода вызов нашего модуля:
'my-module',

Теперь нам надо, чтобы из админки можно было попасть на страницу настройки модуля. Для этого нам надо будет определиться, где мы хотим видеть иконку и ссылку для доступа к странице настройки нашего модуля. На странице, где перечислены все модули, они отгруппированы по категориям:
"Настройки скрипта",
"Управление пользователями",
"Управление шаблонами",
"Утилиты",
"Другие разделы"


Открываем файл
/engine/inc/options.php
Там мы видим приблизительно следующее (там где стоят троеточия, я пропустил похожие блоки кода):
$options['config'] = array (

array (
'name' => $lang['opt_all'],
'url' => "$PHP_SELF?mod=options&action=syscon",
'descr' => $lang['opt_allc'],
'image' => "tools.png",
'access' => "admin"
),


...


array (
'name' => $lang['opt_group'],
'url' => "$PHP_SELF?mod=usergroup",
'descr' => $lang['opt_groupc'],
'image' => "usersgroup.png",
'access' => "admin"
)
);
$options['user'] = array (

array (
'name' => $lang['opt_priv'],
'url' => "$PHP_SELF?mod=options&action=personal",
'descr' => $lang['opt_privc'],
'image' => "pset.png",
'access' => "all"
),


...


array (
'name' => $lang['opt_group'],
'url' => "$PHP_SELF?mod=usergroup",
'descr' => $lang['opt_groupc'],
'image' => "usersgroup.png",
'access' => "admin"
)
);
$options['templates'] = array (

array (
'name' => $lang['opt_t'],
'url' => "$PHP_SELF?mod=templates&user_hash=" . $dle_login_hash,
'descr' => $lang['opt_tc'],
'image' => "tmpl.png",
'access' => "admin"
),

array (
'name' => $lang['opt_email'],
'url' => "$PHP_SELF?mod=email",
'descr' => $lang['opt_emailc'],
'image' => "mset.png",
'access' => "admin"
)
);



$options['filter'] = array (

array (
'name' => $lang['opt_fil'],
'url' => "$PHP_SELF?mod=wordfilter",
'descr' => $lang['opt_filc'],
'image' => "fset.png",
'access' => $user_group[$member_id['user_group']]['admin_wordfilter']
),


...


array (
'name' => $lang['opt_sfind'],
'url' => "$PHP_SELF?mod=search",
'descr' => $lang['opt_sfindc'],
'image' => "find_base.png",
'access' => "admin"
)
);



$options['others'] = array (
array (
'name' => $lang['opt_rss'],
'url' => "$PHP_SELF?mod=rss",
'descr' => $lang['opt_rssc'],
'image' => "rss.gif",
'access' => $user_group[$member_id['user_group']]['admin_rss']
),


...


array (
'name' => $lang['opt_google'],
'url' => "$PHP_SELF?mod=googlemap",
'descr' => $lang['opt_googlec'],
'image' => "googlemap.png",
'access' => $user_group[$member_id['user_group']]['admin_googlemap']
)
);
Можно увидеть соответствие между переменными(массивами переменных, если быть точным)
$options['config']
$options['user']
$options['templates']
$options['filter']
$options['others']
И группами настроек в админпанели:
"Настройки скрипта",
"Управление пользователями",
"Управление шаблонами",
"Утилиты",
"Другие разделы"


Тут полностью ваш выбор, в какой группе настроек будет отображаться ссылка на настройки вашего модуля.

Рассмотрим, что именно надо вписать в коде, чтобы ссылка на настройки появилась в админке:
array (
'name' => "Мой модуль",
'url' => "$PHP_SELF?mod=my-module", 'descr' => "Мой первый модуль для DataLife Engine",
'image' => "my-module.png",
'access' => "admin"
)Берем, и смело вписываем это в том месте, где мы хотим видеть ссылку на настройки нашего модуля для DLE.

'name' - указывает название модуля - может быть любым текстом разумного размера.
'url' - адрес, по которому доступна страница настроек модуля, в этом адресе могут передаваться параметры кроме имени модуля (это хорошо видно в адресе страницы настроек движка - mod=options&action=syscon). Значение параметра mod= должно соответствовать тому, что мы указывали в файле /admin.php. В нашем случае, это был my-module.
'descr' - описание модуля, может быть любой текст.
'image' - имя файла картинки, которая будет показана рядом с описанием модуля. Если захотите использовать свою картинку, ее надо положить в папку
/engine/skins/images/
'access' - указывает, кто имеет доступ к редактированию этих настроек в админке. Самый простой вариант - указать там "admin" - тогда настройки модуля будут доступны только администраторам. Если хотите, чтобы это был кто-то другой, то прийдется задействовать вместо прямого указания группы описание одного из свойст вгруппы, а точнее - разрешения на редактирование определенных настроек. Для этого вместо "admin" надо будет написать
$user_group[$member_id['user_group']]['ZZZ'], где вместо ZZZ будет один из следующих возможных параметров (их можно посмотреть в таблице _usergroups в базе данных вашего сайта):
admin_addnews
admin_editnews
admin_comments
admin_categories
admin_editusers
admin_wordfilter
admin_xfields
admin_userfields
admin_static
admin_editvote
admin_newsletter
admin_blockip
admin_banners
admin_rss
admin_iptools
admin_rssinform
admin_googlemap

На этом первая часть инструкции по написанию модуля окончена. Во второй части я планирую рассказать, что надо помнить, разрабатывая модуль для DLE, а конкретно - некоторые вещи, касающиеся встроенных функций движка, шаблонов и хранения настроек.
Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.
<

daramal.ru

2 июня 2011 12:24

Информация к комментарию
  • Группа: Гости
  • ICQ:
  • Регистрация: --
  • Статус:
  • Публикаций: 0
  • Комментариев: 0
Спасибо! Ждем продолжение!
<

Erypemerder

17 января 2012 23:45

Информация к комментарию
  • Группа: Гости
  • ICQ:
  • Регистрация: --
  • Статус:
  • Публикаций: 0
  • Комментариев: 0
Змея, которая меня не жалит, пусть хоть тысячу лет живет.
^