odys 384 Опубликовано: 25 февраля 2015 Рассказать Опубликовано: 25 февраля 2015 Всем привет! Совсем не так давно, пользователь 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, то любое море по колено. Цитата Ссылка на сообщение Поделиться на других сайтах
zilber 3 Опубликовано: 1 марта 2015 Рассказать Опубликовано: 1 марта 2015 Еще раз спасибо большое за помощь, после того как ты тогла поделился этой информацией в столь понятном виде, все отлично встало и заработало. Цитата Ссылка на сообщение Поделиться на других сайтах
zilber 3 Опубликовано: 5 марта 2015 Рассказать Опубликовано: 5 марта 2015 (изменено) любое море по колено. Привет! Удивительно дело! При создании еще одного модуля внимательно все повторил - и получил двойной вывод данных (формы в данном случае). Один внутри модуля, где положено, второй - бесконтрольный каким-либо css и верстке - в левом верхнем углу сайта. Это что за покемон? UPDATE: это происходит только если исполнять это: case "mymod" : include ENGINE_DIR . '/modules/mymod.php'; break; Если этого не делать - то все ок, причем и имя доступно по /?do=mymod. Думаю в систему уже прописали автоматическое формирование модуля на основе добавления файла в папку, а нам не сказали :-) Поэтому и получается, что в первый раз он исполняется системой, а второй раз - потому что мы насильно впихнули. Можешь подтвердить, опровергнуть или высказать мысли по этому поводу? Изменено 5 марта 2015 пользователем zilber Цитата Ссылка на сообщение Поделиться на других сайтах
odys 384 Опубликовано: 5 марта 2015 Рассказать Опубликовано: 5 марта 2015 Автор Думаю в систему уже прописали автоматическое формирование модуля на основе добавления файла в папку, а нам не сказали :-) не думаю, и у себя такого не наблюдаю. Проверь свой main.tpl, может быть чего с {content} намудрил, а лучше визуально дай посмотреть на main.tpl Цитата Ссылка на сообщение Поделиться на других сайтах
zilber 3 Опубликовано: 12 марта 2015 Рассказать Опубликовано: 12 марта 2015 Думаю в систему уже прописали автоматическое формирование модуля на основе добавления файла в папку, а нам не сказали :-) не думаю, и у себя такого не наблюдаю. Проверь свой main.tpl, может быть чего с {content} намудрил, а лучше визуально дай посмотреть на main.tpl Ты меня знаешь, я уже сам разобрался, спасибо большое :-) Цитата Ссылка на сообщение Поделиться на других сайтах
sadan 6 Опубликовано: 22 октября 2015 Рассказать Опубликовано: 22 октября 2015 Хороший пост, можно еще так для быстрой подключении, в 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 Цитата Ссылка на сообщение Поделиться на других сайтах
Alex-68 5 Опубликовано: 22 октября 2015 Рассказать Опубликовано: 22 октября 2015 Всем привет! Совсем не так давно, пользователь 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, то любое море по колено.а как его вывести сбоку как календарь и как голосование ? Цитата Ссылка на сообщение Поделиться на других сайтах
odys 384 Опубликовано: 22 октября 2015 Рассказать Опубликовано: 22 октября 2015 Автор а как его вывести сбоку как календарь и как голосование ?ну по идеи через {include} http://dle-news.ru/extras/online/modules_include.html только тогда не нужно всех этих tpl->load и т.д. Цитата Ссылка на сообщение Поделиться на других сайтах
Рекомендованные сообщения
Присоединяйтесь к обсуждению
Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.