Переменные темы⚓︎
Когда вы проектируете тему, Grav предоставляет вам доступ ко всем типам объектов и переменных из ваших шаблонов Twig. Фреймворк шаблонов Twig предоставляет мощные средства для чтения и работы с этими объектами и переменными. Это полностью объяснено в их собственной документации, а также кратко изложено в нашей документации.
В Twig можно вызывать методы, не принимающие параметров, просто вызывая имя метода и опуская скобки ()
. Если вам нужно передать параметры, вам также нужно указать их после имени метода. Вызов page.content
эквивалентен вызову page.content()
.
Ключевые объекты⚓︎
Существует несколько ключевых объектов, которые доступны для шаблона Twig, и каждый объект имеет набор переменных и функций.
Переменная base_dir⚓︎
{{ base_dir }}
возвращает каталог базового файла установки Grav.
Переменная base_url⚓︎
{{ base_url }}
возвращает базовый URL сайта, независимо от значения переменной absolute_urls
(опция в системной конфигурации).
Переменная base_url_relative⚓︎
{{ base_url_relative }}
возвращает базовый URL-адрес сайта, без информации о хосте.
Переменная base_url_absolute⚓︎
{{ base_url_absolute}}
возвращает базовый URL-адрес сайта, включая информацию о хосте.
Переменная base_url_simple⚓︎
{{ base_url_simple }}
возвращает базовый URL сайта, без кода языка.
Переменная home_url⚓︎
{{ home_url }}
особенно полезно использовать для обратной ссылки на домашнюю страницу вашего сайта. Это похоже на base_url
, но учитывает ситуацию, когда он пуст.
Переменная html_lang⚓︎
Это вернет текущий активный язык, если он предоставлен, иначе используйте опцию site.default_lang
, иначе вернитесь к en
.
Переменная theme_dir⚓︎
{{ theme_dir }}
возвращает папку каталога файлов текущей темы.
Переменная theme_url⚓︎
{{ theme_url }}
возвращает относительный URL к текущей теме.
При связывании с такими активами, как изображения или JavaScript и CSS файлы, рекомендуется использовать функцию url()
в сочетании с потоком theme://
, как описано на странице Фильтры и функции Twig. Для JavaScript и CSS менеджер активов ещё проще использовать, но в некоторых случаях, например, при динамической или условной загрузке активов, она не будет работать.
Переменная html_lang⚓︎
{{ html_lang }}
возвращает активный язык.
Переменная language_codes⚓︎
{{ language_codes }}
возвращает список доступных языков сайта.
Объект assets⚓︎
Менеджер активов добавляет простой способ управления CSS и JavaScript на вашем сайте.
{% do assets.addCss('theme://css/foo.css') %}
{% do assets.addInlineCss('a { color: red; }') %}
{% do assets.addJs('theme://js/something.js') %}
{% do assets.addInlineJs('alert("Warming!");') %}
Подробнее о менеджере активов.
Рекомендуется использовать тег style и тег script.
Объект config⚓︎
Вы можете получить доступ к любой настройке конфигурации Grav, установленной в YAML-файлах в /user/config
, через объект config
. Например:
Объект site⚓︎
Псевдоним объекта config.site
. Представляет конфигурацию, установленную в файле site.yaml
.
Объект system⚓︎
Псевдоним объекта config.system
. Представляет конфигурацию в основном файле system.yaml
.
Объект theme⚓︎
Псевдоним объекта config.theme
. Представляет конфигурацию для текущей активной темы. Настройки плагина доступны через config.plugins
.
Объект page⚓︎
Поскольку Grav построен с использованием структуры, определенной в папке pages/
, каждая страница представлена объектом page.
Объект page, вероятно, является самым важным объектом, с которым вы будете работать, поскольку он содержит всю информацию о текущей странице, на которой вы находитесь.
Полный список методов объекта page
доступен на странице API. Вот список наиболее полезных для вас методов.
summary([size])⚓︎
Возвращает усеченную или укороченную версию вашего контента. Вы можете задать опциональный параметр size
, чтобы указать максимальную длину резюме, в символах. В качестве альтернативы, если размер не указан, значение можно получить через переменную summary.size
в масштабе всего сайта из вашей конфигурации site.yaml
.
или
Третий вариант - использовать разделитель ===
в вашем содержании. Всё, что перед разделителем, будет использовано в качестве тизера.
content()⚓︎
Возвращает все HTML содержимое вашей страницы.
header()⚓︎
При этом возвращаются заголовки страниц, определённые в YAML-фронтальной материи страницы. Например, страница со следующими заголовками:
можно использовать:
media()⚓︎
Возвращает массив, содержащий все медиа, связанные со страницей. К ним относятся изображения, видео и другие файлы. Вы можете получить доступ к медиа-методам, как описано в главе Медиа для контента. Поскольку это массив, можно использовать фильтры и функции Twig. Примечание: .svg обрабатываются как файлы, а не изображения, потому что ими нельзя управлять с помощью фильтров изображений Twig.
Получаем конкретный файл или изображение:
Получаем первое изображение:
Просматриваем все изображения и выводим HTML-тег для их отображения:
title()⚓︎
Возвращает заголовок страницы, установленный в переменной title
заголовков YAML для самой страницы.
menu()⚓︎
Возвращает значение переменной menu
в заголовках YAML страницы. Если ничего не указано, по умолчанию используется title
.
visible()⚓︎
Возвращает, видна ли страница. По умолчанию страницы с числовым значением, за которым следует точка, по умолчанию видны (01.somefolder1
), тогда как страницы без (subfolder2
) не считаются видимыми. Это можно изменить в заголовках страниц:
routable()⚓︎
Возвращает, является ли страница маршрутизируемой Grav или нет. Это означает, что вы можете направить свой браузер на страницу и получить контент обратно. Немаршрутизируемые страницы могут использоваться в шаблонах, плагинах и т.д., но не могут быть доступны напрямую. Это можно установить в заголовках страниц:
slug()⚓︎
Возвращает прямое имя, как отображается в URL для этой страницы, например, my-blog-post
.
url([include_host = false])⚓︎
Возвращает, например, URL на страницу:
или
permalink()⚓︎
Возвращает URL-адрес с информацией о хосте. Особенно полезно, когда нужна быстрая ссылка, к которой можно получить доступ из любого места.
canonical()⚓︎
Возвращает URL-адрес, который является «предпочтительной» версией или ссылкой на конкретную страницу. Это значение по умолчанию будет обычным URL-адресом, если страница не переопределила параметр заголовка страницы canonical:
.
route()⚓︎
Возвращает внутреннюю маршрутизацию для страницы. Это в основном используется для внутренней маршрутизации и отправки страниц.
home()⚓︎
Возвращает true
или false
в зависимости от того, настроена ли эта страница как домашняя. Этот параметр находится в файле system.yaml
.
root()⚓︎
Возвращает true
или false
в зависимости от того, является ли эта страница корневой страницей древовидной иерархии или нет.
active()⚓︎
Возвращает true
или false
в зависимости от того, является ли эта страница в настоящее время страницей, к которой обращается ваш браузер. Это особенно полезно при навигации, чтобы узнать, является ли текущая страница активной.
modular()⚓︎
Возвращает true
или false
в зависимости от того, является ли эта страница модульной.
activeChild()⚓︎
Возвращает, содержит ли этот URL-адрес URI URL-адрес активной страницы. Или, другими словами, это URL-адрес этой страницы в текущем URL-адресе. Опять же, это полезно при построении вашей навигации, и вы хотите знать, является ли страница, которую вы повторяете, родительской для активной дочерней страницы.
find(url)⚓︎
Возвращает объект страницы, указанный в URL-адресе маршрута.
collection()⚓︎
Возвращает коллекцию страниц для этого контекста, как определено заголовками страниц коллекции.
{% for child in page.collection %}
{% include 'partials/blog_item.html.twig' with {'page':child, 'truncate':true} %}
{% endfor %}
currentPosition()⚓︎
Возвращает индекс текущей страницы относительно элементов того же уровня.
isFirst()⚓︎
Возвращает true
или false
в зависимости от того, является ли эта страница первым из элементов того же уровня.
isLast()⚓︎
Возвращает true
или false
в зависимости от того, является ли эта страница последней из элементов того же уровня.
nextSibling()⚓︎
Возвращает следующую страницу из массива элементов того же уровня на основе текущей позиции.
prevSibling()⚓︎
Возвращает предыдущую страницу из массива элементов того же уровня на основе текущей позиции.
nextSibling()
и prevSibling()
страницы ордеров в стек-подобной структуре. Лучше всего работает в ситуации, когда первый пост в блоге имеет nextSibling null
, а prevSibling
- предыдущий. Если это направление сортировки сбивает вас с толку, мы предлагаем использовать page.adjacentSibling(-1)
для указания на следующую страницу вместо page.nextSibling()
, чтобы уменьшить путаницу, которую может вызвать терминология. Вы также можете определить константу в теме и использовать её для лучшей читабельности, например, page.adjacentSibling(NEXT_PAGE)
.
children()⚓︎
Возвращает массив дочерних страниц для страницы, как определено в структуре содержимого страниц.
orderBy()⚓︎
Возвращает тип сортировки для всех отсортированных дочерних элементов страницы. Значения обычно включают в себя: default
, title
, date
и folder
. Это значение обычно настраивается в заголовках страниц.
orderDir()⚓︎
Возвращает направление сортировки для любых отсортированных дочерних страниц. Значения могут быть как asc
для восходящего, так и desc
для нисходящего. Это значение обычно настраивается в заголовках страниц.
orderManual()⚓︎
Возвращает массив ручной сортировки страницы для любых дочерних страниц. Это значение обычно настраивается в заголовках страниц.
maxCount()⚓︎
Возвращает максимальное количество страниц для дочерних элементов, которые могут быть возвращены. Это значение обычно настраивается в заголовках страниц.
children.count()⚓︎
Возвращает количество дочерних страниц.
children.current()⚓︎
Возвращает текущий дочерний элемент. Может использоваться во время итераций над дочерними элементами.
children.next()⚓︎
Возвращает следующий элемент в массиве дочерних элементов.
children.prev()⚓︎
Возвращает предыдущий элемент в массиве дочерних элементов.
children.nth(position)⚓︎
Возвращает дочерний элемент, идентифицируемый по position
, которая является целым числом от 0
до children.count() - 1
в массиве дочерних элементов.
children.sort(orderBy, orderDir)⚓︎
Переупорядочивает дочерние элементы на основе orderBy (default
,title
, date
иfolder
) и orderDir (asc
или desc
)
parent()⚓︎
Возвращает объект родительской страницы для этой страницы. Это очень полезно, когда вам нужно вернуться к вложенной древовидной структуре страниц.
isPage()⚓︎
Возвращает true
или false
в зависимости от того, есть ли у этой страницы фактический файл .md
, связанный с ней, а не просто папка для маршрутизации.
isDir()⚓︎
Возвращает true
или false
в зависимости от того, является ли эта страница только папкой для маршрутизации.
id()⚓︎
Возвращает уникальный идентификатор для страницы.
modified()⚓︎
Возвращает метку времени последнего изменения страницы.
date()⚓︎
Возвращает метку даты и времени для страницы. Обычно это устанавливается в заголовках для представления даты страницы или публикации. Если значение не определено явно, используется временная метка изменения файла.
template()⚓︎
Возвращает имя шаблона страницы без расширения .md
. Например, default
filePath()⚓︎
Возвращает полный путь к файлу страницы. Например, /Users/yourname/sites/grav/user/pages/01.home/default.md
filePathClean()⚓︎
Возвращает относительный путь от корня сайта Grav. Например, user/pages/01.home/default.md
path()⚓︎
Возвращает полный путь к директории, содержащей страницу. Например, /Users/yourname/sites/grav/user/pages/01.home
folder()⚓︎
Возвращает имя папки для страницы. Например, 01.home
taxonomy()⚓︎
Возвращается массив таксономии, связанный со страницей. Их можно перепрограммировать. Это особенно полезно для отображения таких элементов, как теги:
Объект pages⚓︎
Объект pages — это корневая страница, которая представляет собой вложенное дерево всех объектов page, о которых знает Grav. Это особенно полезно для создания карты сайта, навигации или если вы хотите найти определённую страницу.
Этот объект не похож на grav.pages
, который является экземпляром класса Pages
.
Метод children⚓︎
Возвращает непосредственные дочерние страницы в виде массива объектов pages. Так как объект страниц представляет все дерево, вы можете полностью повторить каждую страницу в Grav страницах/папке.
Получите страницы верхнего уровня для простого меню:
<ul class="navigation">
{% for page in pages.children %}
{% if page.visible %}
<li><a href="{{ page.url }}">{{ page.menu }}</a></li>
{% endif %}
{% endfor %}
</ul>
Объект media⚓︎
Появился новый объект, который позволяет вам получить доступ к media, находящимся за пределами объектов Page, через потоки PHP из Twig. Это работает аналогично связыванию изображений в содержимом с использованием потоков для доступа к изображениям и обработки мультимедиа для управления темой.
Объект uri⚓︎
Полный список методов объекта Uri доступен на странице API. Вот список наиболее полезных для вас методов.
У объекта Uri есть несколько методов для доступа к частям текущего URI. Для полного URL http://mysite.com/grav/section/category/page.json/param1:foo/param2:bar/?query1=baz&query2=qux
:
path()⚓︎
Возвращает часть пути URL-адреса: (Например, uri.path
= /section/category/page
)
paths()⚓︎
Возвращает массив элементов пути: (Например, uri.paths
= [section, category, page]
)
route([absolute = false][, domain = false])⚓︎
Возвращает маршрут как абсолютный или относительный URL. (Например, uri.route(true)
= http://mysite.com/grav/section/category/page
или uri.route()
= /section/category/page
)
params()⚓︎
Возвращает часть URL-адреса params: (Например, uri.params
= /param1:foo/param2:bar
)
param(id)⚓︎
Возвращает значение определенного параметра. (Например, uri.param('param1')
= foo
)
query()⚓︎
Возвращает часть запроса URL-адреса: (Например, uri.query
= query1=bar&query2=qux
)
query(id)⚓︎
Вы также можете получить определённые элементы запроса: (Например, uri.query('query1')
= bar
)
url([include_host = true])⚓︎
Возвращает полный URL-адрес с хостом или без него. (Например, uri.url(false)
= grav/section/category/page/param:foo?query=bar
)
extension()⚓︎
Это вернет расширение или вернет html
, если не указано: (Например, uri.extension
= json
)
host()⚓︎
Возвращает хост-часть URL-адреса. (Например, uri.host
= mysite.com
)
base()⚓︎
Возвращает базовую часть URL-адреса. (Например, uri.base
= http://mysite.com
)
rootUrl([include_host = false])⚓︎
Возвращает корневой URL-адрес экземпляра Grav. (Например. uri.rootUrl()
= http://mysite.com/grav
)
referrer()⚓︎
Возвращает информацию о реферере для этой страницы.
Объект header⚓︎
Объект заголовка является псевдонимом для page.header()
оригинальной страницы. Это удобный способ получить доступ к оригинальным заголовкам страниц, когда вы петляете по другим объектам page
дочерних страниц или коллекций.
Объект content⚓︎
Объект содержимого является псевдонимом page.content()
оригинальной страницы.
Для отображения содержимого страницы необходимо:
Объект taxonomy⚓︎
Объект глобальной таксономии, содержащий всю информацию по таксономии сайта.
Объект browser⚓︎
Весь список методов объектов Браузера доступен на странице API. Вот список методов, которые вы найдете наиболее полезными.
Grav имеет встроенную поддержку программного определения платформы, браузера и версии пользователя.
Объект user⚓︎
Вы можете получить доступ к текущему объекту пользователя, вошедшему в систему, косвенно через объект Grav. Это позволяет получить доступ к таким данным, как username
, fullname
, title
и email
:
{{ grav.user.username }} # admin
{{ grav.user.fullname }} # Вася Иванов
{{ grav.user.title }} # Администратор
{{ grav.user.email }} # vasja@ivanoff.com
Добавление своих переменных⚓︎
Вы можете легко добавлять пользовательские переменные разными способами. Если переменная является переменной для всего сайта, вы можете поместить её в свой файл user/config/site.yaml
, а затем получить к нему доступ через:
В качестве альтернативы, если переменная нужна только для определенной страницы, вы можете добавить её в предварительную часть YAML вашей страницы и получить к ней доступ через объект page.header
. Например:
может использоваться как:
Добавление своих объектов⚓︎
Расширенный способ добавления пользовательских объектов - использовать плагин для добавления объектов в объект Twig. Это сложная тема, которая более подробно рассматривается в главе о плагинах.