По умолчанию компоненты плагина 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
нетронутый и визуализировать другой частичный вместо этого по умолчанию.
То, как я бы сделал это в октябре, это обработать шаблон страницы с некоторой логикой в Twig. Это, вероятно, было бы самым логичным местом, чтобы выразить это по моему мнению.
Вы можете использовать renderPartial
метод
public function onRun()
{
$content = $this->renderPartial('default.htm');
}
документ: http://octobercms.com/docs/plugin/components#render-partial-method
Вы должны указать компоненту визуализировать Partial на onRender()
запускается после рендеринга макета и страницы:
public function onRender()
{
return $this->renderPartial('@other_partial');
}
Используйте @, чтобы заставить компонент искать частичный компонент вместо тематического!
Логика на шаблоне вашей страницы может выглядеть как код ниже, чтобы решить, какая часть должна отображаться.
Что-то вроде (вам нужно проверить синтаксис, потому что я не использовал его в последнее время:
{% if other %} #if variable 'other' exists in the page
{% partial "other" %}
{% else %}
{% partial "default" %}
{% endif %}
Конечно, вам нужно иметь некоторую логику на своей странице, которая либо решит, что переменная ‘other’ должна существовать, либо нет. Или вы можете сделать логическую проверку для определенного значения управляющей переменной
Я все еще ищу решение, которое не требует ветки. Я добавил параметр в свой компонент, который перечисляет все файлы в папке шаблона.
Теперь я могу выбрать нужный файл шаблона, я хочу это, когда я просто вызываю компонент следующим образом:
{% component 'mycomponent' %}
он рендерит компонент с использованием правильной части, определенной в настройках компонента
Возможно, в функции onRun () моего компонента есть некоторый код для pu, но я не могу найти правильный.
Использование $ content = $ this-> renderPartial (‘grid.htm’); по-прежнему визуализировать default.htm …