[gelöst] Smarty Function hinzufügen

Hallo zusammen, ich möchte eine Smartyfunktion, welche Variableninhalte verändert (Umlaute und Sonderzeichen ersetzt) integrieren. Aber in welcher Datei muss ich diese Funktion einbauen, dass ich diese nachher in den Templates nutzen kann? Danke Gruß ottscho

[quote=“ottscho”]Hallo zusammen, ich möchte eine Smartyfunktion, welche Variableninhalte verändert (Umlaute und Sonderzeichen ersetzt) integrieren. Aber in welcher Datei muss ich diese Funktion einbauen, dass ich diese nachher in den Templates nutzen kann? Danke Gruß ottscho[/quote] Da musst Du im Verzeichnis “engine\Enlight\Vendor\Smarty\libs\plugins” eine “modifier”- oder “function”-Funktion entwickeln (dürfte für Deinen Zweck wohl ein “modifier” sein…)

Danke für die AW. Ich habe es nun so versucht: 1.) Die Datei “modifiercompiler.cleanname.php” mit folgendem Inhalt erstellt: [code]<?php function smarty_modifiercompiler_cleanname($params, $compiler)
{
$umlaute = Array(“ä”, “ö”, “ü”, “Ä”, “Ö”, “Ü”, “ß”);
$umlauts = Array(“ae”, “oe”, “ue”, “Ae”, “Oe”, “Ue”, “ss”);

//umlaute umwandeln z.b. ä => ae, ö => oe $params[0] = str_replace($umlaute, $umlauts, $params[0]); //string in kleinbuchstaben umwandeln $params[0] = mb_strtolower($params[0], “UTF-8”); //sonstige sonderzeichen durch underscore ersetzen $params[0] = preg_replace( ‘|[^a-zA-Z0-9]|s’, ‘_’, $params[0] ); //leerzeichen durch underscore ersetzen $params[0] = str_replace(" ", “_”, $params[0]); return $params[0]; } ?>[/code] 2.) In einer Template-Datei versucht dies auszuführen: class="{cleanname var=$item.description}" So funktioniert es leider nicht. Rufe ich die Funktion überhaupt richtig auf? Muss ich die Datei “modifiercompiler.cleanname.php” noch irgendwie registrieren, oder wird die automatisch erkannt? Gibt es ein Tutorial dazu? Danke dir. Gruß ottscho

[quote=„ottscho“]Danke für die AW. Ich habe es nun so versucht: So funktioniert es leider nicht. Rufe ich die Funktion überhaupt richtig auf? Muss ich die Datei „modifiercompiler.cleanname.php“ noch irgendwie registrieren, oder wird die automatisch erkannt? Gibt es ein Tutorial dazu? Danke dir. Gruß ottscho[/quote] Kein Wunder, denn „modifiercompiler“ wird nur während der compilation verwendet… Du brauchst einen „modifier.“

okay, gleiches Spiel. Ich habe nun meine Datei „modifier.cleanname.php“ mit folgendem Inhalt: [code]<?php function smarty_modifier_cleanname($string)
{
$umlaute = Array(„ä“, „ö“, „ü“, „Ä“, „Ö“, „Ü“, „ß“);
$umlauts = Array(„ae“, „oe“, „ue“, „Ae“, „Oe“, „Ue“, „ss“);

//umlaute umwandeln z.b. ä => ae, ö => oe $string = str_replace($umlaute, $umlauts, $string); //string in kleinbuchstaben umwandeln $string = mb_strtolower($string, „UTF-8“); //sonstige sonderzeichen durch underscore ersetzen $string = preg_replace( ‘|[^a-zA-Z0-9]|s’, ‘_’, $string ); //leerzeichen durch underscore ersetzen $string = str_replace(" ", „_“, $string); return $string; } ?> [/code] Bekomme nun diese Fehlermeldung (unknown tag „cleanname“): [code] Fatal error: Uncaught exception ‚SmartyCompilerException‘ with message 'Syntax Error in template „/kunden/117539_78141/webseiten/shop2/templates/tutorial/frontend/index/menu_left.tpl“ on line 6 "

  • " unknown tag „cleanname“’ in /kunden/117539_78141/webseiten/shop2/engine/Enlight/Vendor/Smarty/libs/sysplugins/smarty_internal_templatecompilerbase.php:404 Stack trace: #0 /kunden/117539_78141/webseiten/shop2/engine/Enlight/Vendor/Smarty/libs/sysplugins/smarty_internal_templatecompilerbase.php(229): Smarty_Internal_TemplateCompilerBase->trigger_template_error(‚unknown tag "cl…‘, 6) #1 /kunden/117539_78141/webseiten/shop2/engine/Enlight/Vendor/Smarty/libs/sysplugins/smarty_internal_templateparser.php(2221): Smarty_Internal_TemplateCompilerBase->compileTag(‚cleanname‘, Array) #2 /kunden/117539_78141/webseiten/shop2/engine/Enlight/Vendor/Smarty/libs/sysplugins/smarty_internal_templateparser.php(2656): Smarty_Internal_Templateparser->yy_r38() #3 /kunden/117539_78141/w in /kunden/117539_78141/webseiten/shop2/engine/Enlight/Vendor/Smarty/libs/sysplugins/smarty_internal_templatecompilerbase.php on line 404 [/code]

Hallo, du musst die Plugins im Smarty registrieren. in den Versionen vor 3.0 war das auf jeden Fall so. Ich glaube aber in der jetztigen Smarty-Version ist das wieder so. Dazu musst du mal schauen, wo das Smarty instanziert wird und dort noch das Plugin registrieren. $smarty-\>register\_modifier("cleanname", "cleanname"); Viele Grüße Thomas

Okay… jetzt ist nur noch nie frage in welcher Datei :wink:

Hallo, okay, ich würde das ganze anders machen und nicht in den plugins-Ordner vom Smarty rein schreiben. Schau mal in den Ordner engine/Englight/Enlight/Template/Plugins Dort findest du die ganzen Smarty-Plugins. Schreib das ganze mal lieber da hinein. Und wenn mich dann nicht alles täuscht, brauchst du den Modifier auch nicht mehr registrieren. Viele Grüße Thomas

Danke für deine Hilfe. Aber leider komme ich nicht weiter. Habe die Datei nun in deinen Ordner kopiert. Aber Fehlmerldung bleibt erhalten: [code]Fatal error: Uncaught exception ‚SmartyCompilerException‘ with message 'Syntax Error in template „/kunden/117539_78141/webseiten/shop2/templates/tutorial/frontend/index/menu_left.tpl“ on line 6 "

  • " unknown tag „cleanname“’ in /kunden/117539_78141/webseiten/shop2/engine/Enlight/Vendor/Smarty/libs/sysplugins/smarty_internal_templatecompilerbase.php:404 Stack trace: #0 /kunden/117539_78141/webseiten/shop2/engine/Enlight/Vendor/Smarty/libs/sysplugins/smarty_internal_templatecompilerbase.php(229): Smarty_Internal_TemplateCompilerBase->trigger_template_error(‚unknown tag "cl…‘, 6) #1 /kunden/117539_78141/webseiten/shop2/engine/Enlight/Vendor/Smarty/libs/sysplugins/smarty_internal_templateparser.php(2221): Smarty_Internal_TemplateCompilerBase->compileTag(‚cleanname‘, Array) #2 /kunden/117539_78141/webseiten/shop2/engine/Enlight/Vendor/Smarty/libs/sysplugins/smarty_internal_templateparser.php(2656): Smarty_Internal_Templateparser->yy_r38() #3 /kunden/117539_78141/w in /kunden/117539_78141/webseiten/shop2/engine/Enlight/Vendor/Smarty/libs/sysplugins/smarty_internal_templatecompilerbase.php on line 404 [/code]

