Du bist nicht angemeldet. Der Zugriff auf einige Boards wurde daher deaktiviert.

#1 15. Juni 2014 20:27

Kronat
hat von CMS/ms gehört
Registriert: 15. Juni 2014
Beiträge: 2

[GELÖST] Kein Zugriff auf Variable mit '$smarty->get_template_vars' - warum?

Hallo,

vielleicht kann mir jemand weiterhelfen, ich finde keinen Ansatz woran es liegen könnte.

Für ein Update einer älteren Version von CMSMS auf die jetzt installierte Version 1.11.10 ist es erforderlich
Variablen, welche über Werte  aus {content} im template definiert werden, in php weiterzuverarbeiten. Der Umweg über UDT ist in diesem Fall allerdings nicht möglich.     

Vereinfacht stellt sich die Situation so dar:

Es wird im Template eine Variable mit Wert definiert, z.B.:

{assign var="variable01" value="wert01"}

in php wird die Variable dann wie folgt abgefragt:

{php}
$variable = $smarty->get_template_vars("variable01");
{/php}

Das Ergenis ist, dass CMSMS an dieser Stelle die weitere Kompilierung der Seite abricht. Eine Fehlermeldung gibt es nicht (debug=on)
Aber warum? Was ist daran falsch?
Laut Smarty-Dokumentationen wäre dies die korrekte Vorgehensweise.
Generell bricht CMSMS immer die Kompilierung ab, wenn versucht wird auf Smarty-Variablen von PHP aus zuzugreifen. 

Folgendes habe ich ebenfalls probiert:

{variable01 = 'wert01'}
{capture variable='variable'}{$variable01}{/capture}

{php}
$gCms = cmsms();
$variable = $gCms->GetSmarty()->getTemplateVars('variable');
echo "Test: ".$variable;
{/php}

Allerdings erfolgt auf diese Weise gar keine Reaktion. weder wird die Variable ausgegeben, noch erscheint eine Fehlermeldung im debug.

CMSMS läuft auf PHP 5.3 (Ubuntu 12.04), aber ich denke daran kann es nicht liegen.

Bin für jeden Tip dankbar!

Offline

#2 16. Juni 2014 22:06

Andynium
Moderator
Ort: Dohna / SN / Deutschland
Registriert: 13. September 2010
Beiträge: 7.017
Webseite

Re: [GELÖST] Kein Zugriff auf Variable mit '$smarty->get_template_vars' - warum?

Kronat schrieb:

Laut Smarty-Dokumentationen wäre dies die korrekte Vorgehensweise.

Hmm, dann hast du evtl möglicherweise einen entscheidenden Teil überlesen wink.

Die Verwendung von {php}{/php} ist zum einen deprecated und nur noch via SmartyBC Klasse möglich und zum anderen per default deaktiviert.

Früher gab es für die Aktivierung in der config.php einen Parameter

$config['use_smarty_php_tags'] = false;

Mit der CMSMS Version 1.11 wurde die jedoch entfernt, so dass du nunmehr in die Core-Dateien rein müsstest, um dies wieder zu aktivieren.

Was genau soll denn mit der Variable passieren? Vllt findet sich eine andere Lösung ...

Offline

#3 16. Juni 2014 14:57

Kronat
hat von CMS/ms gehört
Registriert: 15. Juni 2014
Beiträge: 2

Re: [GELÖST] Kein Zugriff auf Variable mit '$smarty->get_template_vars' - warum?

Hallo Cyberman, vielen Dank für Deine schnelle Rückmeldung.

Dies hat mich indirekt zur Lösung geführt. Ich hatte übersehen, dass sich die deutsche Smarty_Dokumentation auf www.smarty.net nur auf Version 2 bezieht. Die englischsprachige Dokumentation ist aktueller (Version 3). Dort ist auch der {php}-Tag als deprecated angegeben..

