Albireo CMS 2025.01.17

Поля страниц

Основные поля записи

ПолеОписаниеПример
titleТэг TITLEtitle: название страницы
descriptionmeta descriptiondescription: описание
announceКраткое описание для вывода на архивных страницахannounce: краткое описание
categoryРубрики через запятую - сайт/category/рубрикаcategory: blog, todo
tagsМетки через запятую - сайт/tags/меткаtags: todo, astro
draftЧерновик. Если вкл, то страница не публикуетсяdraft: +

Дата

ПолеОписаниеПример
dateДата публикацииdate: 2024-02-11
date-editДата редактированияdate-edit: 2024-11-02 14:32
date-pubДата отложенной публикацииdate-pub: 2024-09-26 12:00

Тип страницы

Тип записи — используется для фильтрации вывода, указывается явно при необходимости. У страницы тип можно не указывать.

type: blog            # основной тип записей для вывода на главной, в рубриках и т.д.
type: system          # системный тип

Если указан type: system, то на странице не будут выводиться комментарии, блок другие записи, а также страница не будет выводиться в архивах sitemap и sitemap.xml. Фактически это будет эквивалентно таким полям:

comments: -
sitemap: -
stat: -
other-pages: -

В архивах sitemap вывод осуществляется только для type: blog. Остальные типы игнорируются. В sitemap.xml выводятся все страницы, кроме type: system и sitemap: -.

Адреса страниц

ПолеОписаниеПример
slugАдрес страницыslug: about
slug-patternДополнительный паттерн адреса в формате preg_math()slug-pattern: welcome
methodHTTP-метод страницы (для роутинга): POST, AJAX, GET, ALL и т.д.method: POST

Если у страницы нет поля slug, то оно будет создано автоматически на основе имени файла и с учетом вложенности каталогов. Если имя файла начинается с цифр и точки, то они будут удалены, например если имя файла 01.about.php, то slug будет равен about. С помощью цифр вы можете сортировать файлы в удобном порядке.

Изображения

ПолеОписаниеПример
image-largeИзображение записиimage-large: [UPLOADS_URL]file.webp
images-dirКаталог изображений (используется в админке)images-dir: [UPLOADS_URL]images/
image-noviewОтключить вывод миниатюрыimage-noview: +

Комментирование

Если type: system, то комментарии не выводятся. Для комментариев нужно включить use.alpine: +.

ПолеОписаниеПример
commentsВывод комментариевcomments: +
comments-pubСкрыть уже опубликованные комментарииcomments-pub: -

Карта сайта sitemap и sitemap.xml

ПолеОписаниеПример
sitemapУбрать страницу из карты сайтаsitemap: -
sitemap-changefreqПараметр changefreqsitemap-changefreq: weekly
sitemap-priorityПараметр prioritysitemap-priority: 0.5

Статистика

ПолеОписаниеПример
statВключить подсчет статистики посещенийstat: +
stat-startЧисло, которое прибавляется к счетчику просмотровstat-start: 122

Обработка текста

ПолеОписаниеПример
parserПарсер текстаparser: textsimple
compressСжатие итогового html-кода страницыcompress: +
protect-preЗащищает html-содержимое PRE и CODEprotect-pre: +
content-separateОбработка контента отдельно от layout-файла. Лучше не использовать без особой необходимостиcontent-separate: +
text-functionФункции для постобработки html-кода через запятуюtext-function: trim, myText

Формат

ПолеОписаниеПример
pagination-formatФормат пагинацииpagination-format: [NBSP] - < ?= lang('page') ? >; %d
catTitleFormatФормат TITLE для рубрикcatTitleFormat: < ?= lang('Category') ? >: «%s»

Уровень доступа

ПолеОписаниеПример
user-levelУровень доступа к странице (php-код прописывается в теле страницы)user-level: admin

PHP-функции

ПолеОписаниеПример
require[]подключить php-файлы перед выводом страницыrequire[]: myfile.php
triggers[]Функция-триггер выполняется перед выводом страницы в pageOut()triggers[]: tagHead

Автоматически создаваемые поля

