Главная » DLE » Статьи DLE » Учимся писать модули с админпанелью на DLE
Распечатать статью

Учимся писать модули с админпанелью на DLE

1. Создаём файл test.php в директории engine/modules/test.php
2. Создаём файл config.test.php в директории engine/data/config.test.php
3. Создаём файл test.tpl кидаем в ту тему которая у вас по умолчанию

Открываем engine/modules/test.php Внего вставим:

<!—code1—>

<!—ecode1—>
<?php
<strong>require_once</strong>(ENGINE_DIR.’/data/config.test.php’);
$txt        = $config_test['text'];
$txt_detail = $config_test['detail'];
$version    = $config_test['version'];

/* Подгружаем шаблон */
$tpl->load_template(‘test.tpl’);
$tpl->set(‘{txt}’,        $txt);
$tpl->set(‘{detail_txt}’, $txt_detail);
$tpl->set(‘{version}’,    $version);
$tpl->compile(‘content’);
$tpl->clear();
?><!—code2—>

<!—ecode2—>

Как видим, в данном модуле все переменные берутся из файла engine/data/config.test.php, и далее уже по известному сценарию мы подгружаем шаблон и производим замену переменных на их значения. В нашем случае будет производится три замены.
Файл engine/data/config.test.php на самом начальном этапе необходимо создать. Его содержимое может быть пустым и в дальнейшем при управление модулем через админпанель код файла engine/data/config.test.php будет генерироваться автоматически.

Теперь откроем шаблон test.tpl и вставим в него:

<!—code1—>

<!—ecode1—>
<html>
<body>
{txt} — <i>{detail_txt}</i>
<p>Версия модуля: {version}</p>
</body>
</html>
<!—code2—>

<!—ecode2—>

На этом можно считать, что фундамент построен и можно двигаться дальше. Займёмся созданием панели администрирования. Для этого откроем файл engine/inc/options.php и увидим в нём двумерный массив $options. Этот массив отвечает за формирования разделов в админпанели движка.

<!—code1—>

<!—ecode1—>

$options['config'] – отвечает за разделы в блоке «Настройки скрипта»
$options['user'] – отвечает за разделы в блоке «Управление пользователями»
$options['templates'] – отвечает за разделы в блоке «Управление шаблонами»
$options['filter']  – отвечает за разделы в блоке «Управление фильтрами»
$options['others'] – отвечает за разделы в блоке «Другие разделы»

<!—code2—>

<!—ecode2—>
Я предпочитаю размещать все сторонние модули в массиве

<!—code1—>

<!—ecode1—>$options['others']<!—code2—>

<!—ecode2—>
Не отступлю я от своих принципов и сегодня. Как можно видеть в массиве

<!—code1—>

<!—ecode1—>$options['others']<!—code2—>

уже есть некоторые разделы:

<!—code1—>

<!—ecode1—>

array(
‘name’       => $lang['opt_static'],
‘url’          => «$PHP_SELF?mod=static»,
‘descr’      => $lang['opt_staticd'],
‘image’         => «spset.png»,
‘access’     => «1″,
),

array(
‘name’       => $lang['opt_banner'],
‘url’           => «$PHP_SELF?mod=banners&action=list»,
‘descr’       => $lang['opt_bannerc'],
‘image’      => «ads.png»,
‘access’     => «1″,
),

<!—code2—>

<!—ecode2—>
Добавим к ним свой собственный, но для начала разберёмся в структуре массива раздела.

<!—code1—>

<!—ecode1—>
array(
‘name’       — Переменная, отвечающая за название раздела
‘url’           — Переменная, отвечающая за ссылку на раздел
‘descr’       — Переменная, отвечающая за описание раздела
‘image’     — Переменная, отвечающая за картинку раздела
‘access’     — Переменная, отвечающая за доступ к разделу
),<!—code2—>

<!—ecode2—>

Теперь можно создать и наш собственный раздел

<!—code1—>

<!—ecode1—>

array(
‘name’      => ‘Тест’,
‘url’          => «$PHP_SELF?mod=test_adm»,
‘descr’      => ‘Настрйка модуля тест’,
‘image’     => «test.png»,
‘access’     => «1″,
),

