默认情况下,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
不变,而将其他部分视为默认值。< / p>
答案 0 :(得分:2)
我在十月份这样做的方法是在页面模板上使用Twig中的一些逻辑来处理这个问题。在我看来,这可能是最合乎逻辑的地方。
答案 1 :(得分:2)
您可以使用renderPartial
方法
public function onRun()
{
$content = $this->renderPartial('default.htm');
}
doc:http://octobercms.com/docs/plugin/components#render-partial-method
答案 2 :(得分:2)
我正在尝试为我的网站解决此问题,我想我已经找到了答案。在组件PHP文件上,您可以尝试以下功能:
public function onRender(){
$partialType= $this->property('partialType');
switch ($partialType) {
case 'one':
$partial = '@partial-1.htm';
break;
case 'two':
$partial = '@partial-2.htm';
break;
case 'three':
$partial = '@partial-3.htm';
break;
case 'four':
$partial = '@partial-4.htm';
break;
default:
$partial = '@default.htm';
break;
}
return $this->renderPartial($partial);
}
答案 3 :(得分:1)
您应告诉组件在呈现布局和页面后运行的onRender()
上呈现Partial:
public function onRender()
{
return $this->renderPartial('@other_partial');
}
使用@强制组件查找部分组件而不是主题组件!
答案 4 :(得分:0)
您页面模板上的逻辑可能类似于下面的代码,以决定应显示哪个部分。
类似的东西(你需要检查语法,因为我最近没有使用过它:
{% if other %} #if variable 'other' exists in the page
{% partial "other" %}
{% else %}
{% partial "default" %}
{% endif %}
当然,您需要在页面中设置一些逻辑,以决定变量&#39;其他&#39;应该存在与否。或者您可以对控制变量的特定值进行逻辑检查
答案 5 :(得分:0)
我还在寻找一种不需要树枝的解决方案。我在我的组件中添加了一个设置,列出了模板文件夹下的所有文件。
现在我可以选择所需的模板文件,我想要的是,当我简单地调用组件时:
{% component 'mycomponent' %}
它使用组件设置中定义的正确部分来渲染组件。
在我的组件的onRun()函数中可能存在一些代码,但是找不到正确的代码。
使用$ content = $ this-&gt; renderPartial(&#39; grid.htm&#39;);仍然渲染default.htm partial ...