ПолеОписание
page-urlПолный адрес страницы на основе slug
page-url-fullПолный текущий адрес (может отличаться от адреса slug, например в метках)
current-pathПолный url к текущему каталогу файла страницы внутри PAGES_DIR
subdirsПодкаталоги относительно PAGES_DIR (всегда разделены символом /). Если это «.» то это корень PAGES_DIR
this-fileПолное имя текущего файла
uniqidУникальный идентификатор страницы, привязанный к slug
date.unixМетка времени Unix создания страницы на основе поля date
date-edit.unixМетка времени Unix редактирования страницы на основе поля date-edit
date-pub.unixМетка времени Unix отложенной публикации страницы на основе поля date-pub
link-for-editАдрес для редактирования страницы в админ-панели

Шаблон

Шаблон также можно задать в файле конфигурации config.php.

ПолеОписаниеПример
templateкаталог шаблона в templates/template: default

Модульные сетки

Модульные сетки в виде файлов размещаются в каталоге шаблона layout.

ПримерОписание
layout: default.phpВывод сайта по умолчанию
layout: sidebar.phpСайдбар справа
layout: empty.phpВывод только тела страницы
layout: full-width.phpВывод на всю ширину браузера
layout: clean.phpТолько контент без шапки и подвала
layout: doc1.phpВывод документации №1
layout: doc2.phpВывод документации №2
layout: sidebar-float.phpБоковой «плавающий» сайдбар
layout: sidebar-left.phpЛевый сайдбар
layout: landing.phpДля лендингов без шапки и подвала

Блоки для модульных сеток

ПолеОписаниеПример
layout-content-startТекст перед контентомlayout-content-start: текст
layout-content-endТекст после контентаlayout-content-end: текст
layout-startТекст в самом начале шаблонаlayout-start: текст
layout-endТекст в самом конце шаблонаlayout-end: текст

Шапка и подвал

Шапки и подвалы размещаются в каталоге шаблона modules. Удобней задавать параметры шапки в конфигурации сайта сразу для всех страниц. Указанные поля могут использоваться в некоторых компонентах шапки.

ПолеОписаниеПример
footersПодвалfooters: footers/footer1.php
headersШапкаheaders: headers/header1.php, headers/header2.php
headers.titleТекст в шапкеheaders.title: текст в шапке
headers.subtitleПодстрочный текст в шапкеheaders.subtitle: подстрочный текст
headers.logoИзображения логотипа в шапкеheaders.logo: [UPLOADS_URL]images/logo.png
headers.namesiteНазвание сайта для шапкиheaders.namesite: Albireo CMS
headers.logo.widthШирина логотипаheaders.logo.width: 120
headers.logo.heightВысота логотипаheaders.logo.height: 120

Тэг HTML

Ключ поля может быть любым: html[ключ]: значение сформирует <html ключ="значение">.

ПолеОписаниеПример
html[lang]Язык сайтаhtml[lang]: ru
html[prefix]Дополнительный префикс для OGPhtml[prefix]: og: https://ogp.me/ns#

Секция HEAD

ПолеОписаниеПример
head[]Произвольный html для HEADhead[]: html-код
head-meta[]Формирование META-NAME-CONTENThead-meta[robots]: noindex
<meta name="robots" content="noindex">
head-lang[]Формирование LINK-REL-HREFLANG, альтернативная языковая версия страницыhead-lang[ключ]: адрес
<link rel="alternate" hreflang="ключ" href="значение">
http-equiv[]Формирование META-HTTP-EQUIVhttp-equiv[Cache-Control]: max-age=300, must-revalidate
<meta http-equiv="Cache-Control" content="max-age=3600, must-revalidate">
head.faviconСниппет с фавиконкой сайтаhead.favicon: favicon
head.counterСниппет со счётчиком Googlehead.counter: counter

Секция BODY

ПолеОписаниеПример
lazy[]Произвольные данные перед закрывающим BODYlazy[]: html-код
bodyПроизвольные данные для тэга BODYbody: class="bg-red100"

Управление конфигурацией

ПолеОписаниеПример
setConfig[]Замена значения из конфигурации сайтаsetConfig[siteTitle]: новый заголовок сайта

Работа с CSS

