Современная, быстрая и удобная система управления сайтом

Type-файлы. Типы данных в MaxSite CMS

Архив записейКомментарии: 3Просмотров: 2601

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

В MaxSite CMS цикл вывода находится в type-файлах, которые «скрыты» от вебмастера. Однако если вдруг возникла ситуация, когда нужно поменять формат вывода именно внутри цикла, то вместо корректировки сложного type-файла, MaxSite CMS предоставляет механизм в виде использования type_foreach-файлов.

Как вы уже знаете из предыдущих статей (раз, два, три), type-файлы имеют «вставки» в виде type_foreach-файлов. Изначально идея была в том, чтобы предоставить вебмастеру возможность произвольно менять формат вывода непосредственно в цикле вывода (foreach - именно поэтому такое название). Но постепенно мы расширили идею и теперь type_foreach-файлы позволяют менять вывод и в других частях type-файлов.

Скажу больше, в последних версиях системы с помощью type_foreach-файлов можно менять даже параметры получения страниц (файлы ...-mso-get-pages.php). Для пользователей WordPress - это невиданнейшая наглость! :)

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

Заготовки type_foreach-файлов находятся в default-шаблоне в каталоге type_foreach. Все они начинаются в префикса «_» (подчеркивание), которое после копирования в свой шаблон, нужно убрать. Стандартно type_foreach-файлы содержат тот же самый код вывода, что и в type-файлах.

Имя type_foreach-файла состоит из имени type-файла плюс что-то «поясняющее». Например, файл page-do.php подключается до начала вывода записи, а page-posle.php - после.

Основной цикл вывода содержится в type_foreach-файлах, совпадающих с именем type-файла. Например type/page.php (type-файл) - type_foreach/page.php.

Для использования type_foreach-файлов нужно сделать в своём шаблоне каталог type_foreach, скопировать в него необходимые type_foreach-файлы, не забыв удалить «_» в начале. Всё. Дальше MaxSite CMS их автоматически «подхватит».

Теперь рассмотрим один type_foreach-файл для примера. Пусть это будет type_foreach/page.php (вывод одиночной записи). Скопируем в свой шаблон и откроем его.

В коде мы увидим вывод html-кода и некоторые php-функции, о значении которых, несложно догадаться. Например mso_page_title() - вывод заголовка записи; mso_page_cat_link() - вывод рубрик записи; mso_page_tag_link() - метки; mso_page_date() - даты и т.п.

С помощью этих функций можно сформировать вывод с учетом некоторых особенностей. Например, на самой странице нет смысла выводить заголовок в виде ссылки на себя же. Поэтому в функции mso_page_title() один из параметров ($link) устанавливается в false.

Конечно же, вебмастеру доступны и «голые» исходные переменные, например заголовок это $page_title, короткая ссылка - $page_slug и т.д.

Часто в файлах встречается закомментированная функция pr(), например - pr($page). Это функция отладки. Если убрать комментирование, то вы увидите на странице форматированный вывод указанной переменной. В нашем случае это будет массив, ключи которого после extract($page) превращаются в самостоятельные переменные. Таким образом вебмастер может визуально увидеть что доступно для использования.

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

Теперь несколько советов.

  • В своих публичных шаблонах никогда не используйте type-файлы. Я уже писал, что type-файлы могут поменяться в будущих версиях MaxSite CMS и пользователи такого шаблона окажутся лишенными новых возможностей. Если же вы делаете шаблон на заказ, то type-файлы допустимо менять, правда оправдываться перед заказчиком придется уже вам.
  • Не копируйте в свой шаблон все type_foreach-файлы. Берите только те, которые действительно меняете.
  • Перед тем, как решить использовать type_foreach-файлы, проверьте, возможно задачу можно решить с помощью обычного CSS: в MaxSite CMS практически каждый блок вывода имеет свой class.
  • В type_foreach-файлах можно смело использовать опции и, тем самым, создавать различные комбинации вывода данных. На быстродействии это никак не скажется, поскольку все опции автоматически кэшируются в памяти.

Иногда бывают задачи, которые можно решить без использования type_foreach-файлов. В предыдущей статье мы рассматривали как сделать вывод отключаемого рекламного блока. Мы его расположили в main-start.php и тем самым сделали вывод на всех страницах сайта. Но, заказчик может захотеть видеть такой блок только на некоторых страницах сайта, например только в рубриках и странице одиночной записи.

Теперь, зная о type_foreach-файлах, верстальщик разместит код вывода именно в них (category-do.php и page-do.php). Это будет хорошее решение, но не совсем точное.

Когда нужен вывод в зависимости от разных типов данных, то можно использовать функцию is_type('тип') в самом шаблоне. Например так:

# если это рубрика или одиночная страница
if (is_type('category') or is_type('page'))
{
 
... тут вывод ...
 
}

В данном случае нам достаточно будет использовать один код вывода под разные условия. При этом, я могу еще посоветовать выносить какие-то общие блоки в отдельные файлы. Скажем код вывода рекламы можно было бы разместить в файле шаблона adv-blok.php (где и указывать HTML-вывод, получение опций, прочие условия) и подключать его одной строчкой:

...
<div class="content-all">
<?php require(getinfo('template_dir') . 'adv-blok.php'); ?> 
...

Такой подход упрощает шаблон и делает его читабельней и удобней для дальнейшей поддержки, а пользователю не придётся разбираться с дублирующимся кодом в type_foreach-файлах.

В следующей стетье я расскажу о других возможностях MaxSite CMS для разработчиков шаблонов.

Комментариев: 3 RSS

2Аноним24-11-2010 10:15

Какой type_foreach-файл использовать, если нужно поменять способ вывода всплывающей подсказки для плагина категорий? Например, в данный момент я это реализую за счет изменения файла application/maxsite/common/common.php: вместо строчки

$link = '<a href="' . $url . '" title="' . mso_strip($title) . '">';
вставляю
$link = '<a href="' . $url . '" title="' . mso_strip($descr) . '">';
чуть ниже (после объявления $descr).

3Аноним24-11-2010 10:50

Type_foreach-файл здесь не при чём. Это уровень плагина и системы.

Оставьте свой комментарий!

Комментарий будет опубликован после проверки

Вы можете войти под своим логином или зарегистрироваться на сайте.

(обязательно)