Modulvariablen in Code und Templates nutzen

in  Basics , ,

Modulvariablen in Code und Templates nutzen

Dieser Beitrag gibt eine kurze Einführung in die Verwendung von Modulvariablen. Diese können dazu verwendet werden, bestimmte Parameter in einem Modul einstellbar zu machen. Typische Beispiel hierfür sind etwa Grenzwerte oder API-Keys für Drittdienste.

Nutzung im Code

Die wichtigsten Grundfunktionen werden von Zikula durch die ModUtil-Klasse bereitgestellt.

1
2
3
4
5
ModUtil::hasVar($modname, $name)
ModUtil::getVar($modname, $name = '', $default = false)
ModUtil::setVar($modname, $name, $value = '')
ModUtil::setVars($modname, array $vars)
ModUtil::delVar($modname, $name = '')

Innerhalb von Klassen, die von Zikula_AbstractBase erben, zum Beispiel in Controller- und API-Klassen, gibt es außerdem Convenience-Methoden, die auf die oben genannten ModUtil-Methoden verweisen.

1
2
3
4
5
6
$this->setVar($key, $value='')
$this->setVars(array $vars)
$this->getVar($key, $default=false)
$this->getVars()
$this->delVar($key)
$this->delVars()

Nutzung im Template

Zikula stellt per Standard jedem Template alle Modulvariablen zur Verfügung. Diese können direkt als Variable benutzt werden. Die folgenden Beispiele beziehen sich auf Smarty, noch nicht auf Twig.

Meine ModVar: {$modvars.MeinModul.meineVariable}

Falls man nicht davon ausgehen kann, dass die Variable korrekt initialisiert wurde, sollte man einen Standardwert vorgeben.

Meine ModVar: {$modvars.MeinModul.meineVariable|default:'abc'}

Falls man außerdem nicht davon ausgehen kann, dass das Modul überhaupt verfügbar ist, zum Beispiel weil man eine Variable in einem vom Modul unabhängigen Template einsetzen möchte, sollte man dies entsprechend prüfen.

{assign var='myVar' value='abc'}
{* entweder *}
{modavailable modname='MeinModul' assign='hasMeinModul'}
{if $hasMeinModul}
    {assign var='myVar' value=$modvars.MeinModul.meineVariable|default:'abc'}
{/if}
{* oder *}
{if isset($modvars.MeinModul)}
    {assign var='myVar' value=$modvars.MeinModul.meineVariable|default:'abc'}
{/if}

Die zweite Variante ist hierbei im Vergleich zur ersten nicht ganz so sauber, weil sie auch dann die Variable des Moduls verwendet, wenn dieses zwar installiert, aber auf inaktiv gestellt ist. In dem Falle sollte eigentlich eher abc verwendet werden.

Weitere Beiträge in Kategorie Basics

Einfaches JS-Management mit ImportMaps in neuer Symfony AssetMapper-Komponente
- Im Symfony-Ökosystem werden Frontend-Komponenten seit einiger Zeit zunehmend über UX-Komponenten verarbeitet. Auch wenn hierdurch einige Anbelange vereinfacht werden, ist doch oftmals der Aufbau einer …
Symfony UX im Kontext von ModuleStudio
- Stimulus und Symfony UX Ein JavaScript-Ökosystem für Symfony wurde bereits Ende 2020 gestartet. Vereinfacht ausgedrückt wurde Symfony Flex erweitert, um auch JavaScript-Anteile in einem Bundle leicht …
Das Buch zu Symfony ist in einer neuen Version erschienen
- Bereits im Jahr 2020 haben wir das Buch “Symfony: The Fast Track” hier vorgestellt. Nun ist eine neue Auflage bereitgestellt worden, welche auf den Stand für Symfony 5.4 und 6.0 gebracht …
Symfony und API Platform starten offiziellen Docker-Support
- Seit knapp einem Monat steht eine umfangreiche Unterstützung zur Docker-basierten Arbeit mit Symfony bereit. Hierbei gibt es Neuerungen in mehreren zentralen Werkzeugen, die ineinander greifen und …
Optische Varianzen mit SCSS-Maps umsetzen
- In vielen Weblayouts ist es notwendig, unterschiedliche Ausprägungen einer bestimmten kosmetischen “Stellschraube” zu realisieren. So können etwa einzelne Akzentfarben je nach Unterseite, …