Главная > Уроки Dle > Как написать модуль для DLE 8 с админкой
Как написать модуль для DLE 8 с админкой26-05-2011, 20:32. Разместил: Сергей |
Для вашего удобства, я буду отмечать цветом некоторые лова в тексте. Зеленым цветом я отмечаю описания тех действий, которые не могут глобально что-то испортить в движке, а красным - те, которые могут. И синим цветом я буду отмечать имя модуля. Если вы занимаетесь дизайном и такое количество цветов оскорбляет ваш вкус, понимание юзабельного текста и т.д. - простите меня, я всего лишь хотел сделать так, чтобы было проще видеть, что и где меняется в коде. Я постараюсь максимально подробно комментировать код там, где это нужно, и где мне хватит знаний, чтобы хоть что-то полезное сказать. Что нам надо сделать, чтобы получить работающий модуль для 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, а конкретно - некоторые вещи, касающиеся встроенных функций движка, шаблонов и хранения настроек. Вернуться назад |