ПолеОписаниеПример
css.themeПодключение как внешний css-файл link rel="stylesheet" из css/themes/css.theme: berry.css
css.style[]Произвольные css-правила для <STYLE> </STYLE>css.style[]: li {margin-bottom: 20px}
css.root[]CSS-переменные, префикс «--» добавится автоматически <STYLE> :root { } </STYLE>css.root[body-font-family]: Lora
css.head[]Подключение как внешний css-файл из assets/css в секцию HEADcss.head[]: my.css
css.lazy[]Подключение как внешний css-файл из assets/css в конце BODYcss.lazy[]: my.css
css.fontsПодключение как внешний css-файл из assets/css/fonts/ в секции HEADcss.fonts: lora.css
css.fonts[]Подключение как внешние css-файлы из assets/css/fonts/ в секции HEADcss.fonts[]: lora.css
css.fonts.lazyПодключение как внешний css-файл из assets/css/fonts/ в конце BODYcss.fonts.lazy: lora.css, exo2.css
css.fonts.lazy[]Подключение как внешний css-файл из assets/css/fonts/ в конце BODYcss.fonts.lazy[]: lora.css
css.fstyleПодключение содержимого файла из assets/css в <STYLE> </STYLE>css.fstyle: my.css, other.css
css.fstyle[]Подключение содержимого файла из assets/css в <STYLE> </STYLE>css.fstyle[]: my.css
css.head.url[]Произвольные (полный путь) css-файлы для HEADcss.head.url[]: https://site.com/style.css
css.lazy.url[]Произвольные (полный путь) css-файлы в конце BODYcss.lazy.url[]: https://site.com/style.css

Работа с JS

ПолеОписаниеПример
js.head[]Подключение как внешние файлы из assets/js в секцию HEADjs.head[]: my.js
js.lazy[]Подключение как внешние файлы из assets/js в конце BODYjs.lazy[]: my.js
js.lazyПодключение внешнего файла из assets/js в конце BODYjs.lazy: my.js
js.head.url[]Подключение внешнего файла (полный путь) HEADjs.head.url[]: https://site.com/my.js
js.lazy.url[]Подключение внешнего файла (полный путь) в конце BODYjs.lazy.url[]: https://site.com/my.js

Прочие библиотеки

Библиотека сама определяет свой способ подключения и использование. Подключение библиотек происходит в каталоге шаблона parts.

ПримерОписание
use.alpine: +Alpine JS
use.alpine.old: +alpine.js ver. 2.8.2
use.imfont: +Иконки IM
use.tiny-slider: +Tiny-slider https://github.com/ganlanyuan/tiny-slider
use.animate: +Анимация CSS https://animate.style/
use.bootstrap-icons: +Иконки Bootstrap в конце BODY https://icons.getbootstrap.com/
use.bootstrap-icons-head: +Иконки Bootstrap в HEAD https://icons.getbootstrap.com/
use.bootstrap4: +Bootstrap CSS 4.x - css-файл в HEAD, js-файл в BODY
use.bootstrap5: +Bootstrap CSS 5.x - css-файл в HEAD, js-файл в BODY
use.clipboard: +Буфер обмена https://clipboardjs.com/
use.cssgram: +Фильтры для изображений https://una.github.io/CSSgram/
use.fontawesome5: +Font Awesome Free 5.15.4 https://fontawesome.com
use.glightbox: +Лайтбокс https://github.com/biati-digital/glightbox
use.grid-gallery: +Grid-gallery https://github.com/jestov/grid-gallery
use.highlight: +Подсветка кода https://highlightjs.org/
use.splitjs: +Разделение блоков https://split.js.org/
use.animejs: +Анимация JS https://animejs.com/
use.jquery2: +jQuery 2.x в HEAD
use.jquery3: +jQuery 3.x в HEAD
use.hover-css: +Hover.css http://ianlunn.github.io/Hover/
use.fslightbox: +Лайтбокс Fullscreen Lightbox
use.scrolltotop: +Скроллинг вверх
#  Настройка scrolltotop
use.scrolltotop: +

# классы кнопки
scrolltotop.class: hide-print hide-tablet pos-fixed pos20-r pos20-b bg-primary400 hover-bg-primary600 t-white hover-t-white cursor-pointer t20px t-bold icon-square rounded transition-var animated b-hide-imp

# классы анимации
scrolltotop.in: animation-zoom
scrolltotop.out: animation-zoomout

# отступ срабатывания сверху
scrolltotop.offset: 300

# Символ кнопки
scrolltotop.icon: ▲

Open Graph Protocol

Лучше задать в config.php. OGP формируется через <meta property="ключ" content="значение">.

