Как изменить, какая часть отображается в компоненте OctoberCMS?

По умолчанию компоненты плагина OctoberCMS визуализируют частичное default.htm, Можно ли переопределить, какая часть будет отображена? Например …

Структура файла плагина

├── components
│   ├── example
│   │   ├── default.htm
│   │   ├── other_partial.htm
│   ├── Example.php
├── ...
├── Plugin.php

example.php

class Example extends ComponentBase  {

public function onRun() {
// change the rendered partial, such that other_partial.htm
// will be rendered instead of default.htm
$this->setRenderedPartial('other_partial')
}

}

Я знаю, что можно сделать other_partial изнутри default.htm но в моем случае я стараюсь покинуть default.htm нетронутый и визуализировать другой частичный вместо этого по умолчанию.

1

Решение

То, как я бы сделал это в октябре, это обработать шаблон страницы с некоторой логикой в ​​Twig. Это, вероятно, было бы самым логичным местом, чтобы выразить это по моему мнению.

2

Другие решения

Вы можете использовать renderPartial метод

public function onRun()
{
$content = $this->renderPartial('default.htm');
}

документ: http://octobercms.com/docs/plugin/components#render-partial-method

2

Вы должны указать компоненту визуализировать Partial на onRender() запускается после рендеринга макета и страницы:

public function onRender()
{
return $this->renderPartial('@other_partial');
}

Используйте @, чтобы заставить компонент искать частичный компонент вместо тематического!

1

Логика на шаблоне вашей страницы может выглядеть как код ниже, чтобы решить, какая часть должна отображаться.

Что-то вроде (вам нужно проверить синтаксис, потому что я не использовал его в последнее время:

{% if other %} #if variable 'other' exists in the page
{% partial "other" %}
{% else %}
{% partial "default" %}
{% endif %}

Конечно, вам нужно иметь некоторую логику на своей странице, которая либо решит, что переменная ‘other’ должна существовать, либо нет. Или вы можете сделать логическую проверку для определенного значения управляющей переменной

0

Я все еще ищу решение, которое не требует ветки. Я добавил параметр в свой компонент, который перечисляет все файлы в папке шаблона.

Теперь я могу выбрать нужный файл шаблона, я хочу это, когда я просто вызываю компонент следующим образом:

{% component 'mycomponent' %}

он рендерит компонент с использованием правильной части, определенной в настройках компонента

Возможно, в функции onRun () моего компонента есть некоторый код для pu, но я не могу найти правильный.

Использование $ content = $ this-> renderPartial (‘grid.htm’); по-прежнему визуализировать default.htm …

0
По вопросам рекламы [email protected]