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

Активная тема CMS устанавливается с помощью параметра activeTheme в файле app/config/cms.php.

Введение

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

  • Страницы - представляют собой страницы сайта.
  • Чанки - содержит повторно используемые куски HTML-разметки.
  • Макеты - определяет каркас страницы.
  • Содержимое - текст, HTML или Markdown блоки, которые можно редактировать отдельно от страницы или макета.
  • Асетсы - файлы-ресурсы такие как изображения, 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/

Подпапки

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 код, and Twig разметка. Разделы отделяются с помощью символов ==. Пример:

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

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

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

url = "/blog"
layout = "default"

[component]
parameter = "value"

Раздел PHP кода

Код в разделе PHP выполняется каждый раз перед тем, как шаблон будет отображен. Раздел PHP не обязателен для всех шаблонов CMS и его содержимое зависит от типа шаблона, где он определен. Раздел 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 код не разрешен в разделе PHP. Это потому что раздел PHP конвертируется в класс, когда обрабатывается страница.

Пример ссылки на пространство имен:

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

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

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

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