Как создать tpl файлы на php. PHP-класс для построения шаблонов. Содержимое страницы по умолчанию

Как создать tpl файлы на php. PHP-класс для построения шаблонов. Содержимое страницы по умолчанию

Всем привет. Хочу представить очередной велосипед написанный на PHP с использованием Document Object Model. В чем его отличие от остальных трёхколёсных представителей того же вида? На самом деле отличий не так уж и много, он сочетает в себе лучшее из многих. Например:

1. Полное разделение html и php.
2. Никаких дополнительных меток в шаблонах типа


3. Возможность встраивать в верстку содержимое других файлов шаблона, как из php, так и используя специальный тэг в верстке.
4. Возможность создавать любой html-тэг на лету.
5. Возможность сохранение в html файл все что было сгенерировано и собрано.
6. Проверка существования html-файла запрашиваемой страницы перед тем как генерировать шаблон.

Чтобы всем сразу стало понятно на сколько он удобен и прост в обращении, я расскажу и покажу как я его использовал для создания одного из своих проектов (подозреваю что перепишу все свои проекты под него).

Первое что я обычно делаю это получаю всю информацию из БД о странице (ключевые слова, описание страницы, название шаблона и адреса css и js файлов). Все это я сохраняю в массив $head. Дальше я получаю из БД контент и сохраняю в массив $page. И приступаю к работе с классом.

Итак, сначала я вызываю конструктор класса и передаю в него все необходимые параметры:

