03:59 Как написать модуль для DLE 7.5 с админпанелью? | ||
Данный урок поможет новичкам понять принцип построения модулей для DLE. Не судите строго, статья моя первая, прогер я (всм по похапе) начинающий, статья актуальна для пользователей DLE 7.5 (и вероятно 7.2 - точно не знаю). И так - вступление. Недавно отрыл в паблике подобный урок, но судя по всему он был расчитан на DLE младше версии 7.2 - ибо админпанель отказалась работать вобще. Поковыряв код сам я решил обратиться за помощью на канал #php в наш любимый IRC, вот только любителей даталафа там не отыскалось и я отправился ковырять дальше сам. Всё, что я наковырял - 100% рабочее! В этом уроке я попутно к коду буду писать подробные коменты (в меру своих познаний). Приступаем! Для начала на надо определить, что же будет делать наш модуль (вобще - за основу можно взять любой php скрипт, подправить его под DLE и всё будет ок), а пока задумка такая: Наш модуль будет выводить 5 строк, значения которых будут задаваться в админпанели, например: строка 1 - Это типа мой модуль строка 2 - v.1.0 строка 3 - Мой самый первый модуль для LDE 7.5 строка 4 - Он совсем простой строка 5 - но потом будет сложнее! Как сказано выше - любую из строк можно изменить в админпанели. И так создаём основу нашему модулю создаём файл mymodule.php в папке engine/modules В него пишем: // Защита от взлома if (!defined("DATALIFEENGINE")) { die("Hacking Attemp!"); } // Защита от взлома // подгружаем файл с настройками модуля, в нём будут храниться те самые 5 строк require_once (ROOT_DIR.'/engine/data/config.mymodule.php'); //подгрузили файл с настройками модуля //Создаём переменную с НЕИЗМЕНЯЕМЫМ значением $myword = 'Тестовый модуль'; //создали // подгружаем оболочку к нашему модулю - это есть часть темы DLE $tpl->load_template('mymodule.tpl'); // подставляем в оболочке за место всех mymmodyle и т.д. значения наших переменных $tpl->set('{mymodule}', $myword); $tpl->set('{mymone}', $wordone = $mymodconf['word_one']); $tpl->set('{mymtwo}', $mymodconf['word_two']); $tpl->set('{mymfree}', $mymodconf['word_free']); $tpl->set('{version}', $mymodconf['version']); $tpl->set('{detail}', $mymodconf['detail']); // заменили все {blabla} на значения переменных // хз $tpl->compile('content'); $tpl->clear(); // хз ?> Можно сказать, что основная састь самого модуля готова, перейдём к созданию раздела для нашего модуля в админке Лезем в engine/inc и создаём два файла - mymodule.functions.php и mymod_adm.php В файл mymod_adm.php мы запишем скрипт, который будет брать значения, которые мы пропишем в админ панели для нашего модуля и записывать их в конфиг модуля, файл mymodule.functions.php содержит в себе HTML код для нашего раздела в админпанели, по идее - этот HTML можно было сразу вписать в mymod_adm.php - но тогда код выглядел бы совсем не понятно. И так, в mymod_adm.php пишем: // Подгружаем файл оформления для админпанели require_once (ENGINE_DIR.'/inc/mymodule.functions.php'); // Подгружаем наш конфиг require_once (ENGINE_DIR.'/data/config.mymodule.php'); // Сохранение настроек модуля // Если $action = "dosave" тогда выполняем следующие действия if ($action == "dosave") { // Проверяем - является ли пользователь меняющий настройки админом // т.е. относится ли он к группе 1, если != 1 - т.е. не относится, тогда выводим // сообщение о том, что у него нет доступа if ( $member_id['user_group'] != 1 ) { msg ("error", $lang['opt_denied'], $lang['opt_denied']); } // вывели сообщение // заменяем все окончания строк (символы новой строки и т.д.) $find[] = "'r'"; // на пустоту $replace[] = ""; $find[] = "'n'"; $replace[] = ""; // заменили - теперь у нас все значения однострочные // создаём переменную $handler которая по суте есть наш конфиг, и теперь мы можем // записать в эту переменную нужные нам значения (открыть файл на запись) $handler = @fopen(ENGINE_DIR.'/data/config.mymodule.php', "wb"); // собственно записываем // при записи ковычки надо коментировать обратным слешем // символ обр.слеша n - означает переход на следующую строку fwrite ($handler, " nn$mymodconf = array( nn'version' => "v.1.0",nn"); // подставляем поочерёдно все значения из $save_con к переменным $name => $value foreach ($save_con as $name => $value) { $value = trim(stripslashes ($value)); $value = htmlspecialchars ($value, ENT_QUOTES); $value = preg_replace($find, $replace, $value); // записываем значения fwrite($handler, "'{$name}' => "{$value}",nn"); } // записали - закрываем файл конфига fwrite($handler, ");nn?>"); fclose($handler); // сообщаем о том, что настройки сохранены msg ("info", "Строка изменена", "{$lang['opt_sysok_1']} {$lang['db_prev']}"); } echoheader("Test", "Админпанель модуля test"); /** * Вывод блока настроек * Тут немного хтмл кода, в общем здесь то и есть грань, между граф. интерфейсом * и кодом, тут мы к примеру вводим "куку" и наша переменная принимет * значение "куку" */ open(); tableheader('Настройка модуля'); echo<< |
[img]engine/skins/images/tl_lo.gif[/img] | [img]engine/skins/images/tl_oo.gif[/img] | [img]engine/skins/images/tl_ro.gif[/img] |
[img]engine/skins/images/tl_lb.gif[/img] | HTML; } function close() { echo << | [img]engine/skins/images/tl_rb.gif[/img] |
[img]engine/skins/images/tl_lu.gif[/img] | [img]engine/skins/images/tl_ub.gif[/img] | [img]engine/skins/images/tl_ru.gif[/img] |
HTML;
}
function tableheader($value) {
echo <<
|
HTML;
}
?>
Вот в принципе и всё! Наш модуль готов и дело осталось за малым - просто подключить!
Извените за то, что к html коду мало коментариев - я в нём как свиня во француских дикалонах

