Теги для шаблонов
07.07.2010[document]
type = manual
name = "Теги для шаблонов"
description = 'Тег в шаблонах темы это выражение вида $object.property, где object это объект, а property его свойство. Пример $options.url, где options - глобальный объект, всегда доступный в
шаблонах, а url - свойство, значение которого адрес сайта без слеша (/) в конце адреса, включая http. Всегда доступны следующие глобальные объекты:
- $options множество настроек сайта, например адрес, название, описание сайта
- $template много свойств для работы с шаблонами
- $context объект генерирующий контент. Имеет всегда разный тип, в зависимости от страницы. Мало используется
Как правило используются $options и $template. На странице одиночного поста или списка постов появляется объект $post, доступный и используемый в шаблонах. $post появляется внутри секции content и в нее ее недоступен (точнее доступен и после секции, но ориентироваться на это не следует). Для шаблона доступны все публичные свойства этих объектов и полный список всех свойств этих объектов необходимо смотреть на страницах описывающий класс этих объектов. Следовательно нужно почитать про свойства следующих классов:
- toptions
- ttemplate
- tpost
- tmenu
Здесь же можно коротко и частично описать некоторые свойства этих классов. Начну с toptions
- url адрес сайта, основа для всех адресов страниц
- files адрес для адресов файлов, например javascript файлов, картинок
- name название сайта
- description описание сайта
- keywords ключевые слова для сайта
- q один символ ? или &, в зависимости от адреса сайта, используется в качестве первого разделителя для параметров get
- language язык сайта, например ru, en, ua
- timezone часовой пояс
- dateformat формат даты
- perpage количество постов на одной странице
- version версия дистрибутива
Очевидно, что даже перечисленные свойства не используются в шаблонах. Наиболее употребительными свойствами являются url, files, name.
Следующий класс для краткого обзора будет ttemplate. Когда описываются свойства, то имеется в виду тема запрашиваемой страницы. Тема страницы может отличаться от темы выбранной как общая тема для всего сайта. Вот его некоторые свойства
- url адрес темы
- path файловый путь на сервере к файлам темы
- title заголовок страницы. Формируется из свойства title объекта генерирующего контент (например пост)
- menu список меню
- sitebar сайтбар
- theme имя темы выбранной в админке
- context запрашиваемый объект, это тот же самый объект, что и $urlmap.context
- footer подпись для подвала
- icon иконка страницы
- keywords ключевые слова, берутся у текущего объекта context, если пустая строка, то берется значение $options.keywords
- description описание, симметрично keywords
- head дополнительные строки в секции head, например подключение javascript для комментариев
- content контентная часть страницы, в шаблонах не используется. Получает контент от объекта context
Тоже понятно, что часть свойств не используется в шаблонах. Часто используются следующие свойства: title, url, keywords, description, head, footer. Свойства content, menu в шаблонах не используются (точнее используются их значение для генерации конечного html). Существует возможность добавлять новые теги для $template, эта возможность реализуется в плагинах и предназначена для тех случаев, когда требуется генерировать свой собственный контент не на основании шаблонов темы. Детали этого находятся в описании класса ttags.
Много свойств есть у класса tpost, и большинство из них используется в шаблонах. Вот краткий перечень свойств:
- id уникальный номер поста
- idurl уникальный номер адреса (урла) поста
- parent уникальный id родительского поста, как правило =0
- author уникальный id автора поста
- revision номер ревизии поста
- icon уникальный id иконки
- url адрес поста, без адреса сайта
- link адрес поста, включая адрес сайта
- title заголовок поста
- title2 альтернативный заголовок поста
- filtered полный текст поста, текст уже отфильтрованный, предназначен для шаблонов
- excerpt анонс поста
- rss соответственно контент для RSS ленты
- rawcontent сырой, то есть неотфильтрованный контент
- description описание поста
- moretitle текст для ссылки Далее
- morelink ссылка далее поста, шаблон ссылки берется из темы
- pagescount количество страниц контента, если контент разбит на страницы
- countpages максимум от количества страниц контента и страниц комментариев
- commentpages количество страниц комментариев
- lastcommenturl адрес последнего комментария, если комментарии на страницах, то последняя страница
- rsscomments адрес RSS комментариев к этому посту
- posted дата в формате unix timestamp
- pubdate дата в формате для http заголовков и RSS
- sqldate дата в формате для sql запросов
- date дата в текущем формате, формат вычисляется из иерархии форматов дат
- excerptdate дата в формате для анонса постов (если задано, иначе вычисляется из иерархии форматов)
- excerptcategories рубрики в html формате, шаблон берется из темы секции анонса
- excerpttags метки в html формате, шаблон берется из темы секции анонса
- categorieslinks рубрики в html формате, шаблон берется из темы секции полного поста
- tagslinks метки в html формате, шаблон берется из темы секции полного оста
- tagnames строка, где через запятую все метки поста
- catnames строка, где через запятую все рубрики поста
- head строка для секции head страницы, включает в себя ссылки на RSS комментариев, javascript
- iconurl адрес иконки
- iconlink адрес иконки
- filelist список фалов поста, шаблон списка берется из темы
- subscriberss ссылка для подписки на RSS комментариев, шаблон берется из темы
- prevnext ссылки на следующий и предыдущий пост, шаблон берется из темы
- commentslink ссылка на комментарии, включает в себя количество комментариев
- templatecomments список комментариев и форма комментирования, шаблон берется из темы
Свойства, текст которых берется из темы не следует вставлять в тему, эти свойства скорее предназначены для технических целей, за некоторым исключением. Исключение относится к ссылкам на категории и метки внутри поста, у которых существует иерархия шаблонов.
Одна из идей тегов в шаблонах - это то, что теги могут иметь собственный шаблон с другими тегами в шаблоне. Получаются вложенные шаблоны другими словами дерево шаблонов.'
← Ранее Как устроена тема
Комментарии (17) на запись “Теги для шаблонов”
Оставить комментарий
В общем, на простейшую тему понадобилось полтора часа - долговато, с предыдущей версией хватало получаса... Впрочем, с опытом станет быстрее... наверное. Основная причина - то, что все шаблоны в одном файле, и не просто в одном файле - а шаблон выводится прямо по месту нахождения. Оно бы вроде и удобно - а на деле жуткие макароны получаются.
Кстати, уточняющий вопрос - если у меня есть и $object.property, и шаблон - как выведется? согласно шаблону, но в месте $object.property? Я это проверял для $post.files, вроде так же для меток и категорий, но это верно для всех секций-свойств или нет? А если не для всех, до для каких - да?
Возможно разгрузил бы шаблон по умолчанию - тогда бы шаблоны был бы работоспособен с самого начала и можно было бы перекрывать только по необходимости своими шаблонами. Как вариант могу предложить мастер создания темы: когда бы базовые шаблоны редактировались в каждый в своем редакторе, а потом вместе собирались, либо вынести наружу шаблон полного поста как самый объем (либо эту фичу сделать выбираемой, например расшрив значение тегов в комментах html, как вариант !--post:posttml--). Принимаются любые пожелания.
Можно как угодно вставлять теги, но надо понимать следующий факт: секции в комментариях заменяются на теги $object.property, и соответствено будет дублирование в генерируемом контенте (в простом случае две одинаковые строки). Для некоторых тегов, у которых отсутствует шаблон по умолчанию, отсутствие секции в комментариях приведет к ошибке компиляции темы. С выходом поддержки шаблонов по умолчанию такие ошибки небудут генерироваться, так как будет откуда взять шаблон.
да, с проверкой я там ошибся... удалил клеакеш, и забыл про это :)
первое (простое) предложение - это сделать все шаблоны как сommontags - т.е. если в шаблоне есть секция и свойство - выводить по шаблону в месте свойства. Ведь в конце-концов, в excert берутся шаблоны из post, так? (commontags, files) Тогда из шаблона поста можно выдвинуть (например, в конец дива поста) шаблон файлов. Сразу радикальное упрощение. Хоть и подходит для малого числа секций. И наследование шаблонов, да...
Еще вопросы:
вот эта конструкция для чего?
<li <!--class1-->class="alt"<!--/class1--> id="comment-$comment.id">, я про class1 секцию.
и почему обязательна секция commentsid?
Найденный шаблон заменяется тегом в том же месте - как ты писал про files можешь распологать в том есте, где тебе удобно - именно там и будет список файлов. это касается абсолютно всех тегов.
класс в комментарии нужен был для чередования классов между четными и нечетными комментариями. Разработчик темы не выполнил именно это задание - выполнение подвисло, яа я потом не стал добваться еисполнения. То есть можно объявить два класса (как вариант пустой класс) и в стилях сделать фон комментариях разным цветом (зеленый/синий).
commentsid нужен для списка задержанных комментариев. По другому я не смог разрулить id для нового списка задержанных комментариев. для валидности html id должны быть в каждом теге уникальные. Вот и пришлось таким странным образом как то указать id списка, так как вариант с поиском id как в меню может не всегда отработать - например перед началом может быть открывающий тег div, или все что угодно. Принимаются любые соображения по поводу исправления такой ситуации.
Шаблон комментариев это пожалуй самый ложный шаблон из всех, например там присутствуют пингбеки которые используются достаточно редко.
Думаю, что подстановка шаблонов по умолчанию будет хорошим подспорьем. Сейчас я занять переделкой модели виджетов, после чего приступлю к шаблону по умолчанию
<!--class1-->class="even"<!--/class1--><!--class2-->class="odd"<!--/class2-->
так?
<!--templatecomments-->
$smth.comments
$smth.moderateform
$smth.pingbacks
$smth.closed
$smth.form
$smth.confirmform
<!--/templatecomments-->
а потом заменять каждый шаблон.
Возможно, это потребует новых классов, зато радикально ускорит подготовку шаблонов - их можно будет делать методом последовательного приближения, вставляя и модифицируя только по одному шаблону за раз.
Сейчас посмтрел - можно будет объявить секцию templatecomments и внутри нее нужную секцию, но соблюдая правила вложенности, если шаблон будет пустой строкой (либо отсутствовать), то будет браться по умолчанию. Тегов для списка комментариев и формы не существует: они показываются в зависсимости от обстоятелств. Для списка - наличие комментариев, для фрмы - открыто ли комментирование.
Думаю последобавления фичи с шаблонами по умолчанияю сделаю несколько демо тем (скорее всего вв документации) разных вариантов деталзации и перекрытия шаблонов
Блоголётчик пишет:
Понятно, что их нет сейчас. Но может стоит сделать? Чисто для удобства разработки.
Может я чето опять не то скажу но однажды пробывал движек сделать, если убрать вопросы защиты то практически доделал в самом начале кода еще не знал что такое cms работал с базами на php, ну вобщем, хотел все теги на странице завернуть в xml мне до сих пор кажется что это супер хотя и говорят что проект не удался но все таки,
прикольно бы получилось это предусмотреть и хоть ккой то набор тегов xml включить, не знаю правильно ли понял, но чтоб можно самому в каком то гуи странице задавать значения и потом в посте достаточно разместить слово в определенный тег и оно приобретет соответствующее значение?
насчет td это да, тоже не одну неделю над ним думал, но не смог понять, понравилась сама идея, что например в поиске потом запрос делают, грузоперевозки(logistic), камаз(avto), 20 тонн(massa) и смотрит именно тонаж средства для грузоперевозок, но не показывает рекламму шин, которые использует камаз и которые весят менее 20 тонн! )
но это оказалось посерьезней чем в книге которую по этому поводу приобрел об этом языке в итоге потом узнал что такое cms и теперь все стало гораздо попрактичнее в плане размещения сайтов и контента на них для меня.
на блогспоте в теме разбираюсь кстати, вот тут ubuntulyb.blogspot я иконку сам приделал и тема там не стандартная там ширина тыща с чем то щас, но может ты не об этом, но про какое то глубокое преобразование тоды да, лучше не связываться с этим, да и какие тоды на этот инструмент возлагать задачи в блоговой системе управления сайтом, что то подумал так толком понять и не смог, поэтому сори за время
набираю бывает на эмоция и ниче с этим поделать не могу