PHP框架:OctoberCMS - 可变范围混淆

时间:2017-01-31 13:08:20

标签: php variables scope twig octobercms

我正在尝试使用此框架/ CMS制作应用:10月CMS。我正在阅读documentation而我无法找到我想要完成的事情;它说:

  

{%set%}标记可用于在模板中设置变量。

     

{%设置activePage ='博客'%}

我想添加一个可选的partial,或者默认情况下,如果主页中的变量为true,则将其添加到布局中。在Blade模板中,你可以只使用@yield('partial')并且不这样做就不会抛出异常,在Twig模板中也是如此。所以我做了以下事情:

layout.htm 文件中:

{% set flipbook = true %}
... some code

在使用该布局的 home.htm 中:

{% if flipbook %}
   {% partial 'partial' %}
{% endif %}
... some code

问题:不包含partial,它指的是不在同一变量范围内的变量。我知道这涉及范围,因为我也尝试过这样的事情:

{% set flipbook = true %}
{% if flipbook %}
   {% partial 'partial' %}
{% endif %}
... some code

这很有效......有什么想法吗?提前谢谢。

2 个答案:

答案 0 :(得分:2)

解决方案是将变量传递给您的部分。请参阅OctoberCMS文档:https://octobercms.com/docs/cms/partials#partial-variables

 {% partial "partial" flipbook=flipbook %}

在部分内部,可以像任何其他标记一样访问变量 变量:

<p>Name: {{ flipbook.name }}</p>

答案 1 :(得分:0)

{% set variableName = 'data' %}是特定于上下文的,即该变量仅存在于其设置的上下文中,除非您按照Pierre-André的建议将其传递给另一个上下文。

在您的情况下,您希望能够访问页面中的变量,而不是部分变量,因此您需要将变量添加到Twig渲染上下文本身,而不仅仅是布局的上下文。为此,您需要使用模板的PHP Section将变量添加到Twig上下文中。

url = "/blog"
layout = "default"
==
<?
function onStart()
{
    $this['flipbook'] = true;
}
?>

所有这一切的替代方法是将您的功能捆绑到plugin component,然后将该组件添加到任何需要它的页面。