Темы ( Themes )

Введение

Темы определяют внешний вид Вашего сайта или веб-приложения, используя файлы. Поэтому вы можете использовать любую систему контроля версий для работы с ними. На этой странице Вы найдете подробное описание работы с темами в October. Больше информации о страницах, чанках, макетах и файлах содержимого можно найти в соответствующих статьях.

Темы - это папки, которые находятся по умолчанию в папке /themes и могут содержать следующие объекты:

Объект Описание
Страницы страницы сайта.
Фрагменты содержит повторно используемые куски HTML-разметки.
Макеты определяет каркас страницы.
Содержимое текст, HTML или Markdown блоки, которые можно редактировать независимо от страницы или макета.
Asset files файлы вроде изображений, CSS и JavaScript файлов.

Структура папок

Ниже Вы можете увидеть пример структуры папок темы. Каждая тема в October представлена отдельной папкой. Пример содержимого папки с темой "website".

themes/
  website/           <=== Тема начинается здесь
    pages/           <=== Папка со страницами
      home.htm
    layouts/         <=== Папка с макетами
      default.htm
    partials/        <=== Папка с фрагментами
      sidebar.htm
    content/         <=== Папка с контентом
      intro.htm
    assets/          <=== Папка с файлами
      css/
        my-styles.css
      js/
      images/

Активная тема задается параметром activeTheme в файле config/cms.php или Theme Selector на странице настроек System > CMS > Front-end Theme, переопределяя значение в файле config/cms.php.

Подпапки

October поддерживает одноуровневые подпапки для страниц, фрагментов, макетов и файлов содержимого (папка assets может содержать любую структуру). Это упрощает организацию крупных сайтов. Ниже Вы можете увидеть пример структуры папок, где папки страниц и чанков содержат подпапку blog, а папка content - подпапку home.

themes/
  website/
    pages/
      home.htm
      blog/                  <=== Подпапка
        archive.htm
        category.htm
    partials/
      sidebar.htm
      blog/                  <=== Подпапка
        category-list.htm
    content/
      footer-contacts.txt
      home/                  <=== Подпапка
        intro.htm
    ...

Укажите имя подпапки перед именем шаблона, чтобы отобразить его содержимое. Пример отображения чанка из подпапки:

{% partial "blog/category-list" %}

Примечание: Пути к шаблонам всегда абсолютны. Если в чанке Вы отображаете другой чанк из той же подпапки, то Вам все равно нужно указать имя подпапки.

Структура шаблона

Шаблоны страниц, фрагментов и макетов могут включать в себя 3 раздела: конфигурация, PHP код и Twig разметка, которые отделены друг от друга при помощи ==. Пример:

url = "/blog"
layout = "default"
==
function onStart()
{
    $this['posts'] = ...;
}
==
<h3>Blog archive</h3>
{% for post in posts %}
    <h4>{{ post.title }}</h4>
    {{ post.content }}
{% endfor %}

Раздел конфигурации

В разделе конфигруации задаются параметры шаблона. Поддерживаемые параметры специфичны для различных шаблонов и описаны в соответствующих статьях документации. Раздел конфигурации использует простой INI формат, где значения строковых параметров заключены в кавычки. Пример раздела конфигурации для шаблона страницы:

url = "/blog"
layout = "default"

[component]
parameter = "value"

Раздел PHP кода

Код в разделе PHP выполняется каждый раз перед тем, как шаблон будет отображен. Раздел PHP не обязателен и его содержимое зависит от типа шаблона, где он определен. Он может содержать необязательные открывающие и закрывающие PHP теги, чтобы поддерживать подстветку синтаксиса в редакторах. Открывающие и закрывающие теги всегда должны быть заданы с новой строки.

url = "/blog"
layout = "default"
==
<?
function onStart()
{
    $this['posts'] = ...;
}
?>
==
<h3>Blog archive</h3>
{% for post in posts %}
    <h4>{{ post.title }}</h4>
    {{ post.content }}
{% endfor %}

В разделе PHP Вы можете задать только функции и ссылаться на пространство имен с помощью ключевого слова use. Другой PHP код не разрешен потому, что во время парсинга страницы происходит конвертация раздела в класс. Пример:

url = "/blog"
layout = "default"
==
<?
use Acme\Blog\Classes\Post;

function onStart()
{
    $this['posts'] = Post::get();
}
?>
==

Раздел Twig разметки

Раздел Twig определяет разметку, которая будет отображена согласно шаблону. Здесь Вы можете использовать функции, фильтры и Twig теги, предоставляемые October, а также все оригинальные функции, фильтры и теги Twig. Содержимое в разделе Twig зависит от типа шаблона (страница, макет или фрагмент). Вы можете найти больше информации о конкретных Twig объектах далее в документации.