Все сайты имеют страницы. В October страницы представлены шаблонами страниц. Файлы шаблонов страниц находятся в подкаталоге /pages каталога theme. Имена файлов страниц не влияют на маршрутизацию, но рекомендуется назначать имена страниц соответствующим функциям страницы. Файлы должны иметь расширение htm. Для страниц требуются разделы Конфигурация и Twig, но Раздел PHP кода является необязательным. Ниже вы можете увидеть простейший пример домашней страницы.

url = "/"
==
<h1>Hello, world!</h1>

Конфигурация страницы

Конфигурация страницы определяется в [Секция конфигурации] (./cms-themes.md#configuration-section) файла шаблона страницы. Конфигурация страницы определяет параметры страницы, необходимые для маршрутизации и визуализации страницы и страницы Компоненты, которые описаны в другой статье. Для страниц поддерживаются следующие параметры конфигурации:

  • url - необходимо указать URL-адрес страницы. Синтаксис URL описан ниже.
  • title - заголовок страницы, обязателен.
  • layout - макет страница, необязательная. Если указано, должно содержать имя файла макета, без расширения, например: default.
  • description - описание страницы для внутреннего интерфейса, необязательно.

Синтаксис URL

URL-адрес страницы определяется параметром конфигурации url. URL-адреса должны начинаться с символа прямой косой черты и могут содержать параметры. URL-адреса без параметров являются фиксированными и строгими. В следующем примере URL-адрес страницы /blog.

url = "/blog"

URL-адреса с параметрами являются более гибкими. Страница с шаблоном URL, определенным в следующем примере, будет отображаться для любого адреса, такого как /blog/post/something. Параметры URL могут быть доступны из компонента October или со страницы PHP code.

url = "/blog/post/:post_id"

Вот как вы можете получить доступ к параметру URL из раздела PHP страницы (более подробную информацию см. В разделе Динамические страницы:

url = "/blog/post/:post_id"
==
function onStart()
{
    $post_id = $this->param('post_id');
}
==

Имена параметров должны быть совместимы с именами переменных PHP. Чтобы сделать параметр необязательным, добавьте знак вопроса после его имени:

url = "/blog/post/:post_id?"

Параметры в середине URL-адреса не могут быть необязательными. В следующем примере параметр :post_id помечается как необязательный, но обрабатывается по мере необходимости.

url = "/blog/:post_id?/comments"

Необязательные параметры могут иметь значения по умолчанию, которые используются как запасные значения в случае, если значение реального параметра не указано в URL-адресе. Значения по умолчанию не могут содержать символы труб или вопросительные знаки. Значение по умолчанию указано после вопросительного знака. В следующем примере параметр category_id будет иметь значение 10 для URL /blog/category.

url = "/blog/category/:category_id?10"

Вы также можете использовать регулярные выражения для проверки параметров. Чтобы добавить выражение проверки, добавьте символ конвейеризации после имени параметра (или вопросительного знака) и укажите выражение. Символ прямой косой черты в выражениях недопустим. Примеры:

url = "/blog/:post_id|^[0-9]+$/comments" - это будет соответствовать /blog/post/10/comments
...
url = "/blog/:post_id|^[0-9]+$" - это будет соответствовать /blog/post/3
...
url = "/blog/:post_name?|^[a-z0-9\-]+$" - это будет соответствовать /blog/my-blog-post

Заметка: Подкаталоги не влияют на URL-адреса страниц - URL-адрес определяется только с параметром url.

Динамические страницы

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

Обработчики цикла страницы

В разделе PHP страниц и макетов можно определить две специальные функции: onStart() и onEnd(). Функция onStart() выполняется в начале рендеренга страницы. Функция onEnd() выполняется перед отображением страницы и после рендеренга страницы компонента. В onStart и onEnd вы можете вводить переменные в среду Twig. Используйте array notation для передачи переменных на страницу:

url = "/"
==
<?
function onStart()
{
    $this['hello'] = "Hello world!";
}
?>
==
<h3>{{ hello }}</h3>

Следующий пример более сложен. Он показывает, как загрузить коллекцию сообщений в блоге из базы данных и отобразить на странице (плагин Acme\Blog например).

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

function onStart()
{
  $this['posts'] = Post::orderBy('created_at', 'desc')->get();
}
?>
==
<h2>Последние посты</h2>
<ul>
    {% for post in posts %}
        <h3>{{ post.title }}</h3>
        {{ post.content }}
    {% endfor %}
</ul>

Переменные по умолчанию и расширения Twig, предоставленные October, описаны в руководстве по разметке.

Обработка форм

Вы можете обрабатывать стандартные формы с помощью методов-обработчиков, определенных на странице или макете PHP section (обработка запросов AJAX объясняется в статье AJAX Framework). Используйте функцию form_open() (./cms-markup.md#standard-form), чтобы определить форму, которая ссылается на обработчик события. Пример:

{{ form_open({ request: 'onHandleForm' }) }}
    Введите строку: <input type="text" name="value"/>
    <input type="submit" value="Submit me!"/>
{{ form_close() }}
<p>Последняя отправленное значение: {{ lastValue }}</p>

Функция onHandleForm может быть определена на странице или макете разделе PHP кода следующим образом:

function onHandleForm()
{
    $this['lastValue'] = post('value');
}

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

Заметка: Если обработчик с таким же именем определен в макете, странице и странице компонента, October выполнит обработчик страницы. Если обработчик определен в компоненте и макете, будет выполнен обработчик макета. Приоритет обработчика: страница, макет, компонент. Если вы хотите обратиться к обработчику, определенному в конкретном компоненте, используйте имя компонента или псевдоним в ссылке обработчика:

{{ form_open({ request: 'myComponent::onHandleForm' }) }}

Страница 404

Если тема содержит страницу с URL-адресом /404, она отображается, когда система не может найти запрашиваемую страницу.

Страница ошибки

По умолчанию любые ошибки будут отображаться с подробной страницей ошибки, содержащей содержимое файла, номер строки и трассировку стека, где произошла ошибка. Вы можете отобразить страницу дружественных ошибок, установив значение конфигурации customErrorPage в true в скрипте app/config/cms.php и создав страницу с URL-адресом /error.

Программное включение асетсов на страницу

При необходимости вы можете вставлять ресурсы (файлы CSS и JavaScript) на страницы с помощью методов контроллера addCss() и addJs(). Это можно сделать в функции onStart(), определенной в секции PHP шаблона страницы или макета. Пример:

function onStart()
{
    $this->addCss('assets/css/hello.css');
    $this->addJs('assets/js/app.js');
}

Если путь, указанный в аргументе метода addCss() и addJs(), начинается со слэша (/), то он будет относиться к корню сайта. Если путь к активам не начинается с косой черты, то он относится к теме.

Чтобы выводить внедренные активы на страницы или макеты, используйте тег {%styles%} и {%scripts%}. Пример:

<head>
    ...
    {% styles %}
</head>
<body>
    ...
    {% scripts %}
</body>