Главная » 2011 » Май » 31 » Как написать модуль для DLE 7.5 с админпанелью?
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<<


  
    
  
    
    
  
    
    
  
  
  
  
  
    
  
  
  
  
  
    
  
  

       Текст выводимой строки 1:

       например: Hello world
    

      

       Текст выводимой строки 2:

       например: Hello world
    

      

       Текст выводимой строки 3:

       например: Hello world
    

      

       Комментарий к тексту:

       например: Это ваш первый пример модуля с админпанелью
    

      

      
      


HTML;
close();

echofooter();
?>

В файл mymod.functions.php запишем следующее:
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 коду мало коментариев - я в нём как свиня во француских дикалонах smile

И так о подключении: Открывем файл 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 мин. smile На самом деле всё очень быстро, просто я пытался создать подробный урок. По данному принципу можно писать какие угодно модули, главное помните - сердце модуля - это engine/modules/блаблабла.php - в нём можно написать всё что душе угодно! Удачи в эксперементах!
Категория: Советы | Просмотров: 728 | Добавил: ALL-DLE | Рейтинг: 0.0/0
Всего комментариев: 1
1 vadim  
0
Здраствуйте зделайте ктото урок как имено под движок ДЛЕ 9.х создавать модуль. Бо ета стаття по джижок DLE 8.0.

Имя *:
Email *:
Код *: