Перейти к публикации

Подключение собственного модуля к DLE


Рекомендованные сообщения

Всем привет! Совсем не так давно, пользователь zilber задавал вопрос про подключение .php файла к страницам. Суть такова, что нужно было подключить к сайту отдельную страничку. Для этой страницы был написан небольшой php скрипт, который по запросу из формы делал выборку по базе данных и выводил список отелей в соответствии с запросом формы.

С написанием самой формы у автора проблем не возникло, проблемы начались когда он по средством стандартного подключения ({include}) php файлов решил сделать постраничную навигацию. Он создал статическую страницу, в static.tpl подключил свой модуль и всё вроде отлично. Модуль работает, выборку показывает, но как только он переходит на вторую страницу, ему показывается ошибка 404.

Собственно этим советом хотелось бы рассказать, что хоть он и использовал стандартные и рабочие методы, но поступать нужно было совершенно иначе.

Первая ошибка была в том, что для создание отдельной страницы он использовал «статические страницы», что в принципе правильно, но только с одной стороны. Первоначально они предназначены для вывода статической информации на сайт: правила, о сайте, правовая информация и так далее. Вторая ошибка была в том, что он использовал в качестве адреса страницы ЧПУ (Человеко-понятный урл). На самом деле ЧПУ для статических страниц строится через .htaccess и ссылка в действительности выглядит так: index.php?do=static&page=$1&seourl=$1, где $1 — название статической страницы. Возможно если бы ЧПУ был отключен и обращение к страницы было таким, проблем бы не возникло.

Из практики, могу сказать, что очень мало кто отключает ЧПУ, по крайней мере я таких встречал всего два сайта. Но так как многие используют ЧПУ будем решать задачу иначе.

Алгоритм действий такой. Нам необходимо подключить модуль и вывести его на отдельной странице не использовав при этом «статические страницы». Затем прикрутить к этому возможность через параметры url сделать постраничную навигацию, также добавить возможность редактирования этой страницы через собственный .tpl файл.

Начнём.

Итак, созданный модуль (php файл) нужно через FTP загрузить в папку engine/modules/, но предварительно отредактировав его:

<?php

if( ! defined( 'DATALIFEENGINE' ) ) {die( "Hacking attempt!" );}

$tpl->load_template( 'mymod.tpl' ); // подключаем шаблон

$tpl->set( '{demo}', '123' ); // можно создавать свои {коды}


// сюда пихаешь свой код, все свои GET и прочее


$tpl->compile( 'content' ); // говорим dle, чтобы выводил работу модуля через {content}, который в main.tpl

$tpl->clear();

?>
Это минимальный набор содержимого этого файла. В коде уже даны пояснения. Стоит также заметить, прелесть в том, что есть возможность использования собственных {кодов}. Это даёт нам возможность более красиво и гибко оформить свой .tpl файл, в них можно засунуть и форму запроса и вывод результатов и саму навигацию... Следующим шагом будет подключение модуля и создание отдельной страницы. Но не пугаемся, это есть самое простое. Откройте файл engine/engine.php и там в switch ($do){}, практически в самом верху, идёт перечисление подключенных модулей. Нам нужно сделать тоже самое, добавить наш новый модуль:

	case "mymod" :

		include ENGINE_DIR . '/modules/mymod.php';

		break;
После этих манипуляций наш модуль будет доступен по адресу: index.php?do=mymod — ни чего сложного! Теперь осталось только задать собственный <title> для страницы. В этом же файле engine/engine.php найдите:
elseif ($do == 'register') $nam_e = $lang['title_register'];
и после вставьте:
elseif ($do == 'mymod') $nam_e = 'Мой супер модуль';[/code]

Прелесть подобного подключения заключается в том, что нам станут доступны без предварительного объявления в .php файле, следующие переменные:

$is_logged - содержит информацию, является ли посетитель авторизованным пользователем или гостем, и содержит значения true или false.

$member_id - содержит массив с информацией о авторизованном пользователе, включая всю его информацию из профиля.

$db - класс DLE для работы с базой данных.

$tpl - класс DLE для работы с шаблонами.

$cat_info - массив содержащий информацию обо всех категориях на сайте.

$config - массив содержащий информацию обо всех настройках скрипта.

$user_group - массив содержащий информацию о всех группах пользователей и их настройках.

$category_id - содержит ID категории которую просматривает посетитель.

$_TIME - содержит текущее время в UNIX формате с учетом настроек смещения в настройках скрипта.

$lang - массив содержащий текст из языкового пакета.

$smartphone_detected - содержит информацию о том, просматривает ли пользователь сайт со смартфона или с обычного браузера, и содержит значения true или false.

$dle_module - содержит информацию о разделе сайта, который просматривает пользователь, либо информацию переменной do из URL браузера.

(взято из документации)

Этого уже достаточно, чтобы многое сделать, а если ещё подключить DLE API, то любое море по колено.

Ссылка на сообщение
Поделиться на других сайтах

Еще раз спасибо большое за помощь, после того как ты тогла поделился этой информацией в столь понятном виде, все отлично встало и заработало.

Ссылка на сообщение
Поделиться на других сайтах

любое море по колено.

Привет!

Удивительно дело! При создании еще одного модуля внимательно все повторил - и получил двойной вывод данных (формы в данном случае). Один внутри модуля, где положено, второй - бесконтрольный каким-либо css и верстке - в левом верхнем углу сайта.

Это что за покемон? :wacko:

screen.jpg

UPDATE: это происходит только если исполнять это:

case "mymod" :

include ENGINE_DIR . '/modules/mymod.php';

break;

Если этого не делать - то все ок, причем и имя доступно по /?do=mymod.

Думаю в систему уже прописали автоматическое формирование модуля на основе добавления файла в папку, а нам не сказали :-)

Поэтому и получается, что в первый раз он исполняется системой, а второй раз - потому что мы насильно впихнули.

Можешь подтвердить, опровергнуть или высказать мысли по этому поводу?

Изменено пользователем zilber
Ссылка на сообщение
Поделиться на других сайтах

Думаю в систему уже прописали автоматическое формирование модуля на основе добавления файла в папку, а нам не сказали :-)

не думаю, и у себя такого не наблюдаю. Проверь свой main.tpl, может быть чего с {content} намудрил, а лучше визуально дай посмотреть на main.tpl

Ссылка на сообщение
Поделиться на других сайтах

Думаю в систему уже прописали автоматическое формирование модуля на основе добавления файла в папку, а нам не сказали :-)

не думаю, и у себя такого не наблюдаю. Проверь свой main.tpl, может быть чего с {content} намудрил, а лучше визуально дай посмотреть на main.tpl

Ты меня знаешь, я уже сам разобрался, спасибо большое :-)

Ссылка на сообщение
Поделиться на других сайтах
  • 7 месяцев спустя...

Хороший пост, можно еще так для быстрой подключении, в engine/engine.php:

найти:

