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.