[quote=“ottscho”]Danke für deine Hilfe. Aber leider komme ich nicht weiter. Habe die Datei nun in deinen Ordner kopiert. Aber Fehlmerldung bleibt erhalten: [code]Fatal error: Uncaught exception ‘SmartyCompilerException’ with message 'Syntax Error in template “/kunden/117539_78141/webseiten/shop2/templates/tutorial/frontend/index/menu_left.tpl” on line 6 "

  • " unknown tag “cleanname”’ in /kunden/117539_78141/webseiten/shop2/engine/Enlight/Vendor/Smarty/libs/sysplugins/smarty_internal_templatecompilerbase.php:404 Stack trace: #0 /kunden/117539_78141/webseiten/shop2/engine/Enlight/Vendor/Smarty/libs/sysplugins/smarty_internal_templatecompilerbase.php(229): Smarty_Internal_TemplateCompilerBase->trigger_template_error(‘unknown tag "cl…’, 6) #1 /kunden/117539_78141/webseiten/shop2/engine/Enlight/Vendor/Smarty/libs/sysplugins/smarty_internal_templateparser.php(2221): Smarty_Internal_TemplateCompilerBase->compileTag(‘cleanname’, Array) #2 /kunden/117539_78141/webseiten/shop2/engine/Enlight/Vendor/Smarty/libs/sysplugins/smarty_internal_templateparser.php(2656): Smarty_Internal_Templateparser->yy_r38() #3 /kunden/117539_78141/w in /kunden/117539_78141/webseiten/shop2/engine/Enlight/Vendor/Smarty/libs/sysplugins/smarty_internal_templatecompilerbase.php on line 404 [/code][/quote] Wie hast Du den “modifier” im Template verwendet? Normalerweise ist das so: {$IRGENDEINE_SMARTY_VARIABLE|mein_modifier}
1 „Gefällt mir“

Hallo, also registrieren braucht man das Plugin nicht weiter. Wie ich sehe rufst du den modifier so auf: {cleanname var=$item.description}??? Richtig wäre, wie avenger schon geschrieben hat: {$item.description|cleanname} Viele Grüße Thomas

2 „Gefällt mir“

Hat funktioniert. Vielen dank euch beiden.