Smarty template prüfen ob Variable vorhanden ist

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Smarty template prüfen ob Variable vorhanden ist

    Hallo Community,

    habe da ein kleines Problem/Frage. Habe dazu leider in der docu von Smarty nichts gefunden.
    Gibt es eine Möglichkeit ein smarty template zu überprüfen ob eine bestimmte variable z.b im template footer vorahnden ist. z.b {$copyright}

    das ganze natürlich im phpscript und nicht im Template selber.

    Vielleicht hat ja jemand eine Idee wie man dies am besten umsetzen könnte.

    Vielen Dank!

    lg
    Dragon
  • besten dank für deine Antwort. Leider steht dort nicht viel beschrieben so das ich doch noch etwas ahnungslos bin :)

    wäre mein gedanke so richtig oder habe ich es falsch verstanden.

    Quellcode

    1. // get assigned template var 'foo'
    2. $myVar = $smarty->get_template_vars('copyright');
    3. if (isset($myVar)){
    4. echo "Copyright ist vorhanden";
    5. }else{
    6. echo "Copyright ist nicht vorhanden";
    7. }


    Mein vorhaben ist quasi das geprüft wird ob die Variable {$copyright} im templatres/footer.html vorhanden ist. Wenn nicht soll er einen error erzeugen... sozusagen um zu verhindern das die variable entfernt wird.
  • Aaah. Mit der Funktion kannst du prüfen, ob die Variable an das Template übergeben wurde. Du möchtest aber wissen, ob die Variable verwendet wird.

    hmm, eine Funktion wüsste ich dazu nicht. Du könntest das Template halt auslesen (file_get_contents) und dann per Regex /\{variablenname\}/ schauen, ob diese vorhanden ist.

    Quellcode

    1. $template = file_get_contents("template");
    2. if( preg_match("/\{variablenname\}/", $template) ){
    3. die("Variable 'variablenname' vorhanden");
    4. }
    5. else{
    6. die("'vartiablenname' nicht vorhandeN");
    7. }
    Jan Thurau
    Software and Systems Engineer
    janthurau.de

    [Blockierte Grafik: http://www.pageheroes.com/media/image/pageheroes_logo.png] - We get your page working!

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Jan Thurau ()

  • Es ist vermutlich etwas umständlich und gleichzeitig ungetestet. Denoch könnte man es so versuchen, falls du Smarty 3.x.x benutzt. Ich habe das ganze unter 3.1.8 gefunden.

    Smarty-Templates werden normalerweise kompiliert um das Parsen der Templates einzusparen. Der Parser sitzt in der Datei "$smartypath/sysplugins/smarty_internal_templateparser.php". Wenn man sich mal in "Smarty_Internal_Templateparser" die Methode "compileVariable" anguckt, dürfte schnell klar sein, dass hier die Variablen rausgefischt werden um sie in PHP Sourcecode zu verwandeln.

    Hier die Zeilen, die wir suchen.

    Quellcode

    1. public function compileVariable($variable) {
    2. if (strpos($variable,'(') == 0) {
    3. // not a variable variable
    4. $var = trim($variable,'\'');
    5. $this->compiler->tag_nocache=$this->compiler->tag_nocache|$this->template->getVariable($var, null, true, false)->nocache;
    6. $this->template->properties['variables'][$var] = $this->compiler->tag_nocache|$this->compiler->nocache;
    7. }
    8. // return '(isset($_smarty_tpl->tpl_vars['. $variable .'])?$_smarty_tpl->tpl_vars['. $variable .']->value:$_smarty_tpl->getVariable('. $variable .')->value)';
    9. return '$_smarty_tpl->tpl_vars['. $variable .']->value';
    10. }


    Wenn du jetzt noch deine Smarty Template-Klasse (bei dir mit Sicherheit "Smarty_Internal_Template" in "$smartypath/sysplugins/smarty_internal_template.php") so tweakst, dass sie eine Methode (sagen wir "acceptVariable($variable)") hat. Dann kannst du diese mit

    Quellcode

    1. $this->template->acceptVariable($variable)
    in der Parserklasse aufrufen um sie der Templateklasse zu übergeben.

    Der geänderte Code in Smarty_Internal_Templateparser sieht dann so aus:

    Quellcode

    1. public function compileVariable($variable) {
    2. if (strpos($variable,'(') == 0) {
    3. // not a variable variable
    4. $var = trim($variable,'\'');
    5. $this->compiler->tag_nocache=$this->compiler->tag_nocache|$this->template->getVariable($var, null, true, false)->nocache;
    6. $this->template->properties['variables'][$var] = $this->compiler->tag_nocache|$this->compiler->nocache;
    7. }
    8. // return '(isset($_smarty_tpl->tpl_vars['. $variable .'])?$_smarty_tpl->tpl_vars['. $variable .']->value:$_smarty_tpl->getVariable('. $variable .')->value)';
    9. $this->template->acceptVariable($variable);
    10. return '$_smarty_tpl->tpl_vars['. $variable .']->value';
    11. }
    Alles anzeigen


    Ich hoffe du kannst mit diesem Konzept etwas anfangen.

    Edit: Nachteil daran ist natürlich, dass die Variablen nur beim Kompilieren rausgefischt werden. Man müsste diese also so speichern, dass sie später mit dem Template assoziiert werden.
    IMP, out.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von TheIMP ()