<!—code2—>

<!—ecode2—>
Теперь, если вы зайдёте в админпанель, то увидите в категории «Другие разделы» и ваш, только что созданный тестовый раздел. Одно но, иконка не отображается, и красный крест вместо неё мало радует глаз. А в чём проблема, давайте зайдём в папку engine/skins/images и загрузим туда любую иконку, которая вам нравится, и назовём её test.png. Желательно чтобы её размеры были 48*48, тогда, в админпанели будет царить гармония и симметрия. С разделом вроде разобрались, теперь сделаем возможным вход в данный раздел в админпанели, для этого нужно открыть доступ на файл администрирования, который мы пока не создали, но для дальнейших действий данный шаг является первоочередным. Итак, открываем файл admin.php любым текстовым редактором и видим там массив

<!—code1—>

<!—ecode1—>$system_modules<!—code2—>

<!—ecode2—>
Без тени сомнения добавляем туда и наш будущий файл администрирования модуля test_adm, а если быть более точным, вам необходимо добавить строку

<!—code1—>

<!—ecode1—>’test_adm’=> ‘admin’<!—code2—>

<!—ecode2—>
Данная строка показывает, что файл test_adm.php будет доступен только админам. На этом мы разобрались со всеми доступами и можем приступить к созданию файла администрирования, о котором уже столько было сказано.
Итак, заходим в папку engine/inc и создаём там файл test_adm.php. Открываем данный файл в текстовом редакторе и добавляем туда следующий текст:

<!—code1—>

<!—ecode1—>

<?php
/* Подключаемые файлы */
<strong>require_once</strong>(ENGINE_DIR.’/inc/test.functions.php’);
<strong>require_once</strong>(ENGINE_DIR.’/data/config.test.php’);

/**
* Сохранение настроек модуля
*/
if ($action == «dosave») {
$find[]     = «‘\r’»;
$replace[]  = «»;
$find[]     = «‘\n’»;
$replace[]  = «»;

if ($member_db[1] != 1) {
msg («error», $lang['opt_denied'], $lang['opt_denied']);
}
$handler = @fopen(ENGINE_DIR.’/data/config.test.php’, «wb»);
fwrite ($handler, «<?php \n\n//Test configurations
\n\n\$config_test = array(
\n\n’version’ => \»v.1.0\»,\n\n»);

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}\»,\n\n»);
}

fwrite($handler, «);\n\n?>»);
fclose($handler);

msg («info», «Строка изменена»,
«{$lang['opt_sysok_1']}<br /><br />
<a href=\»{$PHP_SELF}?mod=test_adm\»>{$lang['db_prev']}</a>»);
}

/**
* Вывод header
*/
echoheader(«Test», «Админпанель модуля test»);

/**
* Вывод блока настроек
*/
opentable();
tableheader(‘Настройка модуля’);
echo<<<HTML
<form action=»" method=»POST»>
<table width=»100%»>
<tr>
<td style=»padding:4px;»>
<b> Текст выводимой строки: </b><br />
<span > например: Hello world </span>
<td align=»middle» width=»400″>
<input style=»text-align:center» size=»40″ value=»{$config_test['text']}» name=»save_con[text]«></td>
</tr>

<tr><td background=»engine/skins/images/mline.gif» height=»1″ colspan=»2″></td></tr>

<tr>
<td style=»padding:4px;»>
<b> Комментарий к тексту: </b><br />
<span> например: Это ваш первый пример модуля с админпанелью </span>
<td align=»middle» width=»400″>
<input style=»text-align:center» size=»40″ value=»{$config_test['detail']}» name=»save_con[detail]«></td>
</tr>

<tr><td background=»engine/skins/images/mline.gif» height=»1″ colspan=»2″></td></tr>

<tr>
<td style=»padding-bottom:10px; padding-top:10px; padding-left:10px;» colspan=»2″>
<input type=»hidden» name=»action» value=»dosave» />
<input type=»submit» name=»do» value=» Сохранить » /></td>
</tr>

</table>
</form>
HTML;
closetable();

/**
* Вывод footer
*/
echofooter();
?>

<!—code2—>

