Boardunity & Video Forum

Boardunity & Video Forum (https://boardunity.de/)
-   Programmierung und Datenbanken (https://boardunity.de/programmierung-datenbanken-f23.html)
-   -   SMARTY variable im {php} Bereich (https://boardunity.de/smarty-variable-php-bereich-t3347.html)

Dr.Schmidt 24.07.2005 14:05

SMARTY variable im {php} Bereich
 
Hallo erst mal!

Habe schon einige Zeit hier mitgelesen und muss sagen echt gutes Forum mit sehr vielen nütlichen Tipps!

Ok zu meinem Problem. Ich baue gerade an einer Seite die zwischen SuMa freundlichen und "normalen" Links umschalten kann. Als Template-Engine setze ich SMARTY ein - und hier fängt auch mein Problem an.

Wenn ich nun einen Link innerhalb eines dynamischen Template Bereichs (z. B. in einer smarty foreach-schleife) erzeugen will und dazu meine php function über {php} print url_funktion(); {/php} aufrufe dann kann ich diesem Bereich keine Variable aus der foreach schleife übergeben - zumindest konnte ich nicht rausfinden wie das geht. Kann mir jemand sagen ob das Funktioniert und wenn ja wie.

Ich hoffe die Frage ist verständlich formuliert - ansonsten einfach nachfragen ich versuchs dann nochmal :).

Danke

utopia 24.07.2005 14:26

Versuchs mal mit

$smarty->get_template_vars( 'name_der_smarty_variable');


cu

exe 24.07.2005 14:35

Warum erstellst du deine URL-Funktion nicht einfach als Smarty-Plugin? Dann kannst du sie via {url_funktion} im Template aufrufen und beliebige Parameter (Smarty-Variablen) übergeben.

In deinem PHP-Code bindest du die Funktion via $smarty->register_function('name_im_tpl', 'name_in_php'); ein. Die Funktion bekommt dann bei Aufruf ein Array übergeben in dem alle Parameter stehen.

Dr.Schmidt 24.07.2005 15:37

Zitat:

Zitat von exe
Warum erstellst du deine URL-Funktion nicht einfach als Smarty-Plugin? Dann kannst du sie via {url_funktion} im Template aufrufen und beliebige Parameter (Smarty-Variablen) übergeben.

In deinem PHP-Code bindest du die Funktion via $smarty->register_function('name_im_tpl', 'name_in_php'); ein. Die Funktion bekommt dann bei Aufruf ein Array übergeben in dem alle Parameter stehen.

Das hört sich sehr gut an - werde gleich mal auf der Smarty Seite danach suchen. Geht das auch mit Klassen? Die URL Funktion war nämlich nur ne Hilfsfunktion die ihrerseits auf meine url klasse zugegriffen hat... naja steht bestimmt im manual! Danke für den Tipp!!!

Gruß

Dr.Schmidt 24.07.2005 16:42

Hi,

ok die Beschreibung sieht ganz gut aus - aber ich mache wohl etwas bei der Umsetzung falsch. Sieht jemand bei nachfolgender Umsetzung einen Fehler? SMARTY schon:
Zitat:

(...)syntax error: custom function 'genURL' is not implemented (Smarty_Compiler.class.php, line 794) (...)
Wenn ich die Seite jedoch neu lade ist der Fehler weg und kommt erst wieder wenn ich das makefile erneut starte und damit den smarty cache neu schreibe...

So sieht meine Umsetzung aus:

in der php-Datei:
Code:

require_once("class_manageURL.inc.php");
$manURL = NEW manageURL;
$smarty->register_function("genURL", array(&$manURL, $smarty_genURL));

die function der Klasse manageURL:
Code:

function smarty_genURL($params, &$smarty) {
  return $this->genURL($params['section'], $params['paramString'], $params['anker']);
 }

im Template:
Code:

{genURL section="home" paramString="" anker=""}
Vielen Dank für eure Hilfe!

exe 24.07.2005 19:25

Zitat:

Zitat von Dr.Schmidt
$smarty->register_function("genURL", array(&$manURL, $smarty_genURL));

Enthält $smarty_genURL den Name der Funktion ("smarty_genURL")?

Code:

$smarty->register_function("genURL", array(&$manURL, "smarty_genURL"));
So sollte es funktionieren, ich verwende es auch auf diese Art.

Dr.Schmidt 25.07.2005 10:47

Zitat:

Zitat von exe
Enthält $smarty_genURL den Name der Funktion ("smarty_genURL")?

Code:

$smarty->register_function("genURL", array(&$manURL, "smarty_genURL"));
So sollte es funktionieren, ich verwende es auch auf diese Art.

Wenn mans richtig macht gehts sogar! :-) Darauf hätte ich auch selber kommen können. An der Stelle ist die SMARTY Doku aber etwas Verbesserungswürdig - mal sehen ob man sich da einbringen kann um Verbesserungen zu schreiben...

Vielen Dank nochmal für die schnelle und kompetente hilfe!


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:37 Uhr.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25