将变量传递给Octobercms blogPosts组件

问题描述 投票:0回答:1

在Octobercms blogPosts组件我想传递一个变量。我想使用以下命令更改postsPerPage值:

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

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

我使用部分与blogPosts组件。在组件postsPerPage字段我插入变量。

postsPerPage = "{{ blog_postnumber }}"

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

php laravel twig octobercms
1个回答
0
投票

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

对于blogPosts组件,它在onRun所以当你通过像这样的{% component 'blogPosts' postsPerPage="2" %}属性它将不会被使用,但为了处理这个我们需要其他解决方法


(1)对于你所包含的组件blogPosts,你需要使用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字段部分中的值

enter image description here

它将开始工作。

如有疑问请评论。

© www.soinside.com 2019 - 2024. All rights reserved.