$tpl = new Template; $tpl -> ext = TPL_EXTENSION; # расширение файлов в каталоге шаблона $tpl -> htm = CACHE_EXTENSION; # расширение для уже сгенерированных страниц $tpl -> skin_dir = DIR_TEMPLATES; # директория, в которой лежат все шаблоны сайта (например templates) $tpl -> js_dir = DIR_JS; # директория где нужно искать JS файлы $tpl -> css_dir = DIR_CSS; # директория где лежат CSS $tpl -> img_dir = DIR_IMG; # директория где картинки $tpl -> skin = $_SESSION["skin"]; # имя шаблона, который я хочу использовать $tpl -> cache = DIR_CACHE; # куда сохранять готовые html $tpl -> log = FILE_T_LOGS; # куда писать логи $tpl -> tag_start = SYMBOL_START_TAG; # Символ, с которого начинаются переменные в шаблоне $tpl -> tag_end = SYMBOL_END_TAG; # Символ, которым заканчиваются переменные в шаблоне $tpl -> dir_delimeter = DIRECTORY_SEPARATOR; $tpl -> space = SYMBOL_SPACE; # символ, заменяющий пробел.
Фуф, вроде все переменные передали, идем дальше.
Чтобы не заставлять класс делать лишнюю работу, сначала мы проверяем, вдруг у нас уже есть готовый Html-файл запрашиваемой страницы.
if($tpl -> TestPageStatus() === TRUE) { require $tpl -> cacheFileName; } else { $tpl -> page("index"); # передаем имя файла шаблона, кстати их можно передать несколько, через запятую $tpl -> assign("HEAD",$head); $tpl -> assign("CONTENT",$page); $tpl -> build(); # даем команду собрать шаблон $tpl -> ShowPage(); # выводим. }
Вот собственно и все методы, которые нужно использовать для того чтобы вывести страницу.

Теперь разберем еще пару-тройку полезных методов этого класса. Допустим что мы уже передали в класс все необходимое, но еще не дали ему команду на вывод, потому-что вдруг вспомнили что нам нужно создать несколько Html-тэгов в шаблоне. Это тоже делается очень просто. Для начала нужно найти блок, в котором мы хотим что-то добавить. Найти можно 2 способами:

$tpl -> findById("findMe"); $tpl -> findByTagName("div");
Метод findById логично подразумевает что в шаблоне все id тэгов уникальны. А метод findByTagName вернет первый подходящий.
Результат который мы получили поиском мы должны передать в метод $tpl -> createChild(), чтобы иметь возможность создавать в найденном элементе, дочерние тэги. Метод createChild кстати, после создания нового элемента, возвращает его нам, так что мы можем использовать только что созданный элемент еще где-нибудь.

Ковыряясь и экспериментируя я нашел 3 способа создания тэгов в шаблоне, поэтому покажу сразу 3 примера. Пример1:

Нам нужно создать

внутри

$parent = $tpl -> findById("parent"); $tpl -> createChild($parent,"div", "id=child, class=test");
Получим:


Пример 2:

Нам нужно создать

Какой-то текст
внутри

$parent = $tpl -> findById("parent"); $tpl -> createChild($parent,"div", "id=child,class=test", "Какой-то текст");
Получим:

Какой-то текст

Пример3:
Нам нужно создать

Новый элемент
в первом попавшемся span-элементе

$parent = $tpl -> findByTagName("span"); # (1) $tpl -> createChild($parent, "div", "Новый элемент"); # (2)
(1) Поиск родителя не по id, а по тэгу найдет первого подходящего
(2) Если нам не нужны атрибуты, а только значение нового элемента, то их можно не передавать

Получим:

Новый элемент

И после этих манипуляций я уже вызываю ShowPage. И тут мы плавно подошли к еще 2 интересным моментам.
Представим ситуацию, что у нас есть шаблон, предположим что это шаблон list.tpl со списком, допустим, мобильных телефонов:

{CONTENT.Brand}

{CONTENT.Model}

{CONTENT.Info}

Если мы передали информацию только по 1 телефону, то будет просто произведена замена переменных на их значения, а если мы передали информацию сразу по нескольким телефонам, то класс скопирует этот участок столько раз, сколько вариантов значений к нему пришло. И это он сделает сам, в отличие, например от класса xTemplate, которому приходилось под каждое значение вызывает assign и parse
Правда есть один не очень удобный момент, если после этого блока стоят какие-то еще, например:

{CONTENT.Brand}

{CONTENT.Model}

{CONTENT.Info}
Еще какой-то блок

То в такой ситуации нам придется применить небольшую хитрость, упаковав наш мобильник

{CONTENT.Brand}

{CONTENT.Model}

{CONTENT.Info}
Еще какой-то блок

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

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

Представьте что верстальщик хочет чтобы содержимое page.html файла было добавлено в блок файла list.html, для этого он в нужном месте файла list.html дописывает page и когда класс увидит этот тэг он заменит его на содержимое файла page.html

Количество таких вставок не ограничено и их расположение абсолютно не критично, поэтому можно вставлять их как угодно и в любом количестве.

Вот пожалуй и все, если что-то вспомню, сообщу дополнительно. Спасибо что дочитали до конца.

Теги: php, класс, template, шаблонизатор, парсер

Проще всего делать шаблоны на основе уже сверстанных в HTML статических страниц. Рассмотрим создание и подключение шаблона на примере. Допустим, уже есть HTML-файл такого содержания:

<html > <head > <meta name="description" content= /> <meta name="keywords" content= /> <title > title > <link href="style.css" rel="stylesheet" type="text/css" /> head > <body > // начало меню <table border="1" > <tr > <td > <a href="/" > <b > Главнаяb > a > td > tr > <tr > <td > <a href="/about/" > Обо мнеa > td > tr > <tr > <td > <a href="/me_and_me/" > Я и мировое господствоa > td > tr > <tr > <td > <a href="/contacts/" > Контактыa > td > tr > table > // конец меню <h1 > Главная страницаh1 > <p > p > <p > Текст обо мне: Текст обо мне: Текст обо мне: Текст обо мне: p > <p > Текст обо мне: Текст обо мне: Текст обо мне: Текст обо мне: p > <p > Текст обо мне: Текст обо мне: Текст обо мне: Текст обо мне: p > body > html >

Для того, чтобы добавить шаблон в CMS, нужно создать файл в директории tpls/content , например, test.tpl , и вставить туда ваш HTML-код. CSS-файл следует положить в папку css/cms и назвать style.css . Изображения желательно положить в папку images . Не забудьте поменять пути ко всем изображениям и CSS-файлам.

Замечание

В названии файла шаблона нельзя использовать русские буквы!

Чтобы система «увидела » новый шаблон и начала использовать его для вывода страниц, шаблон необходимо добавить в систему. Для этого следует зайти в настройки модуля «Структура », вкладка «Шаблоны » (http://yourdomain.ru/admin/content/config/ ). Вы увидите список уже установленных шаблонов в каждом домене, которые существуют в выбранной языковой версии.

Чтобы подключить новый файл шаблона, заполните в самой нижней свободной строке поля «Название шаблона » (дайте ему какое-нибудь осмысленное название, например «Мой тестовый шаблон ») и «Имя файла » (в нашем случае, test.tpl) и нажмите кнопку «Сохранить ».

Если вы хотите, чтобы этот шаблон использовался в качестве шаблона по умолчанию, поставьте напротив него отметку «Основной ». Теперь этот шаблон будет выбран по умолчанию в выпадающем списке выбора шаблонов. Так же он будет использоваться для вывода системных страниц, которые используют шаблон по умолчанию (Регистрация, Восстановление пароля, Карта сайта).

Шаблоны будут видны в выпадающем списке при редактировании каждой страницы:

Таким образом, на одном сайте можно одновременно использовать много шаблонов, выбирая подходящий шаблон как для отдельной страницы, так и для группы страниц.

Попробуйте создать новую страницу (убедитесь, что в опции «Шаблон дизайна » выбран новый шаблон) и посмотрите, что получилось на сайте.

На сайте должен появиться ваш HTML-шаблон. Но сейчас он статический. Теперь вам надо сделать его динамическим.

Для начала надо определить, какие части HTML-кода будут изменяться. В нашем случае изменяться будут:

    заголовок окна ;</p> <p>мета-теги keywords и description;</p> <p>заголовок текста <h1>;</p> <p>собственно текст;</p> <p>меню сайта.</p> </ul><p>Значит, предстоит немного поработать с HTML-шаблоном и вместо изменяющихся участков поставить соответствующие макросы.</p> <p>Например, в начале HTML-файла заданы мета-теги и тайтл:</p> <<span>meta name=<span>"description" </span><span> content=<span>"описание сайта Василия Пупкина" </span> /> </span> <<span>meta name=<span>"keywords" </span><span> content=<span>"Вася Василий Пупкин официальный сайт" </span> /> </span> <<span>title > </span>Сайт Васи Пупкина: Главная страница</<span>title > </span> <p>Заменяем их на соответствующие макросы (список макросов дан в приложении):</p> <<span>meta name=<span>"description" </span><span> content="%description%" </span> /> </span> <<span>meta name=<span>"keywords" </span> content=<span>"%keywords%" </span> /> </span> <<span>title > </span>%title%</<span>title > </span> <p>Теперь система при формировании страниц будет брать мета-теги и тайтл, прописанные для каждой страницы индивидуально, и подставлять их вместо соответствующих макросов. Названия макросов запомнить очень просто.</p> <p>Аналогично поступим с заголовком текста. Было так:</p> <<span>h1 > </span>Главная страница</<span>h1 > </span> <p>А станет так. Заголовок текста выводится макросом %header%:</p> <<span>h1 > </span>%header%</<span>h1 > </span> <p>Основной текст страницы тоже изменяется:</p> <<span>p > </span>Текст обо мне: Текст обо мне: Текст обо мне: Текст обо мне: </<span>p > </span> <<span>p > </span>Текст обо мне: Текст обо мне: Текст обо мне: Текст обо мне: </<span>p > </span> <<span>p > </span>Текст обо мне: Текст обо мне: Текст обо мне: Текст обо мне: </<span>p > </span> <<span>p > </span>Текст обо мне: Текст обо мне: Текст обо мне: Текст обо мне: </<span>p > </span> <p>Для вывода основного текста страницы есть макрос <i>%content% </i> :</p> <i>%content% </i> <p>В начало файла между тегами <head> и </head> вставляем макрос:</p><p>Эта строчка подключает функцию быстрого редактирования и другие полезные возможности. При помощи нее вы сможете, нажав <b>Shift </b> +<b>D </b> , быстро перейти к правке текущей страницы сайта или каких-либо ее фрагментов.</p> <p>В итоге должно получиться следующее:</p> <<span>html > </span> <<span>head > </span> <<span>meta name=<span>"description" </span><span> content="%description%" </span> /> </span> <<span>meta name=<span>"keywords" </span> content=<span>"%keywords%" </span> /> </span> <<span>title > </span>%title%</<span>title > </span> <<span>link href=<span>"style.css" </span> rel=<span>"stylesheet" </span> type=<span>"text/css" </span> /> </span> %system includeQuickEditJs()% </<span>head > </span> <<span>body > </span> // начало меню <<span>table border=<span>"1" </span>> </span> <<span>tr > </span> <<span>td > </span><<span>a href=<span>"/" </span>> </span><<span>b > </span>Главная</<span>b > </span></<span>a > </span></<span>td > </span> </<span>tr > </span> <<span>tr > </span> <<span>td > </span><<span>a href=<span>"/about/" </span>> </span>О компании</<span>a > </span></<span>td > </span> </<span>tr > </span> <<span>tr > </span> <<span>td > </span><<span>a href=<span>"/projects/" </span>> </span>Проекты</<span>a > </span></<span>td > </span> </<span>tr > </span> <<span>tr > </span> <<span>td > </span><<span>a href=<span>"/contacts/" </span>> </span>Контакты</<span>a > </span></<span>td > </span> </<span>tr > </span> </<span>table > </span> // конец меню <<span>h1 > </span>%header%</<span>h1 > </span> %content% </<span>body > </span> </<span>html > </span> <p>Итак, мы сохраняем файл шаблона и смотрим на результат. Теперь страница практически полностью динамическая, за исключением меню. Предстоит «оживить » меню сайта. Посмотрим как сверстано меню:</p> // начало меню <<span>table border=<span>"1" </span>> </span> <<span>tr > </span> <<span>td > </span><<span>a href=<span>"/" </span>> </span><<span>b > </span>Главная</<span>b > </span></<span>a > </span></<span>td > </span> </<span>tr > </span> <<span>tr > </span> <<span>td > </span><<span>a href=<span>"/about/" </span>> </span>Обо мне</<span>a > </span></<span>td > </span> </<span>tr > </span> <<span>tr > </span> <<span>td > </span><<span>a href=<span>"/me_and_me/" </span>> </span>Я и мировое господство</<span>a > </span></<span>td > </span> </<span>tr > </span> <<span>tr > </span> <<span>td > </span><<span>a href=<span>"/contacts/" </span>> </span>Контакты</<span>a > </span></<span>td > </span> </<span>tr > </span> </<span>table > </span> // конец меню <p>Меню состоит из пунктов. Само меню как-то оформлено, и у пунктов тоже есть оформление. Например, у всего меню может быть некая рамка или фон, текущий пункт меню может быть выделен жирным и т.п. Также в одном меню могут быть разные уровни.</p> <p>Выделим обрамление меню:</p> // начало меню <<span>table border=<span>"1" </span>> </span> <span><!-здесь пойдут пункты меню --> </span> </<span>table > </span> // конец меню <p>Пункт меню оформлен так:</p> <<span>tr > </span> <<span>td > </span><<span>a href=<span>"/contacts/" </span>> </span>Контакты</<span>a > </span></<span>td > </span> </<span>tr > </span> <p>Текущий пункт меню оформлен по-другому:</p> <<span>tr > </span> <<span>td > </span><<span>a href=<span>"/" </span>> </span><<span>b > </span>Главная</<span>b > </span></<span>a > </span></<span>td > </span> </<span>tr > </span> <p>Исходный шаблон меню находится в файле /tpls/content/menu/default.tpl и выглядит так:</p> <?php $FORMS = Array (); $FORMS ["menu_block_level1" ] = <<<END %lines% END; $FORMS ["menu_line_level1" ] = <<<END <div class ="menu" > %text% </div> <<<END <div class ="menu_a" > <span class ="menu_a" >%text%</span> </div> END; ?> <p>Вначале немного непонятно. На самом деле, все очень просто. Посмотрим на первую часть кода:</p> $FORMS ["menu_block_level1" ] = <<<END %lines% END; <p>Это блок, который называется <b>menu_block_level1 </b> . Есть всего 3 типа таких блоков.</p> <ul><p><b>menu_block_level1 </b> ― содержит HTML-обрамление меню;</p> <p><b>menu_line_level1 </b> ― содержит HTML-код пункта меню;</p> <p><b>menu_line_level1_a </b> ― то же самое, что и menu_line_level1, только используется для активного пункта меню.</p> </ul><p>Все, что расположено между <<<END и END; воспринимается, как html-шаблон (для всего меню или для отдельного пункта).</p> <p>При генерации меню, система берет шаблоны пунктов (например, menu_line_level1), и ставит их друг за другом. Получается HTML-код, в котором содержатся все пункты меню. Этот код вставляется вместо макроса <i>%lines% </i> .</p> <p>Итак, необходимо проставить код, который мы выделили выше (обрамление, пункты меню) в соответствующие блоки. Должно получиться примерно так:</p> <?php $FORMS = Array (); $FORMS ["menu_block_level1" ] = <<<END <table border="1" > %lines% </table> END; $FORMS ["menu_line_level1" ] = <<<END <tr> <td>%text%</td> </tr> END; $FORMS ["menu_line_level1_a" ] = <<<END <tr> <td><b>%text%</b></td> </tr> END; ?> <p>Мы уже знаем, что вместо <i>%lines% </i> система подставляет пункты меню с их HTML-обрамлением. Нам встретились новые макросы. Вместо <i>%link% </i> вставляется URL пункта меню, а вместо <i>%text% </i> ― текст (определяется в поле «<span>название страницы </span>»).</p> <p>Теперь меню можно вставить в шаблон страницы макросом <i>%menu% </i> ::</p> <<span>html > </span> <<span>head > </span> <<span>meta name=<span>"description" </span><span> content="%description%" </span> /> </span> <<span>meta name=<span>"keywords" </span> content=<span>"%keywords%" </span> /> </span> <<span>title > </span>%title%</<span>title > </span> <<span>link href=<span>"style.css" </span> rel=<span>"stylesheet" </span> type=<span>"text/css" </span> /> </span> %system includeQuickEditJs()% </<span>head > </span> <<span>body > </span> // начало меню %menu% // конец меню <<span>h1 > </span>%header%</<span>h1 > </span> %content% </<span>body > </span> </<span>html > </span> <p><b>Шаблон готов. </b> </p> <p>Если вы хотите на каких-то страницах сайта выводить меню по другому шаблону, нужно создать еще один файл с шаблоном меню в той же папке. Например, menu2.tpl . Соответственно, при подключении меню к шаблону страницы вместо %menu% надо написать немного по-другому: %content menu("menu2")% .</p> <p>Работа этого и других макросов подробно описана в текущей документации. Работа с ними строится точно по такому же принципу: вы разбиваете необходимый кусок HTML-шаблона на отдельные части, подставляете в соответствующие блоки нужных шаблонов, вставляете на место этого куска соответствующий макрос и он начинает работать.</p> <p><b>Важно учитывать: </b> </span> не стоит размещать несколько макросов на одной строке. Вложенные макросы могут не сработать в качестве аргумента у других макросов.</p> <p>Статья поможет пользователям, которые еще довольно мало знакомы с шаблонами Dle и tpl файлов в частности. Статья поможет разобраться в чем их основное предназначение и как с ними работать.<br>Люди которые хорошо знакомы и не очень с HTML и CSS легко освоят работу с файлами шаблона dle.</p><p>Итак начнем в состоящий из шаблонов с расширением *.tpl есть стандартные и обязательные файлы шаблонов, которые должны там присутствовать. При отсутствии одного из файла система будет <b>сообщать о ошибке </b>, в некоторых случаях интернет-портал не будет работать совсем. <br><b>Подробно о каждом файле шаблона DataLife Engine </b></p><p><b>addcomments.tpl </b> - Форма для добавления комментариев только в полной новости. </p><p><b>addnews.tpl </b> - Форма для добавления публикации на веб-ресурс, для заполнения данных о новости: заголовок, категорию новости, короткую и полную новость, поля для облака тегов и различные администраторские функции.</p><p><b>comments.tpl </b> - Отвечает за оформление комментариев, как в полной публикации так и последние комментарии. </p><p><b>feedback.tpl </b> - Основное оформление формы обратной связи с поля заполнения.</p><p><b>fullstory.tpl </b> - Шаблон файл оформление полной новости, дату публикации, автор, количество комментариев, вывод похожих новостей и т.д.</p><p><b>info.tpl </b> - Форма сообщения страницы ошибки на веб-ресурсе, выходит например при неправильной авторизации.</p><p><b>informer.tpl </b> - Файл оформления вывода информера (партнеров или например новости Яндекс и т.д.) на блоге.</p><p><b>login.tpl </b> - Основной файл оформления формы Авторизации, Админ панели</p><p><b>lostpassword.tpl </b> - Форма восстановления (при потери) пароля, выводится только для не авторизованных пользователей.</p><p><b>main.tpl </b> - Основной файл оформления главной страницы вывода информации блога DLE, к которому подключаются остальные шаблоны. </p><p><b>navigation.tpl </b> - Шаблон оформления перехода по страницам, постраничная навигация.</p><p><b>offline.tpl </b> - Страница отключенного сайта при технических работах, если необходимо провести глобальные изменения на веб-проекте. Будет виден всем кроме администрации интернет источника.</p><p><b>pm.tpl </b> - Форма оформления Отправки, Входящих и Отправленных сообщений на интернет-портале дле, отвечает за оформление личных сообщений пользователя. </p><p><b>preview.tpl </b> - Настройки оформления стилей CSS для окна предварительного просмотра при добавлении новости, в которую входит оформление для короткой и полной новости.</p><p><b>print.tpl </b> - Страницы Распечатки для принтера.</p><p><b>profile_popup.tpl </b> - Всплывающее модальное окно при включенном AJAX скрипте, которое выходит при выборе логина пользователя мышкой. Отвечает за оформление POP - Up окна с краткой информацией о пользователе. </p><p><b>registration.tpl </b> - Форма регистрации нового пользователя после принятия правил выдает анкету с полями для заполнения и регистрации. <br>ПС.Правила интернет-портала находятся в статической странице, и не присутствуют в данном шаблоне.</p><p><b>relatednews.tpl </b> - Форма оформления Вывод похожих новостей.</p><p><b>search.tpl </b> - Выводит страницу простого поиска по веб-ресурсу, куда входит поле для заполнения и кнопки Поиск и Расширенный поиск.</p><p><b>searchresult.tpl </b> - Форма оформления результата поиска, а также при выборе Расширенный поиск выводит поля для заполнения.</p><p><b>shortstory.tpl </b> -Важный шаблон осуществляет оформление короткой новости.</p><p><b>speedbar.tpl </b> - Данный файл выводит полную ссылку на категорию в которой опубликована новость, и отвечает за быстрый переход в нужный раздел (хлебные крошки).</p><p><b>static.tpl </b> - Данный файл шаблона отвечает за оформление и вывод статических страниц созданных в админ панели Dle.</p><p><b>static_print.tpl </b> - Применяется для оформления статической страницы Версия для печати</p><p><b>stats.tpl </b> - Оформление Статистики веб-ресурса, с выводом всей информации. </p><p><b>tagscloud.tpl </b> - Шаблон оформления облака тегов.</p><p><b>topnews.tpl </b> - Применяется для оформления популярных новостей.</p><p><b>userinfo.tpl </b> - Форма оформления профиля информации о пользователи, а также POP - Up окном для последующего редактирования данных, открывается если пользователь зарегистрирован на веб-проекте.</p><p><b>vote.tpl </b> - Используется оформления вывода результатов голосований, как Все опросы на DLE или Всего проголосовало.</p><p>На данный момент перечислены основные tpl файлы шаблона Dle, с выходом новых версий возможны изменения и добавления новых шаблонов TPL для движка DataLife Engine .</p><p>Помимо основных шаблонов TPL в DLE, любой пользователь может добавить свои, для удобного оформления, улучшения и установки сторонних модулей на веб-проект!<br>Для этого создается сам шаблон например:</p><p>leftblocks.tpl (левый блок веб-проекта) в который добавляются элементы оформления.</p><p>Внимание! Для нормальной работы файл должен находится в папке с основными шаблонами там же где и main.tpl!<br>Для подключения такого блока используется тег {include} Например:<br>Который вставляется в нужном месте main.tpl</p><p>{include file="leftblocks.tpl"}</p><p>Помимо такой вставки есть ещё вариант подключения коротких новостей с помощью шаблонов например:</p><p>shortstory-1.tpl Короткая новость в который добавляются элементы оформления. Пример вставки: </p><p> {title} </p><p>В main.tpl вставляем тег с настройками:</p><p>{custom category="2,3" template="shortstory-1" aviable="global" from="0" limit="5" cache="yes"}</p><p>В результате если вставить такую вставку например: в правый блок, появится ссылка и title последних новостей категории 2 и 3 как на нашем сайте www.сайт раздел Новости "Модули ДЛЕ " и т.д., где</p><p>custom category="2,3" (категории из которых берется новость можно добавить ещё через запятую)<br>template="shortstory-1" (название шаблона)<br>aviable="global" (глобально для всех, можно установить main вместо global будет только на главной выводится информация)<br>from="0"<br>limit="5" (количество публикаций)<br>cache="yes" (Включить/Выключить кеширование) </p><p>Также в шаблонах присутствую стандартные папки:<br>bbcodes (Папка с файлами картинок для редактирования таких как Смайлов, HTML цвета и BBcodes)<br>dleimages (Папка с файлами картинок для оформления рейтинга, закладок, водяного знака и т.д.)<br>images ((Папка с файлами изображений для оформления шаблона. может иметь разное название)<br>js (Папка с файлами скриптов JS и т.д.)<br>style (Папка с файлами каскадов стилей для оформления шаблонов) </p><p>Внимание! Скрипты обязательно должны находиться в папке JS ,в котором должен быть файл.htaccess для защиты от разного рода угроз, если такого файла не будет скрипт не запустится (сработает система защиты Dle).<br>Внимание! Во всех папках шаблона также должен быть файл.htaccess <br>Пример файла.htaccess с данными внутри:<br> Order Deny,AllowAllow from all </p><p>Внимание! В шаблоне там же где main.tpl должен быть файл.htaccess С таким кодом:<br> Order allow,denyDeny from all </p><p>Файл.htaccess можно скачать из шаблона дистрибутива движка DataLife Engine</p> <p>Сразу скажу, что я уже писал об этой теме здесь: . Однако, не все поняли данный материал, и я решил к нему вернуться и написать всё немного по-другому. Не секрет, что любой серьёзный движок никогда не будет смешивать в своём коде <b>HTML </b> и <b>PHP </b>. Однако, <b>HTML </b> и <b>PHP </b> коды очень тесно взаимосвязаны, поэтому для того, чтобы не нарушать правила "хорошего тона", были придуманы <b>tpl-файлы </b>. Данные файлы служат для хранения <b>HTML-кода с элементами шаблонов </b>, которые подставляются в <b>PHP-коде </b>. Давайте подробнее разберём <b>использование tpl-файлов </b> с примером.</p> <p>Возьмём с Вами самый элементарный пример - это панель пользователя, где есть его аватарка и приветствие по имени. Первым делом, создадим <b>tpl-файл </b>, и пусть он называется <b>userpanel.tpl </b>. Напоминаю, что это всего лишь кусок <b>HTML-кода с элементами шаблона </b>:</p><p> <p>Здравствуйте, %name%!</p><br> <p> <img src='https://i1.wp.com/%avatar%' loading=lazy><br> </p><br></p><p>Ничего сложного, это просто обычный <b>HTML-код </b>. Только вместо определённых значений стоят <b>%элементы_шаблона% </b>.</p> <p>Теперь разберёмся с <b>PHP-обработкой </b>. Здесь всё будет более, чем абстрактно, но, к сожалению, по-другому никак. Главное - это понять принцип работы. И так <b>PHP-код </b> для обработки созданного <b>tpl-файла </b>:</p><p> <?php<br> /* Данная функция, хоть и использует буферы, но суть элементарна: вернуть содержимое файла */<br> function getTemplate($name) {<br> ob_start(); // Начинаем сохрание выходных данных в буфер<br> include ($name.".tpl"); // Отправляем в буфер содержимое файла<br> $text = ob_get_clean(); // Очищаем буфер и возвращаем содержимое<br> return $text; // Возвращение текста из файла<br> }<br> $name = "Николай"; // Извлекается из базы<br> $avatar = "avatars/user_15.jpg"; // Извлекается из базы<br> /* Начинается замена элементов шаблона на реальные данные */<br> $userpanel = str_replace(<br> array(<br> "%name%",<br> "%avatar%"<br>),<br> array (<br> $name,<br> $avatar<br>),<br> getTemplate("userpanel")<br>);<br> echo $userpanel; // Выводим окончательный результат<br> ?> </p><p>Это простейший вариант. Всё прокомментировано, поэтому вопросов по этому примеру возникнуть не должно. И по сути любая страница состоит из таких вот блоков. Ваша задача взять нужные блоки (функция <b>getTemplate() </b>), заменить нужными данными (функция str_replace() и данные полученные, например, из базы), а потом просто соединить все блоки, как обычные строки, и вывести всё на страницу.</p> <p>Безусловно, без <b>ООП </b> здесь очень проблемно будет. Вы такое количество условий наплодите (страниц же много), что быстро запутаетесь. Но принцип использования <b>tpl-файлов </b>, надеюсь, Вы осознали. Дальше уже самостоятельно подумайте, как всё это обернуть в <b>ООП </b>, чтобы всё было максимально простым с точки зрения понимания кода и его сопровождения в будущем.</p> <script>document.write("<img style='display:none;' src='//counter.yadro.ru/hit;artfast_after?t44.1;r"+ escape(document.referrer)+((typeof(screen)=="undefined")?"": ";s"+screen.width+"*"+screen.height+"*"+(screen.colorDepth? screen.colorDepth:screen.pixelDepth))+";u"+escape(document.URL)+";h"+escape(document.title.substring(0,150))+ ";"+Math.random()+ "border='0' width='1' height='1' loading=lazy>");</script> </div> </div> </div> </div> </div> <div class="right-rail-pseudo"></div> <aside class="right-rail collection-sidebar"> </aside> </div> <div id="wide-collection-items-container"></div> <div class="module-more-news-center"> </div> <div class="collection-footer grid"> <aside class="right-rail collection-sidebar"></aside> <div class="collection-footer-container"> <footer class="content-foot"> <aside class="module-social-sharing"> </aside> <div class="content-topics"> </div> </footer> </div> </div> </article> </main> <footer class="footer"> <nav> <ul class="nav"> <li>© Компьютерные записи 2024</li> <li><a class="tracked-offpage" data-track-category="Footer" data-track-action="Go to Privacy Policy" href="">Политика конфиденциальности</a></li> <li><a class="tracked-offpage" data-track-category="Footer" data-track-action="Go to Contact Us" href="/feedback.html">Контакты</a></li> <li><a class="tracked-offpage" data-track-category="Footer" data-track-action="Go to Media Kit" href="">Реклама на сайте</a></li> <li><a class="tracked-offpage" data-track-category="Footer" data-track-action="Go to Sitemap" href="/sitemap.xml">Карта сайта</a></li> </ul> </nav> </footer> <div id="lightbox" class="lightbox"> <div class="lightbox-close"></div> </div> <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script> <script> window.jQuery || document.write(' < script src = "/assets/jquery.min.js" > < \/script>') </script> <script> $(document).ready(function() { var a = $(window), b = $("body"), c = $("#header-nav-more"), e = c.children("a"), f = $("#header-hamburger"); $("html").hasClass("no-touch") && (c.on("mouseenter", function() { c.hasClass("active-hover") || c.addClass("active-hover") }), c.on("mouseleave", function() { c.removeClass("active-hover") })), e.on("click", function(a) { c.hasClass("active-hover") ? c.removeClass("active-hover") : c.addClass("active-hover"), a.preventDefault() }), f.on("click", function() { var a = $(this); a.hasClass("active-hamburger") && c.removeClass("active-hover"), a.toggleClass("active-hamburger"), b.toggleClass("active-nav") }), a.on("scroll", d(function() { a.scrollTop() > 0 ? b.addClass("active-scroll") : b.removeClass("active-scroll") }, 100)) }); </script> </body> </html><script data-cfasync="false" src="/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js"></script>