Главная | Новости | Блог | Ответы | Учебник | Правила |
Вы здесь: ГлавнаяУчебникШаблоны
Вход | Регистрация
Шаблоны - части xhtml кода с внедренными в них инструкциями, используемые для формирования отображения данных.
Простым примером использования шаблона может служить вывод данных таблицы. Все строчки в таблице имеют одинаковый вид отображения. Меняются только данные. Поэтому для вывода каждой строчки информации используется один и тот же шаблон.
В реальной жизни аналогией может служит заполнение квитанции на оплату чего-либо. Бланк квитанции - это шаблон. Мы можем заполнить хоть 20 бланков на оплату разных видов услуг. Все они будут выглядеть одинаково, хотя информация на них будет отличаться.
В сайтостроении шаблоны используются повсеместно. Если на Вашем сайте 100 страниц, все они имеют похожий вид: у них есть меню, шапка с логотипом и копирайт. Для большинства сайтов для отображения всех этих страниц достаточно двух шаблонов: для главной страницы и для второстепенных страниц.
Шаблоны в конструкторе используются для формирования общего вида страницы, всех элементов форм и таблиц, и даже для выборок данных.
Работу шаблонов мы будем рассматривать на примере отображения раздела "Часто задаваемые вопросы".
Один шаблон сам по себе не решает никакой задачи, поэтому шаблоны объединяются в группы. Для вывода всех "ЧаВо" существует шаблон вывода одной записи, шаблон оформления всех записей и шаблон сообщения об отсутствующих записях. Все эти шаблоны принадлежат к одной группе и задаются при формировании вывода данных. Кроме этих шаблонов, специализированных только для вывода "ЧаВо", используются глобальные шаблоны сортировок, выборки и переключателя между страницами. Глобальные шаблоны используются на всем сайте для работы с разными структурами данных, задаются на этапе разработки дизайна и, чаще всего, не требуют изменений.
Структура данных "ЧаВо" содержит следующие поля: имя задающего вопрос (name), его e-mail(email), вопрос(question), тип вопроса (type), дата добавления (dateadd) и ответ администрации(answer). Не все эти данные нужно выводить на сайт. На сайте требуется только вопрос и ответ на него. E-mail может быть использован для информирования спрашивающего, что ответ на его вопрос размещен в "ЧаВо", а имя - для обращения к нему.
Шаблон вывода одной строчки в самом простом случае будет выглядеть так: "Вопрос: {question}<br/>Ответ: {answer}<br/>"
При выводе данных вместо {question} будет подставляться вопрос, вместо {answer} - ответ. Будут перебраны все строчки и сформирован код, который будет подставлен в шаблон вывода списка всех "ЧаВо".
Шаблон для вывода списка всех "ЧаВо"
{where}{sort}{code}{page}
Вместо {where} на странице будет выводиться список ссылок на "ЧаВо", сгруппированные согласно типу вопросов. Эти ссылки будут формироваться на основе шаблонов, которые используются на всем сайте.
Вместо {sort} выводятся ссылки на сортировку "ЧаВо". Их можно сортировать по дате добавления. Например, вверху выводить самые новые вопросы или, наоборот, вверху самые старые. Сортировка - очень полезная вещь. Можно сортировать по цене, объему, алфавиту и т.д.
Вместо {code} будут выведены данные, сформированные на основе шаблона вывода одной строчки, описанного выше.
Вместо {page} будет вставлен переключатель страниц и поле для выбора количества отображаемых сообщений на странице. Это также будет сформировано на основе шаблонов, которые задаются на весь сайт.
И последний шаблон в группе вывода списка "ЧаВо" - шаблон вывода сообщения о том, что сообщений нет. Примером может служить просто текст "Нет сообщений для вывода".
На основе этой группы шаблонов и шаблонов для формирования сортировок, выборок и переключателей страниц формируется вывод списка всех "ЧаВо".
В каждом шаблоне поддерживается два типа переменных: одни переменные уникальны только для этого шаблона, другие переменные - доступны абсолютно для всех шаблонов, которые используются на сайте.
Список индивидуальных переменных указан на той странице, где редактируется шаблон. И мы не будем их рассматривать.
Рассмотрим переменные, которые доступны во всех шаблонах.
Ассоциативный массив DATE - содержит в себе все необходимые переменные для вывода времени (fulltime, time, day, month, year, hour, minute).
Ассоциативный массив SERVER - содержит в себе данные об ip, браузере, хосте и т.д. (ip, proxyip, user_agent, ua, host, uri, cookie).
Ассоциативный массив GET - содержит в себе все get параметры. Их список для каждой страницы индивидуален.
Ассоциативный массив POST - содержит в себе все post параметры, переданные формой. Список зависит от полей отправленной формы.
Ассоциативный массив COOKIE - содержит в себе список меток браузера. Он зависит от множества параметров.
Ассоциативный массив AUTH - содержит информацию об авторизованном пользователе (login, id_user, group, ...). Список может изменяться по усмотрению автора сайта. Переменные, которые обязательно будут: id_user, login.
Ассоциативный массив DETAIL[namebase] - содержит все поля детально выводимой на страницу записи. namebase - название структуры данных. Список зависит от структуры. Если в структуре guestbook есть поля user, message, то при детальном выводе одной записи будут доступны {DETAIL[guestbook][user]} и {DETAIL[guestbook][message]}. Используется при связанных данных.
Для вывода в шаблоне данных из вышеописанных ассоциативных массивов нужно написать {NAMEASSOC[namekey]}. Где NAMEASSOC - название ассоциативного массива, namekey - название ключа.
Примеры.
1. Вывод текущего полного времени {DATE[fulltime]}
2. Вывод текущего года {DATE[year]}
3. Вывод ip посетителя страницы {SERVER[ip]}
4. Вывод логина вошедшего в систему пользователя {AUTH[login]}
5. Вывод get параметра uid {GET[uid]}
Кроме ассоциативных массивов в шаблонах доступны переменные.
Эти переменные инициализируются в файле initvar. Этот ассоциативный массив доступен для редактирования, и Вы сами можете добавлять необходимые Вам переменные.
Стандартно определены {_title} - заголовок страницы, {_description} - описание страницы, {_keywords} - ключевые слова на странице, {_template} - название основного шаблона вывода страницы, {_ugroup} - название группы доступа к текущему разделу, {_namesite} - название сайта, {_rowinpage} - стандартное количество вывода записей на страницу.
Вышеописанные переменные могут быть изменены модулями. Кроме того, некоторые модули добавляют собственные ассоциативные массивы и переменные. Например, модуль счетчика добавляет ассоциативный массив LOGS (robots, yesterdayuniq, alluniq, allhits, todayuniq, todayhits, online, onlinemem, nextday, newuser, refererin, ippageload), в котором доступны количество посетителей на сайте, количество зашедших сегодня, вчера, количество просмотренных страниц. И этот ассоциативный массив становится также доступен всем шаблонам.
При выводе сложных вложенных структур появляется переменная {_tabledetaildeep}. Об этом более подробно читайте в описании связанных данных.
-------------------
Кроме переменных в шаблоне поддерживаются условный оператор и функции обработки данных.
Есть два вида условных операторов if: проверяющий на заполненность переменной (то есть пустая она или нет, или равна она нулю или не равна) и проверяющий на соблюдение условия.
If, проверяющий на заполненность переменной.
Выглядит конструкция таким образом: <?if({peremennaya})?>Переменной присвоено непустое значение<?endif?>
Эта конструкция означает следующее: вместо {peremennaya} подставится какое-то значение, и если это значение не равно нулю, т.е. переменная заполнена, то отобразится надпись "Переменной присвоено непустое значение".
Условный оператор поддерживает "иначе".
Выглядит это так: <?if({peremennaya})?>переменная непустая<?else?>переменная пустая<?endif?>
Это значит, что, если значение переменной {peremennaya} не равно нулю, то отобразится надпись "переменная непустая", а иначе отобразится "переменная пустая".
Ifcmp, проверяющий на соблюдение условия.
Рассмотрим более сложный оператор - оператор сравнения ifcmp.
<?ifcmp(ЗНАЧЕНИЕ1условиеЗНАЧЕНИЕ2)?>выполняется<?else?>не выполняется<?endif?>
И ЗНАЧЕНИЕ1 и ЗНАЧЕНИЕ2 могут быть переменными.
Вместо "условие" поддерживаются:
== равенство левой и правой части
!= левая часть не равна правой
>= левая часть больше либо равна правой
<= левая часть меньше либо равна правой
> левая часть больше правой
< левая часть меньше правой
<- содержит подстрочку, т.е. в левой части содержится вся правая часть
Все строковые сравнения происходят с учетом регистра, т.е. различаются большие и маленькие буквы.
Поддерживается объединение переменных.

