Страницы ( 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 (opens new window) функции, фильтры и теги внутри Раздела 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>