在Octobercms blogPosts组件我想传递一个变量。我想使用以下命令更改postsPerPage值:
{variable name="blog_postnumber" label="postnumber" tab="postnumber" type="number"}{/variable}
在静态布局上。所以我希望能够在静态页面上使用此字段更改postsPerPage组件值。
我使用部分与blogPosts组件。在组件postsPerPage字段我插入变量。
postsPerPage = "{{ blog_postnumber }}"
然后我尝试在我的静态页面上的字段中插入一个数字但是不起作用。关于如何在组件上传递变量的任何想法?
将你的变量/属性传递给组件will be used or not
非常棘手,如果在组件的onRender
方法中获取该属性,它将被使用,如果它在onRun
上使用则不会被使用。 (其OctoberCMS设计)
对于
blogPosts
组件,它在onRun
所以当你通过像这样的{% component 'blogPosts' postsPerPage="2" %}
属性它将不会被使用,但为了处理这个我们需要其他解决方法
(1)对于你所包含的组件
blogPosts
,你需要使用param中的属性。检查屏幕截图。
(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());
}
}
并在标记部分字段中
{variable name="blog_postnumber" label="postnumber" tab="postnumber" type="number"}{/variable}
(3)现在你可以开始使用它设置变量值我们在代码部分默认设置它5,覆盖它指定页面的postnumber字段部分中的值
它将开始工作。
如有疑问请评论。