Компоненты ( Components )

October CMS Documentation Docs

Компоненты ( Components )

Компоненты - настраиваемые элементы, которые могут быть прикреплены к любой странице или шаблону. Компоненты являются ключевой особенностью OctoberCMS. Каждый компонент позволяет расширить возможности Вашего сайта. Их основные задачи заключаются в выводе HTML кода, обработке AJAX запросов, обработке форм и настройке отображения страниц.

Эта статья описывает основы работы с компонентами и не объясняет, как использовать их с AJAX. Эта тема описана в AJAX.

Примечание: Использование компонентов внутри фрагментов ограничивает их функционал (см. динамические фрагменты).

# Введение

Если Вы используете административный интерфейс, то можете добавлять компоненты на страницы или шаблоны, кликнув по нему в панели Компоненты. Если же Вы используете текстовый редактор, то должны указать его название в Разделе Конфигурации. Пример добавления компонента To-do на страницу:

title = "Components demonstration"
url = "/components"

[demoTodo]
maxItems = 20
==
...

Так инициализируется компонент с его свойствами, которые могут быть, а могут и не быть. Некоторые из них являются обязательными и имеют значения по умолчанию. Если Вы не уверены, какие свойства имеет компонент, то обратитесь к документации или используйте Инспектор. Он открывается при нажатии на компонент на странице или в панели с компонентами.

При добавлении компонента на страницу он автоматически создает переменную с таким же именем:

{% component 'demoTodo' %}

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

# Псевдонимы

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

[October\Demo\Components\Todo demoTodoAlias]
maxItems = 20

Первый параметр в секции - имя класса, второй - псевдоним, который используется в коде как ссылка на компонент. Пример:

{% component 'demoTodoAlias' %}

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

[demoTodo todoA]
maxItems = 10
[demoTodo todoB]
maxItems = 20

# Использование внешних значений

По умолчанию свойства компонентов инициализируются в Разделе Настроек, где определен сам компонент:

[demoTodo]
maxItems = 20
==
...

Однако, вы можете инициализировать свойства при помощи внешних значений - URL параметров или параметров фрагментов (для компонентов, определенных во фрагментах). Используйте {{ paramName }} для значений, которые должы быть получены из переменных фрагмента:

[demoTodo]
maxItems = {{ maxItems }}
==
...

Предполагается, что в предыдущем примере компонент demoTodo находится во фрагменте и указана переменная maxItems:

{% partial 'my-todo-partial' maxItems='10' %}

Используйте {{ :paramName }}, чтобы получить значение из URL. Например:

[demoTodo]
maxItems = {{ :maxItems }}
==
...

Страница, на которой находится компонент, должна иметь соответствующий адрес:

url = "/todo/:maxItems"

В административной части сайта Вы можете использовать Инспектора для привязки внешних значений к компоненту. Не используйте скобки {{ }}! Каждое свойство имеет иконку справа, при нажатии на которую, открывается поле для ввода значения, куда можно добавить название параметра paramName или :paramName.

# Передача переменных в компонент

Components can be designed to use variables at the time they are rendered, similar to Partial variables, they can be specified after the component name in the {% component %} tag. The specified variables will explicitly override the value of the component properties, including external property values.

In this example, the maxItems property of the component will be set to 7 at the time the component is rendered:

{% component 'demoTodoAlias' maxItems='7' %}

Примечание: Not all components support passing variables when rendering.

# Настройка шаблона по умолчанию

Иногда Вы захотите изменить шаблон компонента (заменить текст, добавить изображение или т.п.). Для этого необходимо переместить разметку компонента по умолчанию во фрагмент или переопределить ее.

# Перемещение разметки во фрагмент

Каждый компонент может иметь фрагмент default.htm, содержимое которого, замещает тег {% component %}. Пример:

url = "blog/post"

[blogPost]
==
{% component "blogPost" %}

Вы можете скопировать весь код из components/blogpost/default.htm и вставить его прямо в страницу или фрагмент, например, с названием blog-post.htm.

<h1>{{ __SELF__.post.title }}</h1>
<p>{{ __SELF__.post.description }}</p>

Внутри кода Вы можете найти переменную __SELF__, которая указывает на объект компонента. Она должна быть заменена на псевдоним (в нашем примере - это blogPost):

<h1>{{ blogPost.post.title }}</h1>
<p>{{ blogPost.post.description }}</p>

Теперь вы можете добавить фрагмент в страницу или шаблон:

{% partial 'blog-post.htm' %}

# Переопределение фрагментов компонента

Все фргаменты компонента могут быть переопределены, используя фрагменты темы. Если компонент называется channel и использует фрагмент title.htm:

url = "mypage"

[channel]
==
{% component "channel" %}

Вы можете переопределить его, путем создания файла /themes/НАЗВАНИЕТЕМЫ/partials/ПСЕВДОНИМ/title.htm.

# "View Bag"

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

title = "About"
url = "/about.html"
layout = "default"

[viewBag]
activeMenu = "about"
==

<p>Page content...</p>

Получить его можно следующим образом::

description = "Default layout"
==
[...]

<!-- Main navigation -->
<ul>
    <li class="{{ viewBag.activeMenu == 'about' ? 'active' }}">About</li>
    [...]
</ul>

Примечание: viewBag скрыт в административной части сайта и может редактироваться только через текстовый редактор.

Примечание: viewBag могут использовать другие плагины.