Вопросы и ответы
Вебмастеру
Шаблоны заголовков записей
Дополнительная информация об info-top-файлах.
Шаблоны заголовков реализуются с помощью info-top-файлов. Механизм подключения и использования базируется на type_foreach-файлах, поэтому файлы располагаются в каталоге шаблона type_foreach
.
Для того, чтобы обеспечить выбор шаблона заголовка в админ-панели, их следует разместить в отдельном каталоге type_foreach/info-top/
.
В каталоге type_foreach/info-top/page/
можно разместить файлы только для записей (page).
Учёт типа данных
Условно весь вывод на сайте можно разделить на два типа:
- full — вывод множества записей, например главная, рубрики, метки и т.п.
- page — одиночная страница записи.
Заголовки записей для full и page могут различаться. Более того, у каждой записи, рубрики или любого другого адреса можно выбрать произвольный info-top-файл. Для реализации этой возможности используется алгоритм, где имена файлов имеют предопределенные значения. То есть, если такой файл есть, он будет использован MaxSite CMS. Если нет, то используется «типовой» вариант вывода.
Базовый вывод
В шаблоне может не быть каталоге info-top
. В этом случае используются другие предопределенные type_foreach-файлы. Также эти файлы используются, если был выбран заголовок «Обычный».
type_foreach/info-top-page.php
В этом файле задаётся вывод заголовка одиночной записи. Если его нет, то будет использован стандартный вывод типа page из shared-каталога.
type_foreach/info-top-full.php
Здесь задаётся вывод для full-записей.
type_foreach/info-top-ТИП.php
Можно задать шаблон заголовков для конкретного типа (full-записей), например info-top-category.php
будет использован для вывода рубрик, а info-top-tag.php
для вывода меток. Эти файлы будут иметь более высокий приоритет, чем общий info-top-full.php
.
Каталог info-top
Содержимое этого каталога используется в админ-панели при выборе шаблона заголовков. Сам же вывод (php-код) может размещаться в любом другом месте, например в type_foreach/my-template
(как в Default-шаблоне). Данный приём используется для случаев, когда нужно исключить выбор файла в админ-панели. В любом случае этот вопрос решает вебмастер сам, в зависимости от своих задач.
Каталог type_foreach/info-top/page/
используется только для выбора файлов в админ-панели для одиночных записей. Доступно в MaxSite CMS 102 и выше Сделано это для удобства, чтобы исключить выбор full-файлов в записях.
Поэтому вtype_foreach/info-top/
принято размещать только full-файлы, а вtype_foreach/info-top/page/
— только для page-записей.
Page_out и переменная $p
Вывод записей происходит с помощью шаблонизатора Page_out (shared/stock/page-out/page-out.php
), где переменная $p
является его объектом. Именно поэтому в $p
доступны многочисленные методы этого класса.
Page_out упрощает формирование html-кода. Для этого вначале задаётся формат вывода каждого поля записи (заголовок, рубрика, метки и т.п.), а уже после происходит вывод результата.
В общем виде это выглядит так:
$p->format('ПОЛЕ1', 'html до', 'после');
$p->format('ПОЛЕ2', 'html до', 'после');
$p->format('ПОЛЕ3', 'html до', 'после');
// пример вывода
$p->html('<header class="mar25-b">');
$p->line('[edit][title]');
$p->div_start('t-gray600');
$p->line('[date][view_count][comments_count]');
$p->line('[cat]');
$p->line('[tag]');
$p->div_end('');
$p->html('</header>');
Формат полей
Формат полей позволяет учесть их особенности. Например для поля title
(заголовок записи) можно дополнительно указать обрамлению в виде ссылки на запись.
$p->format('title', '<h1 class="t-gray700">', '</h1>', !is_type('page'));
Для рубрик можно указать разделитель:
$p->format('cat', ' | ', '<span title="' . tf('Рубрика записи') . '">', '</span>');
Полный список форматов для каждого поля можно посмотреть в файле shared/stock/page-out/page-out.php
, либо в примерах info-top-файлов.
$p->format('title', '<h1>', '</h1>', true); // до, после, формировать ссылку
$p->format('date', 'Y-m-d H:i:s', '', ''); // формат даты, до, после
$p->format('cat', ', ', '', ''); // разделитель, до, после
$p->format('tag', ', ', '', ''); // разделитель, до, после
$p->format('feed', 'Подписаться', '', ''); // титул, до, после
$p->format('author', '', ''); // до, после
$p->format('edit', 'Редактировать', '', ''); // титул, до, после
$p->format('read', 'Читать дальше', '', ''); // титул, до, после
// без комментариев, есть комментарии, до, после
$p->format('comments', 'Обсудить', 'Посмотреть комментарии', '', '');
Вывод данных
Для вывода используется метод line
, где поля указываются в квадратных скобках обычным текстом. Таким образом можно произвольно комбинировать их между собой.
Прочий HTML
Методы html
, div_start
и div_end
представляют собой обычный вывод echo
в более удобной оболочке и для лучшей читабельности кода.
Отключение вывода текста записи
И хотя info-top-файлы предназначены в основном для вывода заголовков записи, с их помощью можно управлять выводом контента записи (поскольку это всё тот же Page_out).
Для решения этой задачи, используется файл type_foreach/page-content-full.php
, где перехватывается вывод контента по условию set/get-переменной.
if (mso_get_val('my-page-content-full', true))
{
if ($fn = mso_find_ts_file('type/_def_out/full/units/full-default.php')) require($fn);
}
Соответственно, в самом info-top-файле, где нужно отключить вывод текста записи указывается:
...
mso_set_val('my-page-content-full', false); // отключить вывод дальнейшего текста
Вывод контента
Если необходимо вывести контент в info-top-файле используется один из методов: content()
, content_words()
или content_chars()
.
...
$p->content_chars(200, '', '<p class="mar10-tb">', '...</p>');
...
В данном примере будет выведено 200 первых символов текста.
Вывод миниатюры
При необходимости можно вывести миниатюру записи. Для этого вначале формируется html-код изображения, после чего он выводится как [thumb]
$_width = 400;
$_height = 300;
if ($thumb = thumb_generate($p->meta_val('image_for_page'), $_width, $_height))
{
$p->thumb = '<img class="w100" src="' . $thumb . '" alt="'
. htmlspecialchars($p->val('page_title')) . '">';
$p->thumb = '<a href="' . $p->page_url() . '">' . $p->thumb . '</a>';
}
else
{ // нет миниатюры, формируем картинку-заглушку
$p->thumb = '<a href="' . $p->page_url() . '"><img src="'
. mso_holder($_width, $_height, 'IMGAGE', '#dddddd')
. '" alt=""></a>';
}
...
// вывод
$p->line('[thumb]');
...