Nun klappt es auch mit der Übergabe von Smartyvariablen an ein php-skript und auch vom php-Skript an Smarty!
Das ist super und eigentlich, wenn man einmal weis wie, ganz einfach..
(Das Code-Snippet dazu lasse ich lieber weg, da es ja nicht verwendet werden soll..) 

Allerdings klappte eben nur mit einem {php}include /pfad/machwas.php{/php} im Template.
Es werden allerdings nur externe php-dateien aufgerufen, welche Formularvalidierungen, dynamisch erzeugte Datenbankabfragen, unterschiedliche Menügenerierung u.ä. durchführen und wieder Variablenwerte an Smarty zurückgeben.
Ich sehe da eigentlich auch nichts verwerfliches dabei. Content, Layout und Programmierung sind sauber voneinander getrennt. Sowohl Conent als auch Programmcode kann schnell und komfortabel mit einem Editor per FTP bearbeitet werden.

Zumindestens läuft jetzt mit der aktuellen Version 1.11.10 wieder alles wie es soll und der Content wird korrekt generiert und angezeigt.
Wenn es praktikable, sinnvollere Lösungsmöglichkeiten gibt als Php-Dateien per include einzubinden
bin ich für Ratschläge diesbezüglich natürlich dankbar.

Offline

#4 16. Juni 2014 18:53

owr_web
Server-Pate
Registriert: 16. Dezember 2010
Beiträge: 543

Re: [GELÖST] Kein Zugriff auf Variable mit '$smarty->get_template_vars' - warum?

sollte ja auch iirc mit einem UDT - benutzerdefinierten Tag - doch möglich sein.
Wenn der Pfad immer derselbe ist (oder auch wenn nicht) kannst du den include in den UDT auslagern und z.B. als Variable den Namen (oder auch mit Pfad) der php-Datei mitgeben.
Somit kann die Datei jederzeit hochgeladen/geändert werden und der Editierende für die jeweilige Seite braucht nur mehr den UDT mit der entsprechenden Variable aufrufen.

Du musst also den Core nicht ändern (welcher mit jedem Update wieder zu ändern ist) und du hast den Vorteil dass nicht jeder, der keine Ahnung hat was er tut es doch tut was er nicht tun soll.

Offline

#5 17. Juni 2014 09:04

Andynium
Moderator
Ort: Dohna / SN / Deutschland
Registriert: 13. September 2010
Beiträge: 7.017
Webseite

Re: [GELÖST] Kein Zugriff auf Variable mit '$smarty->get_template_vars' - warum?

Kronat schrieb:

Ich hatte übersehen, dass sich die deutsche Smarty_Dokumentation auf www.smarty.net nur auf Version 2 bezieht. Die englischsprachige Dokumentation ist aktueller (Version 3).

Danke für den Hinweis - werd auf der Webseite etwas deutlicher darauf hinweisen.

Offline

#6 24. Juni 2014 22:07

Andynium
Moderator
Ort: Dohna / SN / Deutschland
Registriert: 13. September 2010
Beiträge: 7.017
Webseite

Re: [GELÖST] Kein Zugriff auf Variable mit '$smarty->get_template_vars' - warum?

cyberman schrieb:

Früher gab es für die Aktivierung in der config.php einen Parameter

$config['use_smarty_php_tags'] = false;

Mit der CMSMS Version 1.11 wurde die jedoch entfernt, so dass du nunmehr in die Core-Dateien rein müsstest, um dies wieder zu aktivieren.

Hast du den Konfigurationsparameter mal ausprobiert und auf true gesetzt?

Hmm, scheinbar stimmt das changelog nicht oder ich hab etwas falsch verstanden. Gerade mal in der class.CMSSmartySecurityPolicy.php, Zeile 49 geschaut

    $this->allow_php_tag = $config['use_smarty_php_tags'];

Ergo sollte der Konfigurations-Parameter noch funktionieren.

Offline