html[prefix]: og: https://ogp.me/ns#
ogp[og:site_name]: название сайта
ogp[og:type]: article
ogp[og:url]: [page-url-full]
ogp[og:title]: [title]
ogp[og:description]: @if [announce] @else [description]
ogp[og:image]: @if [image-large] @else '[UPLOADS_URL]ogp-default.jpg

Навигация автоматическая

ПримерОписание
nav: +Автоматическая навигация в конце страницы. Сортировка по дате публикации
nav-top: +Аналогично, только в начале страницы

Навигация с указанием адресов

Для разделения адресов используется запятая. Навигация выводится в конце страницы next-prev или в начале next-prev-top

ПримерОписание
next-prev: [config-dir]order-my.phpПорядок адресов хранится в файле конфигурации
next-prev: astronomy/a1, astronomy/a3Указание страницы «ДО» и «ПОСЛЕ»
next-prev: ,astronomy/a3Указание только страницы «ПОСЛЕ»
next-prev: astronomy/a1,Указание только страницы «ДО»
next-prev-top: astronomy/a1, astronomy/a3Указание страницы «ДО» и «ПОСЛЕ»
next-prev-top: ,astronomy/a3Указание только страницы «ПОСЛЕ»
next-prev-top: astronomy/a1,Указание только страницы «ДО»

Иерархия страниц

Иерархическая структура, где путь указывается через точку — это уровень вложенности. В данном примере будут найдены все страницы, где у hierarchy стоит astro..

ПримерОписание
hierarchy: astro.04Группа, вложенность и порядок
hierarchy-title: <div class="t130">Ещё записи по теме</div>Заголовок блока

Блок «Похожие записи»

Записи случайно (кроме system), но учитывается текущая рубрика category и последовательные условия:

  • Если записей меньше 3, то учитывается только текущая tags:
  • Если записей меньше 3, то учитывается только текущая type:
  • Если записей меньше 3, то ничего не выводится
ПримерОписание
other-pages: -Отключить блок
other-pages: Похожие записиЗаголовок блока
other-pages: Не выводить заголовок блока
other-pages: [NBSP]Если нужно сохранить пустой заголовок ради отступа

Навигация по странице

Вывод навигации по статье. Формируется список из заголовков H2. Здесь не используются поля, а только свой блок и сниппет. Для этого там, где нужно вывести навигацию нужно прописать код:

<div class="article_navigation"></div>
<?= snippet('article-navigation-flat') ?>

Если нужно изменить тэг заголовка, то он указывается во втором параметре, например поиск H4:

<div class="article_navigation"></div>
<?= snippet('article-navigation-flat', 'h4') ?>

Сниппет article-navigation-flat создаёт «плавающий» блок навигации. Если такой блок не подходит, то можно использовать сниппет article-navigation для создания блока в виде правой колонки:

<div class="article_navigation"></div>
<?= snippet('article-navigation') ?>

Если нужно заменить заголовок блока, то он указывается в третьем аргументе:

<div class="article_navigation"></div>
<?= snippet('article-navigation-flat', 'h2', 'Навигация') ?>

Языковой перевод. Мультиязычность

Для перевода используется текущий язык браузера. Код языка определяется как стандарт ISO 639.

# можно использовать lang() в полях страницы
title: <?= lang('Categories') ?>

# или
# title и description по умолчанию
title: Условия использования и копирайты
description: Условия использования и копирайты

# языковой перевод для каждого языка
# указывается в формате lang.ЯЗЫК[ПОЛЕ]: перевод
lang.en[title]: Terms of Use and Copyright
lang.uk[title]: Умови використання та копірайти

lang.en[description]: Terms of Use and Copyright
lang.uk[description]: Умови використання та копірайти

html[lang]: <?= getConfig('userLang') ?>  # устанавливает язык посетителя HTML

После изменения поля, старое значение сохраняется _odd.ПОЛЕ. Получить его можно через getPageData(), например:

pr(getPageData('title')); // Terms of Use and Copyright
pr(getPageData('_old.title')); // Условия использования и копирайты

Подробнее см. Мультиязычность в Albireo CMS.

Порядок записей для sortArray()

В некоторых случаях можно задать собственный порядок записей с помощью поля order. Он может использоваться функцией sortArray(), например:

$files = sortArray($files, 'order', 'number-asc');