So verwenden Sie eine globale Variable zur Steuerung der Ausgabe

Dieser Artikel beschreibt, wie Sie eine globale Variable definieren und je nach Variablenwert die Ausgabe beeinflussen.

Am Beispiel eines unterschiedlichen Designs für Sommer und Winter zeigen wir Ihnen eine Möglichkeit, wie Sie die Ausgabe abhängig von den Jahreszeiten beeinflussen können. Diese Beispielumsetzung basiert auf der BASE 1.x! Bei aktuellen Projektumsetzungen der BASE 2.x  werden bereits standardmässig im Body-Tag Klassen gesetzt, auf die Sie sich beziehen können.

Beim Einsatz unter einem älteren Projekt (BASE 1.x) lesen sie bitte weiter:

Benennen Sie über die standard.wParams.php die globale Variable (z.B. designSwitcher).

Beispiel: Auszug aus /[IHR-LAYOUT-PROJEKT]/wGlobal/layout/templates/misc/standard.wParams.php

<?php $version="1.0"; $encoding="UTF-8"; ?>
<?php exit; ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:wslPre="http://weblication.de/5.0/wsl" xmlns:wslPost="http://weblication.de/5.0/wsl" xmlns:wslEditorPre="http://weblication.de/5.0/wsl" xmlns:wsl="http://weblication.de/5.0/wsl" xmlns:wd="http://weblication.de/5.0/wd" xmlns:php="http://php.net/xsl" exclude-result-prefixes="wd wslEditorPre wslPre wslPost wsl php" version="1.0">
  
  <!-- ... -->
  <xsl:variable name="designSwitcher"><xsl:value-of select="php:functionString('wEnv::getGlobalValue', 'designSwitcher')" /></xsl:variable>

</xsl:stylesheet>

Diese gobale Variable müssen Sie nun mit einem Wert befüllen, um diese in der Ausgabe nutzen zu können. Den Wert setzen Sie in der pre.php Ihres Projektes. Achten Sie darauf, die Abfrage vor der eigentlichen Ausgabe der Seite zu setzen ($preResult).

Das Beispiel greift hierzu auf Objekt-Daten zu, die über die Metadaten-Maske bearbeitbar sind (wd:object/wd:data[@id='design']).

Beispiel: Auszug aus /[IHR-LAYOUT-PROJEKT]/wGlobal/layout/scripts/pre.php

...
// Design-Switcher Sommer/Winter
wEnv::setGlobalValue('designSwitcher', wDocumentData::getData($_SERVER['PHP_SELF'], "/wd:document/wd:extension/wd:object/wd:data[@id='design']/text()"));
...

Der Vorteil bei Verwendung von Objekt-Daten liegt darin, dass die Tags automatisch bei Bearbeitung einer Seite geschrieben werden. Die Definition der Pflegefelder in der Metadaten-Maske kann z.B. wie folgt aussehen:

Beispiel: Auszug aus /[IHR-LAYOUT-PROJEKT]/wGlobal/layout/templates/editmasks/standard.metadata.php

...
<div class="wEditorExtensionLabel">Designtyp</div>
<div class="wEditorExtensionValue"><!--web:text:start editor="select" values="|summer|winter" texts="|Sommer|Winter" onchange="wEditor.saveDraftAndReload()" --><xsl:value-of select="/wd:document/wd:extension/wd:object/wd:data[@id='design']/text()"/><!--web:text:stop--></div>
...

Nun können Sie die Ausgabe abhängig vom eingestellten Design-Typ einer Seite beeinflussen.

Sollen z.B. unterschiedliche CSS-Dateien für die Ausgabe der Sommer-/Winter-Seiten verwendet werden, setzen Sie abhängig vom Wert der globalen Variable eine andere CSS-Datei.

Beispiel: Auszug aus /[IHR-LAYOUT-PROJEKT]/wGlobal/layout/templates/misc/includes.global.php

...
<xsl:choose> 
  <xsl:when test="$designSwitcher = 'summer'">
    <link rel="stylesheet" type="text/css" href="{$wGlobalProjectPath}/wGlobal/layout/styles/designsummer.css"/>
  </xsl:when>  
  <xsl:when test="$designSwitcher = 'winter'">
    <link rel="stylesheet" type="text/css" href="{$wGlobalProjectPath}/wGlobal/layout/styles/designwinter.css"/>
  </xsl:when>       
  <xsl:otherwise>
    <link rel="stylesheet" type="text/css" href="{$wCSSPath}"/>
  </xsl:otherwise>
</xsl:choose>
...

Dies lässt sich auch verkürzen, indem Sie den Dateinamen der CSS-Datei je nach globaler Variable setzen. Die möglichen CSS-Dateien legen Sie im angegebenen Pfad der CSS-Dateien ab (z.B. zur bestehenden design.css die designwinter.css und designsummer.css).

Beispiel: Auszug aus /[IHR-LAYOUT-PROJEKT]/wGlobal/layout/templates/misc/includes.global.php

...
<link rel="stylesheet" type="text/css" href="{$wGlobalProjectPath}/wGlobal/layout/styles/design{$designSwitcher}.css"/>
...