2017-01-31 2 views
0

Я пытаюсь сделать приложение, используя эту фреймворк/CMS: October CMS. Я читаю documentation, и я не могу найти то, что хочу; он говорит:PHP Framework: OctoberCMS - переменная область Confusion

Тег {% set%} может использоваться для установки переменных внутри шаблона.

{% набор activePage = «блог»%}

Я хочу, чтобы добавить дополнительный частичный или по умолчанию добавьте его в макете, если переменная истинна в домашней странице. В шаблоне Blade вы можете использовать только @yield('partial') и, не делая этого, не будет генерировать исключение, в Twig templating он делает. Так что я сделал следующее:

В layout.htm файла:

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

В home.htm, который использует этот макет:

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

Вопрос: Частично не включается и относится к переменной, которая не находится в той же переменной. Я знаю, что относится к сфере охвата, потому что я также пытался сделать что-то вроде:

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

Это прекрасно работает ... Любые идеи? Заранее спасибо.

ответ

1

Решение состоит в передаче переменных в частичное. См OctoberCMS документации: https://octobercms.com/docs/cms/partials#partial-variables

{% partial "partial" flipbook=flipbook %} 

Внутри парциальное, переменные могут быть доступны, как и любой другой разметки переменной:

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

{% set variableName = 'data' %} с учетом конкретного контекста, то есть, что переменная будет существовать только в контексте он установлен, если вы не передадите его в другой контекст, как это предложил Пьер-Андре.

В вашем случае вы хотите иметь доступ к этой переменной на своей странице, а не частично, поэтому вам нужно будет добавить эту переменную в контекст рендеринга Twig, а не только в контексте вашего макета. Для этого вам нужно будет использовать шаблон PHP Section, чтобы добавить переменную в контекст Twig.

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

Альтернативы всего это было бы связать вашу функциональность в plugin component, а затем просто добавить этот компонент к любой странице необходима.

Смежные вопросы