• Шаблоны для вашего сайта
  • Сделать сайт
  • Реклама
  • Berry CSS
  • Albireo Framework
  • Бесплатный HTML-курс
  • Telegram-канал
  • Обратная связь
MaxSite.org
О создании сайтов и не только
Создание сайтов под ключ (Украина) →
Вход
×
или зарегистрироваться

Учимся работать с шаблоном MF. Настраиваем заголовки записей

Шаблоны для MaxSite CMSПросмотров: 1379Комментарии: 07 июля 2021 г.

Часто стоит задача изменить вывод заголовков записей. В основном это требование дизайна или пожелания клиента. Например кто-то не хочет видеть в заголовках записей метки и автора записи. Также может понадобиться поменять расположение элементов: скажем вначале дату, а потом рубрики, или наоборот. Или использовать другие иконки. Понятно, что очень сложно учесть все возможные варианты — их будет сотни, поэтому такие вещи в MaxSite CMS принято всё-таки решать индивидуально в каждом шаблоне.

Сегодняшняя статья пригодится не только клиентам MF, но и всем пользователям MaxSite CMS — файлы шаблонов заголовков у них одинаковые. Эти файлы находятся в каталоге type_foreach в подкаталоге info-top. Здесь размещены файлы для full-записей (рубрик, меток, главная и т.д.), а в подкаталоге page файлы для одиночных записей. Такое разделение используется только для удобства выбора файла в админ-панели.

Для начала расскажу что такое type_foreach-файлы.

Когда нужно вывести какую-то запись (или записи), то вначале MaxSite CMS делает запрос к базе данных и получает их массив. После этого запускается цикл вывода foreach (это стандартный цикл в PHP). Внутри него происходит вывод данных каждой записи. Схематично это происходит примерно так:

$pages = mso_get_pages(); // получили записи для вывода
 
foreach ($pages as $page) {
	// здесь выводим каждую записи
	echo '<h1>' . $page['page_title'] . '</h1>';
	... и т.д.
}

Чтобы поменять вывод записи когда-то давно нужно было редактировать каждый такой php-файл: для одиночной записи, вывод рубрик, вывод меток и т.д. На самом деле эта задача ещё сложней, поскольку часто используются условия вывода: например для одиночной записи не нужно выводить ссылку-заголовок, а при выводе рубрики она нужна. Или проверять наличие меток у записи и если они есть, то оборачивать все метки каким-то дизайнерским div-блоком. Такой вывод происходит в type-файле: page, home, category, tag и т.д.

Поскольку это достаточно сложный php-код, то это под силу только вебмастеру. Ну и кроме того, это позволяло получить в шаблоне только один вариант вывода.

Чтобы обойти это ограничение я придумал вариант, когда непосредственный вывод данных записи (внутри type-файла) выносится в отдельный php-файл. Такие файлы называются type_foreach-файлами. Эти файлы как раз и подключаются в цикле foreach — отсюда и их название.

$pages = mso_get_pages(); // получили записи для вывода
 
foreach ($pages as $page) {
	// здесь выводим каждую записи
	
	if ($fn = mso_page_foreach('page')) {
		require $fn;
	} else {
		// стандартный вывод
		echo '<h1>' . $page['page_title'] . '</h1>';
		... и т.д.
	}
}

В данном примере будет подключен type_foreach-файл page.php, где размещается вывод одиночной записи.

Однако чаще всего стоит задача поменять не весь вывод (он всё-таки достаточно сложный), а только вывод заголовков. Для этого в рамках type_foreach-файлов выделена группа info-top-файлов, которая подключается в зависимости от выбора в админ-панели:

То есть когда вы здесь выбираете шаблон заголовков, то MaxSite CMS автоматом подключит info-top-файл в цикле вывода. Теперь вам не нужно разбираться в сложном type-файле: если стоит задача поменять формат вывода, то мы будем работать с достаточно простым php-файлом.

Кроме того, такой подход позволяет создавать множество заголовков для одного шаблона. Например вы хотите сделать запись, где задать какой-то особый вариант вывода заголовка, например с другим размером шрифта и иконками. Достаточно будет сделать новый info-top-файл и потом выбрать его при редактировании записи.

Что представляет из себя info-top-файл?

Это обычный php-код, что в свою очередь делает их более сложными для новичков. С другой стороны, в них используется вывод через шаблонизатор Page_Out, который вы уже используете в юнитах только в виде php-функций. Рассмотрим для примера info-top-файл page.php:

$p->format('edit', '<i class="im-edit t-gray600 hover-t-gray950" title="Edit page"></i>', '<div class="b-right mar10-t">', '</div>');
 
$p->format('title', '<h1 class="t-gray800 t220 mar10-b">', '</h1>', false);
 
$p->format('date', 'j F Y г.', '<time class="mar10-l b-right im-calendar" datetime="[page_date_publish_iso]">', '</time>');
 