<!—ecode2—>
Это самое сердце модуля в данном сценарии реализуется, как графическая веб-форма панели администрирования, так и сохранение введенных данных. В начале мы подключаем файлы test.functions.php и config.test.php. В первом из них реализованы функции, которые отвечают за создание дизайна админпанели, благодаря ним мы имеем более доступный код, неотегащённый лишним html-кодом.
Приведу листинг файла test.functions.php, который будет необходимо создать в папке engine/inc.

<!—code1—>

<!—ecode1—>

<?php
if (!defined(‘DATALIFEENGINE’)) {
die(«Hacking attempt!»);
}

/**
* Элементы дизайна админпанели
*/
function opentable() {

echo <<<HTML
<table width=»100%»>
<tr>
<td width=»4″><img src=»engine/skins/images/tl_lo.gif» width=»4″ height=»4″ border=»0″></td>
<td background=»engine/skins/images/tl_oo.gif»><img src=»engine/skins/images/tl_oo.gif» width=»1″ height=»4″ border=»0″></td>
<td width=»6″><img src=»engine/skins/images/tl_ro.gif» width=»6″ height=»4″ border=»0″></td>
</tr>
<tr>
<td background=»engine/skins/images/tl_lb.gif»><img src=»engine/skins/images/tl_lb.gif» width=»4″ height=»1″ border=»0″></td>
<td style=»padding:5px;» bgcolor=»#FFFFFF»>
HTML;
}

function closetable() {
echo <<<HTML
</td>
<td background=»engine/skins/images/tl_rb.gif»><img src=»engine/skins/images/tl_rb.gif» width=»6″ height=»1″ border=»0″></td>
</tr>
<tr>
<td><img src=»engine/skins/images/tl_lu.gif» width=»4″ height=»6″ border=»0″></td>
<td background=»engine/skins/images/tl_ub.gif»><img src=»engine/skins/images/tl_ub.gif» width=»1″ height=»6″ border=»0″></td>
<td><img src=»engine/skins/images/tl_ru.gif» width=»6″ height=»6″ border=»0″></td>
</tr>
</table>
HTML;
}

function tableheader($value) {
echo <<<HTML
<table width=»100%»>
<tr>
<td bgcolor=»#EFEFEF» height=»29″ style=»padding-left:10px;»>
<div >$value</div></td>
</tr>
</table>
<div ></div>
HTML;
}
?>

<!—code2—>

<!—ecode2—>
Далее необходимо создать пустой файл config.test.php в папке engine/data (не забудте установить на этот файл права chmod =777). Теперь снова приступим к разбору файла test_adm.php. После подключения файлов мы видим код отвечающий за сохранение введенных данных в веб-форме. Массив данных переданных методом POST заносится в файл config.test.php. Кроме того помимо переданных данных я решил включить в массив статические переменные не требующие частых изменений, в данном случае это переменная

<!—code1—>

<!—ecode1—>’version’ => «v.1.0″,<!—code2—>

<!—ecode2—>
она будет неизменной при изменения других данных через веб-форму.
И наконец, чтобы антивирус движка не ругался при сканирование сервера, нужно отредактировать файл antivirus.php, располагающийся в папке <!—code1—>

<!—ecode1—>engine/ajax<!—code2—>

<!—ecode2—>
Открываем его в текстовом редакторе, и в длинную череду данных массива

<!—code1—>

<!—ecode1—>$good_files<!—code2—>

<!—ecode2—>
Добавляем:

<!—code1—>

<!—ecode1—>

«./engine/modules/test.php»,
«./engine/data/config.test.php»,
«./engine/inc/test.functions.php»,
«./engine/inc/test_adm.php»,

<!—code2—>

<!—ecode2—>
Ну что могу ещё сказать вроде всё, ничего не забыл. Можно попробовать вводить различные данные в веб-форме и в результате вы будете получать различный вывод на сайте. Надеюсь что данные примеры, помогут вам в освоение технологии создания модулей для DataLife Engine и в скором времени вы сможет писать более сложные проекты.

Источник:  datalife-club.ru

Вы можете оставить комментарий, или обратную ссылку на Ваш сайт.

Оставить комментарий

Похожие статьи