Несколько примеров использования оператора if и ifcmp:
Пример 1:
Если в тексте вопроса содержится матерное слово xyz, то вместо вопроса вывести надпись "Содержит нецензурное выражение".
"Вопрос: <?ifcmp({question}<-xyz)?>Содержит нецензурное выражение<?else?>{question}<?endif?><br/>Ответ: {answer}<br/>"
Пример 2:
Если тип вопроса не определен, то написать "Общий вопрос".
"Вопрос: {question} <?if({type})?><?else?>Общий вопрос<?endif?><br/>Ответ: {answer}<br/>"
Или можно так:
"Вопрос: {question} <?ifcmp({type}==0)?>Общий вопрос<?endif?><br/>Ответ: {answer}<br/>"
Пример 3:
Если дата добавления вопроса старее 2011 года, то возле этого вопроса написать "Старье".
"Вопрос: {question} <?ifcmp({date}<2011-01-01)?>Старье<?endif?><br/>Ответ: {answer}<br/>"
Пример 4:
Если ответ не заполнен, написать "Вопрос пока не отвечен".
"Вопрос: {question}<br/><?ifcmp({answer}==0)?>Вопрос пока не отвечен<?else?>Ответ: {answer}<?endif?><br/>
Пример 5:
Если текущее время больше 10 часов 30 минут, то вывести об этом сообщение.
<?ifcmp({DATE[hour]}:{DATE[minute]}>10:30)?>Сейчас больше 10 часов 30 минут<?endif?>
Пример 6:
Проверить длину сообщения, и если оно короче 10 символов, вывести сообщение, если больше 100 символов, тоже вывести сообщение. В переменной {len} длина.
<?ifcmp({len}<10)?>Сообщение короче 10 символом<?else?><?ifcmp({len}>100)?>Сообщение длиннее 100 символов<?endif?><?endif?>