И так о подключении: Открывем файл admin.php
ищем
'googlemap' => 'admin' );
над ни пишем
// Мой модуль
'mymod_adm' => 'admin',
Этот длинный список - есть перечень файлов админок модулей, например в данный момент, мы указали, что к файлу mymod_adm.php имеет доступ только админ .
Далее лезим в engine/engine.php
Ищем
case "comments" :
include ENGINE_DIR . '/modules/comments.php';
break;
Ниже пишем
// Мой модуль
case "mymod" :
include ENGINE_DIR.'/modules/mymodule.php';
break;
Это мы донесли, что если кто то перейдёт по ссылке index.php?do=mymod - то откроется наш моудль, в общем говоря - сделали модуль доступным
Теперь ползём в engine/inc/options.php
Ищем
'name' => $lang['opt_google'],
'url' => "$PHP_SELF?mod=googlemap",
'descr' => $lang['opt_googlec'],
'image' => "googlemap.png",
'access' => "1"
)
над ним пишем
array(
'name' => "мой модуль",
'url' => "$PHP_SELF?mod=mymod_adm",
'descr' => "типа мой первый мод",
'image' => "my.png",
'access' => "1",
),
Это мы собственно создали раздел в админке, тут:
array(
'name' => "мой модуль", <--- Название
'url' => "$PHP_SELF?mod=mymod_adm", <--- Ссылка на файл админки
'descr' => "типа мой первый мод", <--- Краткое описание
'image' => "my.png", <--- Иконка
'access' => "1", <--- Доступ - 1 = админ
),
Ближе к завершению - адаптировать ваш модуль, к вашему шаблону. т.е. показать всё так, как надо и там где надо, лезем в templates/ваша_тема/ и создаём файл mymodule.tpl, в него запишем:
{mymone} - {version}
{mymtwo}
А да, и ещё - {mymfree}.... {detail}Тут {version}, {mymfree} и т.д. - это наши переменные со своими значениями, теми, что мы прописали в админпанели, вы можите их использовать как вам только захочется!
Последний шаг - engine/data создайте файл config.mymodule.php, в него ничего не пишите, просто установите CHMOD 644 (права на доступ к файлу), обычно конфиг для модулей создаётся специальным файлом install.php, и от всяких муторных "залезте туда, надите то, выше напишите это", можно избавиться с помощью специального хака который выкладывал Hamer - _http://4dle.com.ua/2008/01/11/klass_zameny_fajjlov_dlja_intsall.html , но это уже отдельная тема...
ВОТ И ВСЁ! Теперь вы можете залезть в админ панель, "настроить" ваш модуль и перейдя по ссылке www.vash-sait.com/index.php?do=mymod увидить плоды своего старания!
У меня на написания данного подобия модуля ушло ровно 15 мин.

Всего комментариев: 1 | ||
| ||