switch ( $do ) {

после вставить:

case 'mod':
 // название мода
    $tpl->load_template( 'mod.tpl' );
 // подключаем шаблон
	$tpl->set( '{name}', $member_id['name'] );
 // дополнительные теги
    $tpl->compile( 'content' );
	break;

далее найти:

elseif ($do == 'register') $nam_e = $lang['title_register'];
после вставить:
elseif ($do == 'mod') $nam_e = "Название мода";

в файле .htaccess:

найти:

RewriteEngine On

после вставить;

RewriteRule ^mod(/?)+$ index.php?do=mod [L]

мод будем доступен по адресу

если вкл ЧПУ:

site/mod/

если без ЧПУ:

site/index.php?do=mod

Ссылка на сообщение
Поделиться на других сайтах

Всем привет! Совсем не так давно, пользователь zilber задавал вопрос про подключение .php файла к страницам. Суть такова, что нужно было подключить к сайту отдельную страничку. Для этой страницы был написан небольшой php скрипт, который по запросу из формы делал выборку по базе данных и выводил список отелей в соответствии с запросом формы.

 

С написанием самой формы у автора проблем не возникло, проблемы начались когда он по средством стандартного подключения ({include}) php файлов решил сделать постраничную навигацию. Он создал статическую страницу, в static.tpl подключил свой модуль и всё вроде отлично. Модуль работает, выборку показывает, но как только он переходит на вторую страницу, ему показывается ошибка 404.

 

Собственно этим советом хотелось бы рассказать, что хоть он и использовал стандартные и рабочие методы, но поступать нужно было совершенно иначе.

 

Первая ошибка была в том, что для создание отдельной страницы он использовал «статические страницы», что в принципе правильно, но только с одной стороны. Первоначально они предназначены для вывода статической информации на сайт: правила, о сайте, правовая информация и так далее. Вторая ошибка была в том, что он использовал в качестве адреса страницы ЧПУ (Человеко-понятный урл). На самом деле ЧПУ для статических страниц строится через .htaccess и ссылка в действительности выглядит так: index.php?do=static&page=$1&seourl=$1, где $1 — название статической страницы. Возможно если бы ЧПУ был отключен и обращение к страницы было таким, проблем бы не возникло.

 

Из практики, могу сказать, что очень мало кто отключает ЧПУ, по крайней мере я таких встречал всего два сайта. Но так как многие используют ЧПУ будем решать задачу иначе.

 

Алгоритм действий такой. Нам необходимо подключить модуль и вывести его на отдельной странице не использовав при этом «статические страницы». Затем прикрутить к этому возможность через параметры url сделать постраничную навигацию, также добавить возможность редактирования этой страницы через собственный .tpl файл.

Начнём.

 

Итак, созданный модуль (php файл) нужно через FTP загрузить в папку engine/modules/, но предварительно отредактировав его:

 

 

 
<?php

if( ! defined( 'DATALIFEENGINE' ) ) {die( "Hacking attempt!" );}

$tpl->load_template( 'mymod.tpl' ); // подключаем шаблон

$tpl->set( '{demo}', '123' ); // можно создавать свои {коды}


// сюда пихаешь свой код, все свои GET и прочее


$tpl->compile( 'content' ); // говорим dle, чтобы выводил работу модуля через {content}, который в main.tpl

$tpl->clear();

?>

Это минимальный набор содержимого этого файла. В коде уже даны пояснения. Стоит также заметить, прелесть в том, что есть возможность использования собственных {кодов}. Это даёт нам возможность более красиво и гибко оформить свой .tpl файл, в них можно засунуть и форму запроса и вывод результатов и саму навигацию... Следующим шагом будет подключение модуля и создание отдельной страницы. Но не пугаемся, это есть самое простое. Откройте файл

engine/engine.php

и там в switch ($do){}, практически в самом верху, идёт перечисление подключенных модулей. Нам нужно сделать тоже самое, добавить наш новый модуль:

 
	case "mymod" :

		include ENGINE_DIR . '/modules/mymod.php';

		break;

После этих манипуляций наш модуль будет доступен по адресу: index.php?do=mymod — ни чего сложного! Теперь осталось только задать собственный <title> для страницы. В этом же файле

engine/engine.php

найдите:

 
elseif ($do == 'register') $nam_e = $lang['title_register'];

и после вставьте:

 
elseif ($do == 'mymod') $nam_e = 'Мой супер модуль';[/code]

 

 

Прелесть подобного подключения заключается в том, что нам станут доступны без предварительного объявления в .php файле, следующие переменные:

 

$is_logged - содержит информацию, является ли посетитель авторизованным пользователем или гостем, и содержит значения true или false.

$member_id - содержит массив с информацией о авторизованном пользователе, включая всю его информацию из профиля.

$db - класс DLE для работы с базой данных.

$tpl - класс DLE для работы с шаблонами.

$cat_info - массив содержащий информацию обо всех категориях на сайте.

$config - массив содержащий информацию обо всех настройках скрипта.

$user_group - массив содержащий информацию о всех группах пользователей и их настройках.

$category_id - содержит ID категории которую просматривает посетитель.

$_TIME - содержит текущее время в UNIX формате с учетом настроек смещения в настройках скрипта.

$lang - массив содержащий текст из языкового пакета.

$smartphone_detected - содержит информацию о том, просматривает ли пользователь сайт со смартфона или с обычного браузера, и содержит значения true или false.

$dle_module - содержит информацию о разделе сайта, который просматривает пользователь, либо информацию переменной do из URL браузера.

(взято из документации)

 

Этого уже достаточно, чтобы многое сделать, а если ещё подключить DLE API, то любое море по колено.

а как его вывести сбоку как календарь и как голосование ?

Ссылка на сообщение
Поделиться на других сайтах

 

а как его вывести сбоку как календарь и как голосование ?

ну по идеи через {include} http://dle-news.ru/extras/online/modules_include.html только тогда не нужно всех этих tpl->load и т.д.

Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

×
×
  • Создать...