Поля страниц
Общие принципы
Поле задается в виде ключ: значение
. После «:» нужно указать пробел.
Поле может быть boolean «вкл/выкл».
- выключить:
0
,-
,false
- включить:
1
,true
,+
и любой другой текст
Если в начале строки перед именем поля стоит символ «#», то эта строка игнорируется. Используйте эту возможность для создания комментариев.
# title: это строка-комментарий title: а это реальное поле
Каждое значение поля обрезается на пробелы, поэтому если стоит задача указать начальный или конечный пробел, то используете заменитель [NBSP]
:
title: Заголовок с пробелами в конце [NBSP]
В некоторых полях можно использовать //
в качестве заменителя переноса строки \n
.
announce: первая строка //вторая строка //третья строка
Если нужно, то в полях можно использовать HTML.
announce: <h1>первая строка</h1><p>вторая строка</p><p>третья строка</p>
Предопределённые замены в полях
Используйте их в значениях, чтобы упростить код:
-
[SITE_URL]
— адрес сайта -
[UPLOADS_URL]
— адрес к каталогу uploads -
[SERVICE_DIR]
— полный путь к сервисному каталогу -
[CONFIG_DIR]
— полный путь к конфигурационному каталогу -
[NBSP]
— html-пробел -
[EOL]
— заменяется на «\n»
Например:
image-large: [UPLOADS_URL]default.webp
Замены полей
Поля Albireo CMS поддерживают автозамены на другие поля. Для этого используются квадратные скобки. Например:
title: Название страницы description: [title]
В данном примере поле description
примет тоже значение, что и поле title
.
Пример:
title: Ихтиозавры slug: dinosauria/[title]
Здесь адрес страницы будет совпадать с его заголовком «dinosauria/Ихтиозавры».
Также можно создавать условия замены полей:
# исходные поля поле1: значение поле2: что-то # если есть поле1, то присваиваем его значение, если нет, то используем дефолт поле3: @if [поле1] @else 'дефолтное значение' # если есть поле1, то используем его, если нет, то поле2 поле4: @if [поле1] @else [поле2]
С помощью условных полей, можно создавать поля, подстраивающиеся под разные условия.
Автоматически создаваемые поля
Albireo CMS будет автоматически создавать некоторые поля. В большинстве случаев они используются при программировании.
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: адрес для редактирования страницы в админ-панели
PHP в полях
В полях можно использовать обычный php-код, который возвращает данные через echo
:
title: <?php echo 'Hello!'; ?> title: <?= lang('Sitemap') ?> pagination-format: [NBSP] - <?= lang('page') ?> %d title: <?= CURRENT_URL['segment1'] ? lang('Tag') . ': «' . CURRENT_URL['segment1'] . '»' : lang('Tags') ?>
Просмотр данных страницы
При программировании страницы порой нужно посмотреть текущие данные страницы. Для этого используйте функцию getPageData()
, которая получает данные текущей страницы. Для вывода в браузер используется отладочная функция pr()
.
В произвольном месте страницы пропишите:
<?php pr(getPageData()); ?>
Вы увидите массив примерно такого вида:
Array ( [html[lang]] => ru [html[prefix]] => og: https://ogp.me/ns# [parser] => textsimple [compress] => + [protect-pre] => 1 [stat] => - [comments] => - [headers] => [footers] => [css.theme] => berry.css [css.fstyle] => doc.css [headers.title] => MAXSITE.ORG [headers.subtitle] => Сайт вебмастера ... и т.д.
Это данные (поля) текущей страницы. Если нужно получить значение какого-то поля, то его можно указать в качестве аргумента getPageData()
.
<?php pr(getPageData('title')); ?>
Множественные поля
Поля могут содержать квадратные скобки, например:
css.style[]: hr.red {margin: 0 10px} css.style[]: hr.green {margin: 0 10px} css.style[]: hr.blue {margin: 0 10px}
Поскольку поля должны быть уникальными (по сути это ключи php-массива), то система автоматически проставит уникальные индексы, что будет эквивалентно примерно такой записи:
css.style[-19]: hr.red {margin: 0 10px} css.style[-20]: hr.green {margin: 0 10px} css.style[-21]: hr.blue {margin: 0 10px}
Такие поля используются для двух целей.
Первая — это создание массива одномерных элементов. Скажем в этом примере шаблон сгруппирует все поля css.style[]
в единый css-код.
Вторая цель — это формирование сложного массива вида поле[ключ]: значение
. Например формирование OGP (Open Graph Protocol):
ogp[og:site_name]: Website on Albireo CMS ogp[og:type]: article ogp[og:url]: [page-url-full] ogp[og:title]: [title]
Для формирования итогового кода можно использовать функцию getKeysPageData()
, которая по шаблону сформирует корректный html-код для каждого поля:
echo implode(getKeysPageData('ogp', '<meta property="[key]" content="[val]">'));
Рекомендации созданию своих полей страниц
Собственные поля нужны для того, чтобы управлять страницей под свою задачу. Формально вы можете использовать любые поля, но будет лучше избегать уже предопределённых в Albireo CMS полей. Часть из них используется на уровне «ядра», а часть на уровне шаблона
Если группировка полей нужна только для визуального восприятия, то можно использовать в качестве разделителя -
, _
, .
, :
, #
, пробел и т.п.
field-first: первый field-second: второй field_first: первый field_second: второй field.first: первый field.second: второй # обратите внимание, что в ключе после «:» нет пробела — иначе это будет именем поля field:first: первый field:second: второй field#first: первый field#second: второй field first: первый field second: второй
В теле страницы получить значение поля можно с помощью getPageData()
.
title: заголовок ... <?= getPageData('title') ?>
Многие функции Albireo CMS позволяют автоматически получать значения полей для своей работы.
Загрузка данных страницы из отдельного файла
Поля страницы могут быть заданы как файл с php-массивом, аналогичному секции defaultPageData
в config.php
. Файл следует разместить в каталоге config/page-data
. После этого его можно указать в поле file-page-data
:
file-page-data: my.php
— где my.php
это config/page-data/my.php
, например такого содержания:
<?php if (!defined('BASE_DIR')) exit('No direct script access allowed'); return [ 'css.fstyle' => 'design1.css', 'headers' => 'headers/header1.php', ];
Это будет эквивалентно указанию для страницы:
css.fstyle: design1.css headers: headers/header1.php