将变量传递给Octobercms blogPosts组件

时间:2019-03-25 23:26:29

标签: php laravel twig octobercms

在Octobercms blogPosts组件上,我想传递一个变量。我想使用以下方式更改postsPerPage值:

{variable name="blog_postnumber" label="postnumber" tab="postnumber" type="number"}{/variable}

关于静态布局。因此,我希望能够在静态页面上使用此字段更改postsPerPage组件值。

我使用带有blogPosts组件的部分组件。在组件postsPerPage字段上,我插入变量。

postsPerPage = "{{ blog_postnumber }}"

然后,我尝试在静态页面的字段中插入一个数字,但无法正常工作。关于如何在组件上传递变量的任何想法?

1 个答案:

答案 0 :(得分:0)

如果在组件的will be used or not方法中获取了该属性,将使用您传递给变量onRender的变量/属性,这将非常棘手,如果在onRun上使用了该属性,它将不会使用。 (其OctoberCMS设计)

  

blogPosts中用于onRun组件,因此当您传递{% component 'blogPosts' postsPerPage="2" %}这样的属性时,将不会使用它,但是要处理此问题,我们需要其他解决方法


  对于部分中包含的组件blogPosts

(1),您需要使用param中的属性。检查屏幕截图。

enter image description here

  

(2)在静态布局的代码部分中,您需要添加此代码

public function onStart() {
    $statiPage = $this->page->apiBag['staticPage'];
    // default posts per page
    $defaultBlogPost = 5;
    if(isset($statiPage->viewBag['blog_postnumber'])) {
        // fetching value from the page field
        $defaultBlogPost = intVal($statiPage->viewBag['blog_postnumber']);
        $router = $this->getRouter();
        // combine with existing params
        $router->setParameters(['myBlogPerPage' => $defaultBlogPost] + $router->getParameters());
    }               
}

enter image description here

在标记部分字段中

{variable name="blog_postnumber" label="postnumber" tab="postnumber" type="number"}{/variable}

enter image description here

  

(3)现在,您可以开始使用它设置变量值了,我们默认在代码部分 5 对其进行设置,以覆盖它,在页面的postnumber字段部分中指定值< / p>

enter image description here

它将开始工作。

如有疑问,请发表评论。