Template: Negierung von object access als block variable nicht möglich

  • Hoffe die Überschrift triffts einigermaßen^^


    Folgendes funktioniert:

    Code
    {lang canEdit=!$isGuest}{/lang}


    folgendes nicht:

    Code
    {lang canEdit=!$user->isGuest()}{/lang}


    Es kommt der Fehler:
    Fatal error: Template compilation failed: unexpected '->' in tag '!$user->isGuest()' in template


    Ohne ! funktioniert es wie gewünscht.

  • Das Problem scheint noch etwas größer zu sein.


    Auch wenn es bei einfachen Variablen kompiliert, ist der kompilierte Code falsch:

    PHP
    <?php $this->tagStack[] = array('lang', array('canEdit' => '!$isGuest')); ob_start(); ?>


    Ohne ! wird es wie folgt kompiliert:

    PHP
    <?php $this->tagStack[] = array('lang', array('canEdit' => $this->v['isGuest'])); ob_start(); ?>
  • Der Parser hat seine Grenzen, bestimmte Konstrukte sind damit leider nicht möglich. Nutze einfach eine temporäre Variable via {assign} dafür.

    Das ist jetzt auch mein Workaround :)
    Hatte gehofft, das dies einmal funktionieren wird. ;)

    • Official Post

    Hatte gehofft, das dies einmal funktionieren wird. ;)

    Das wird wahrscheinlich auch in Zukunft nicht kommen, der Parser ist bereits extrem komplex und die möglichen Seiteneffekte selbst kleinster Änderungen sind nicht absehbar. Da es alternative Konstrukte gibt um dies zu bewerkstelligen, sehen wir auch keinen Grund uns auf dieses Wagnis einzulassen ("risk vs reward").

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!