Страницы ( Pages )

Введение

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

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

Настройка страницы

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

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

Синтаксис URL

Адрес страницы определяется параметром url и должен начинаться с /. Ниже представлен пример страницы с адресом /blog.

url = "/blog"

Также в URL можно указать аргументы (шаблоны), которые могут использовать компоненты или сами страницы в разделе PHP кода.

url = "/blog/post/:post_id"

Пример получения аргумента в PHP секции (см. Динамические страницы):

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

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

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

Аргументы в середине URL не могут быть необязательными.

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

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

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

Вы также можете использовать в URL регулярные выражения. После названия параметра добавьте | и необходимое выражение (использовать / в выражении запрещено). Примеры:

url = "/blog/:post_id|^[0-9]+$/comments" - this will match /blog/post/10/comments
...
url = "/blog/:post_id|^[0-9]+$" - this will match /blog/post/3
...
url = "/blog/:post_name?|^[a-z0-9\-]+$" - this will match /blog/my-blog-post

Допустимо использование подстановочных аргументов путем добавления * после его названия.

url = "/blog/:category*/:slug"

Например: /color/:color/make/:make*/edit ---> /color/brown/make/volkswagen/beetle/retro/edit. Тогда будут доступны следующие параметры:

  • color: brown
  • make: volkswagen/beetle/retro

Примечание: URL страницы определяются только параметром url.

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

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

Жизненный цикл страницы

Существуют специальные функции, которые могут быть определены в Разделе PHP кода на странице или макета: onInit(), onStart() и onEnd(). Функция onInit() выполняется, когда все компоненты были инициализированы, но перед обработкой AJAX запросов. Функция onStart() выполняется в начале загрузки страницы. onEnd() - перед отображением страницы, но после работы компонентов. В функциях onStart и onEnd Вы можете определить переменные, которые потом можно использовать в Разделе Twig разметки.

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

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

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

function onStart()
{
  $this['posts'] = Post::orderBy('created_at', 'desc')->get();
}
==
<h2>Latest posts</h2>
<ul>
    {% for post in posts %}
        <h3>{{ post.title }}</h3>
        {{ post.content }}
    {% endfor %}
</ul>

Переменные по умолчанию и "Twig extensions" описаны на странице Разметка. Общяя последовательность вызовов обработчиков описана в параграфе Динамические макеты.

Произвольный ответ

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

function onStart()
{
    return 'Hello world!';
}

Более полезным примером может быть использование редиректа:

public function onStart()
{
    return Redirect:to('http://google.com');
}

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

Вы можете управлять стандартными формами при помощи методов-обработчиков, определенных в Разделе PHP кода страницы или шаблона (обработка AJAX запросов объясняется на странице AJAX). Используйте form_open(), чтобы создать форму с обработчиком onHandleForm. Пример:

{{ form_open({ request: 'onHandleForm' }) }}
    Please enter a string: <input type="text" name="value"/>
    <input type="submit" value="Submit me!"/>
{{ form_close() }}
<p>Last submitted value: {{ lastValue }}</p>

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

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

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

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

Если Вы хотите обратиться к определенному обработчику в конкретном компоненте, то используйте имя компонента или псевдоним в ссылке на обработчик:

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

Страница 404

Если тема содержит страницу с URL /404, то она будет отображаться вместо ненайденной страницы.

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

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

Переменные страницы

Вы можете изменить переменные страницы в PHP секции или Компоненте:

function onEnd()
{
    $this->page->title = 'A different page title';
}

Также вы можете использовать их на странице, используя переменную this.page.

<p>The title of this page is: {{ this.page.title }}</p>

Добавление стилей и скриптов на страницу

Вы можете добавить стили и скрипты на страницу при помощи методов addCss() и addJs() соответственно. Разместить эти методы можно в функции onStart(), которая определяется в PHP секции страницы или шаблона. Пример:

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

Если в начале пути до файла указан /, то он будет определен относительно папки с сайтом. В противном случае - относительно папки с темой.

Но лучше использовать теги {% styles %} и {% scripts %}. Пример:

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