Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/254.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何更改在OctoberCMS组件中渲染的部分?_Php_Octobercms_Octobercms Plugins - Fatal编程技术网

Php 如何更改在OctoberCMS组件中渲染的部分?

Php 如何更改在OctoberCMS组件中渲染的部分?,php,octobercms,octobercms-plugins,Php,Octobercms,Octobercms Plugins,默认情况下,OctoberCMS插件组件呈现部分default.htm。是否可以覆盖将渲染的部分?例如 插件文件结构 ├── components │ ├── example │ │ ├── default.htm │ │ ├── other_partial.htm │ ├── Example.php ├── ... ├── Plugin.php Example.php 类示例扩展了ComponentBase{ 公共函数onRun(){ //更改渲染的部分,使其他_pa

默认情况下,OctoberCMS插件组件呈现部分
default.htm
。是否可以覆盖将渲染的部分?例如

插件文件结构

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

类示例扩展了ComponentBase{
公共函数onRun(){
//更改渲染的部分,使其他_partial.htm
//将呈现而不是default.htm
$this->setRenderedPartial(“其他部分”)
}
}

我知道可以从
default.htm
内部渲染
other_partial
,但在我的例子中,我试图保持
default.htm
不变,而将另一部分渲染为默认部分。

我在10月份的做法是在页面模板上用Twig中的一些逻辑处理这个问题。在我看来,这可能是最符合逻辑的地方。

我在10月份这样做的方式是在页面模板上用一些逻辑来处理这个问题。在我看来,这可能是最符合逻辑的地方。

您可以使用
renderPartial
方法

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

文档:

您可以使用
renderPartial
方法

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

文档:

页面模板上的逻辑可能类似于下面的代码,以决定应显示哪个部分

类似于(您需要检查语法,因为我最近没有使用它:

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

当然,您的页面中需要有一些逻辑来决定变量“other”是否存在。或者您可以对控制变量的特定值进行逻辑检查。页面模板上的逻辑可能与下面的代码类似,以决定应显示哪个部分

类似于(您需要检查语法,因为我最近没有使用它:

{% 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部分…

我仍在寻找不需要细枝的解决方案。我在组件中添加了一个设置,列出了模板文件夹下的所有文件

现在,我可以选择所需的模板文件,我希望,当我简单地像这样调用组件时:

{% component 'mycomponent' %}
它使用组件设置中定义的正确部分渲染组件

在我的组件的onRun()函数中可能有一些需要pu的代码,但找不到正确的代码


使用$content=$this->renderPartial('grid.htm');仍然呈现default.htm部分…

您应该告诉组件在呈现布局和页面后运行的
onRender()
上呈现部分:

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

使用@强制组件查找部分组件而不是主题组件!

您应该告诉组件在呈现布局和页面后运行的
onRender()
上呈现部分组件:

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

使用@强制组件查找部分组件而不是主题组件!

我试图为我的网站解决此问题,我想我已经找到了答案。在组件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);
}

我试图为我的网站解决这个问题,我想我已经找到了答案。在您的组件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);
}

谢谢,这是正确的方向。但是,默认标记仍然会被呈现,但是我可以像Chris V建议的那样用一些逻辑包含在部分中。Hanks,这是正确的方向。但是,默认标记仍然会被呈现,但是我可以像Chris V建议的那样用一些逻辑包含在部分中。你能给出吗举例说明如何使用页面模板?你能举个例子说明如何使用页面模板吗?谢谢,那会有用的。它的缺点是你不能在页面编辑器中“分叉”组件的默认标记(当然你可以,但它只能给出if逻辑)。无论如何,它是有效的!您能更详细地解释一下您的意思吗?在10月份,您可以在页面编辑器中通过单击小叉符号来加载默认标记。在这种情况下,标记只包含if-else逻辑,而不包含您要自定义的实际部分代码。您仍然可以手动复制它,因此它可以工作s、 但我最初的问题是想改变它——但我认为在10月份不可能,事实上,部分中的逻辑是可行的。事实上,你可以在部分本身中有逻辑(如果我记得正确的话,部分组件除外)。您也可以在PartialTransk中使用twig,这会起作用。它的缺点是您无法在页面编辑器中“分叉”组件的默认标记(当然可以,但它只能在逻辑上为您提供此功能)。无论如何,它是有效的!您能更详细地解释一下您的意思吗?在10月份,您可以在页面编辑器中通过单击小叉符号来加载默认标记。在这种情况下,标记只包含if-else逻辑,而不包含您要自定义的实际部分代码。您仍然可以手动复制它,因此它可以工作s、 但我最初的问题是想改变它,但我认为在10月份不可能,部分的逻辑实际上是可行的。事实上,你可以在部分本身有逻辑(如果我没记错的话,部分的组件除外)。你