2017-01-31 3 views
0

Ich versuche, eine Anwendung mit diesem Framework/CMS: Oktober CMS. Ich lese die documentation und ich kann nicht finden, was ich erreichen möchte; Sie lautet:PHP Framework: OctoberCMS - Variable Scope Confusion

Mit dem Tag {% set%} können Variablen innerhalb der Vorlage festgelegt werden.

{% Sets Active = 'Blog'%}

Ich mag einen optionalen Teil oder standardmäßig hinzufügt es im Layout hinzufügen, wenn eine Variable in der Startseite wahr ist. In Blade Templating können Sie nur @yield('partial') verwenden und dadurch würde keine Ausnahme ausgelöst, in Twig Templating tut es dies. Also habe ich folgendes:

Im Layout.htm Datei:

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

Im home.htm, die dieses Layout verwendet:

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

Das Problem: Das Partial wird nicht eingeschlossen und bezieht sich auf die Variable, die nicht im selben Variablenbereich liegt. Ich weiß, dass auf den Umfang bezieht, weil ich auch etwas zu tun, wie ich versuchte:

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

Dies funktioniert gut ... Irgendwelche Ideen? Danke im Voraus.

Antwort

1

Eine Lösung besteht darin, Variablen an Ihren Teil zu übergeben. OctoberCMS-Dokumentation: https://octobercms.com/docs/cms/partials#partial-variables

{% partial "partial" flipbook=flipbook %} 

Innerhalb der Teil können Variablen wie jedes andere Markup Variable zugegriffen werden:

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

{% set variableName = 'data' %} ist kontextspezifisch, dh diese Variable nur im Kontext existieren wird, dass Es wird gesetzt, es sei denn, Sie geben es an einen anderen Kontext weiter, wie von Pierre-André vorgeschlagen.

In Ihrem Fall möchten Sie Zugriff auf diese Variable in Ihrer Seite haben, keine partielle, also wollen Sie die Variable zum Twig-Rendering-Kontext selbst hinzufügen, nicht nur den Kontext Ihres Layouts. Um dies zu tun, müssen Sie die PHP Section der Vorlage verwenden, um Ihre Variable zum Twig-Kontext hinzuzufügen.

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

Eine Alternative dazu wäre alles Ihre Funktionalität in ein plugin component zu bündeln und dann fügen Sie einfach diese Komponente auf das, was Seite er braucht.