Булевые условия "И", "ИЛИ", "НЕ" не поддерживаются.
Внутрь условий нельзя вставлять функции. Если необходимо обработать данные функцией, то присвойте переменной, а в условии используйте переменную.

Список функций

Функции вывода в месте вставки
<?function(namefunction;param1;param2;param3)?>
namefunction - название функции (список названий функций приведено ниже)
param1;param2;param3 - параметры функции. Количество параметров зависит от функции. В некоторых функциях их количество фиксировано, в некоторых - бесконечно, а в некоторых - есть необязательные параметры.
или присвоение переменной
<?function({var}=namefunction;param1;param2;param3)?>

Пример 1:
Присвоить переменной строчку "Мама ИМЯ мыла раму" и вывести ее на экран с использованием функций. Вместо ИМЯ вывести данные из переменной get запроса и посчитать длину строки.
Присвоить переменную:
<?function({stroka}=join;Мама {GET[name]} мыла раму)?>
Вывести строчку. Можно вывести проще, но для примера так:
<?function(join;{stroka})?>
Вывести длину строчки:
<?function(strlen;{stroka})?>
Пример 2:
Вывести время через 3 дня и 10 минут.
<?function({t310}=dateadd;{DATE[fulltime]};3;day)?>
<?function(dateadd;{t310};10;minute)?>
или другим способом:
<?function(dateadd;{DATE[fulltime]};4330;minute)?>
Пример 3:
Занести значение get параметра name в куку:
<?function(setcookie;imya;{GET[name]})?>
При следующих запросах страниц на сайте будет доступна переменная {COOKIE[imya]}
Можно сделать так: <?if({COOKIE[imya]})?>Имя из куки {COOKIE[imya]}<?else?>Имя в куках пока не определено<?endif?>
О нас | Написать нам | Сообщить о правонарушении |

Создать свой сайт © Конструктор сайтов Letnick.com 2006-2017