$p->format('cat', ', ', '<span class="im-bookmark mar20-r" title="' . tf('Рубрика записи') . '">', '</span>');
  
$p->format('view_count', '<span class="im-chart-bar mar20-r">' . tf('Просмотров') . ': ', '</span>');
 
$p->format('comments_count', '<span class="im-comments mar20-r">' . tf('Комментарии') . ': ', '</span>');
 
$p->format('tag', ' / ', '<div class="im-tags mar5-t" title="' . tf('Метка записи') . '">', '</div>');
 
$p->html('<header class="mar30-t mar20-b">');
    $p->line('[edit][title]');
    $p->div_start('t-gray600 t90 b-clearfix');
    $p->line('[cat][view_count][comments_count][date]');
    $p->line('[tag]');
    $p->div_end('');
$p->html('</header>');

Здесь $p — готовый объект Page_Out — поэтому мы сразу используем его методы. Вывод данных происходит в методе line, где в аргументе передаётся строка с нужным форматом вывода. Например [cat] заменится на рубрики записи, [view_count] выведет количество просмотров записи, [title] — это заголовок, а [edit] сформирует ссылку на редактирование записи (если вы автор).

Метод html используется для вывода произвольного HTML-кода. Методы div_start и div_end формируют обычные тэги DIV.

Формально нам совершенно не обязательно использовать эти методы, поскольку они легко могут быть заменены обычным echo. Но мы их используем ради более понятного кода, чтобы не смешивать PHP и HTML в одну кучу.

С помощью метода format задаётся формат вывода каждого элемента. Первым аргументом мы указываем для какого элемента задаётся формат, а потом уже непосредственно сам формат вывода.

Например для количества просмотров view_count можно указать текст ДО и ПОСЛЕ:

$p->format('view_count', '<span class="im-chart-bar mar20-r">' . tf('Просмотров') . ': ', '</span>');

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

В целом я согласен, что работа с php-кодом требует некоторой подготовки, но по другому это просто не работает. Я оставлю ссылку на документацию, где приведено более полное описание.

Шаблоны заголовков могут быть достаточно сложными, особенно, если используется формирование миниатюры. Также есть некоторые тонкости формирования колоночного вывода: здесь выводится и часть текста записи, а также есть завязка на css-класс контейнера — он используется, чтобы организовать flex-сетку. Для новичков это достаточно сложные вещи, поэтому лучшим вариантом будет использовать уже существующий файл и подредактировать его под свою задачу.


Создание сайтов (Украина) →
База SQLite и основы SQL. Часть 1
Учимся работать с шаблоном MF. Модули главной
twitter.com facebook.com
Другие записи сайта
Шаблоны текста с помощью Punto Switcher
Шаблоны текста с помощью Punto Switcher
Анализатор кода phpXplorer
Анализатор кода phpXplorer
PHP-роутинг (Routing) для новичков
PHP-роутинг (Routing) для новичков
Немного о поисковой оптимизации
Немного о поисковой оптимизации
MaxSite CMS и CodeIgniter
MaxSite CMS и CodeIgniter
Учимся работать с шаблоном MF. Модули главной
Учимся работать с шаблоном MF. Модули главной
Оставьте комментарий!

Комментарий будет опубликован после проверки. Вы соглашаетесь с правилами сайта.

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

Навигация
  • Шаблоны для MaxSite CMS 22
  • jQuery и JavaScript 6
  • Java и Android 5
  • PHP/ООП 25
  • SQL 17
  • Albireo Framework 11
  • Berry CSS 7
  • CSS, HTML, LESS, SASS 23
  • PHP 37
  • Тайм-менеджмент 9
  • Софт 37
  • SEO 13
  • Git. GitHub 3
  • CodeIgniter 5
  • Landing Page 3
  • Alpine.js 14
  • Фильмы 2
  • Дневник 55

Здесь можно заказать создание сайта (только Украина), шаблона или лендинга. Также вы можете выбрать готовые шаблоны для MaxSite CMS по небольшой цене. Также можно купить отдельные модули, компоненты для вашего сайта.

MaxSite.org
Как создать свой сайт

Услуги по созданию сайтов, блогов, лендингов
Обратная связь • Реклама на сайте
Карта сайта
Мои проекты
  • Шаблоны для вашего сайта
  • Заказать создание сайта
  • MaxSite CMS
  • Berry CSS (CSS Utilities)
  • Albireo Framework
  • UniCSS (Universal Atomic CSS)
  • Landing Page Framework
  • Бесплатные НТML-курсы
Ссылки
  • Telegram-канал
  • Github
  • Twitter
  • Telegram-бот
  • RSS
© MaxSite.org, 2006-2022. Работает на MaxSite CMS | Время: 0.2618 | SQL: 20 | Память: 4.61MB | Вход