Smarty prefilter einsetzen

Diskussionen zur Smarty-Template-Engine
Post Reply
User avatar
dc2
Forum Members
Forum Members
Posts: 116
Joined: Tue Jun 02, 2009 8:21 pm

Smarty prefilter einsetzen

Post by dc2 »

Hallo, ich möchte gern einen Smarty-prefilter einsetzen, um Anker-Links (also z.B. Testlink) durch den entsprechenden anchor-Tag zu ersetzen (also {anchor anchor="blubb" text="Testlink"}).

Siehe Edit weiter unten

Meine Datei (prefilter.replaceanchor.php) sieht dabei so aus:

[noparse]function smarty_prefilter_replaceanchor($tpl_source, &$smarty)
{
   return preg_replace('/(.+)/', '{anchor anchor="$1" text="$2"}', $tpl_source);
}

Wenn ich diese Datei jetzt im Ordner /lib/smarty/plugins ablege und in der/lib/content.functions.php per

$this->autoload_filters = array('pre' => array('replaceanchor'));[/noparse]

einbinde, wird das Plugin zwar geladen (ein echo "blubb"; wird angezeigt), allerdings wird mein Link nicht durch den entsprechenden Anker ersetzt.

Kann mir da jemand helfen? (Der reguläre Ausdruck sollte funktionieren, habe es im RegexBuddy getestet).



Edit: Mir kommt grad so der Gedanke, dass dieser prefilter garnicht auf den Seiteninhalt angewendet wird sondern nur auf das Template o.O

Edit2: In der Tat, habe es gerade ausprobiert - wenn ich einen Anker im Template habe, wird der korrekt umgewandelt. Allerdings steht dann auch nur der {anchor}-Tag in der Ausgabe und nicht der durch Smarty ersetzte :D


Weiß jemand, wie ich mein Vorhaben, anders lösen kann? Also dass, bevor Smarty den Content zu fassen bekommt, alle Anker-Links durch den {anchor}-Tag ersetzt werden, sodass Smarty diesen dann wieder in einen korrekten Link umsetzen kann?
Ich weiß nicht, wie ich es z.B. mit einem User-Tag umsetzen sollte.
Last edited by dc2 on Wed Jul 08, 2009 3:04 pm, edited 1 time in total.
cyberman

Re: Smarty prefilter einsetzen

Post by cyberman »

So falsch war dein Ansatz gar nicht, nur in der Ausführung noch nicht ganz optimal.

Zum einen - CMSms bietet auch hier eine einfache Lösung; das Herumschrauben an den Core-Dateien ist nicht erforderlich. Du musst prefilter.replaceanchor.php nur anstelle nach lib/Smarty/plugins nach /plugins kopieren. Der Prefilter wird dann automatisch geladen und ausgeführt. Du musst nur noch

Code: Select all

function smarty_cms_prefilter_replaceanchor($tpl_source, &$smarty)
in

Code: Select all

function smarty_cms_prefilter_replaceanchor($tpl_source, &$smarty)
ändern.

Zum anderen funktioniert dein Snippet noch nicht ganz so, wie es soll (zumindest bei mir nicht). Hier eine bei mir funktionierende Variante:

Code: Select all

<?php
function smarty_cms_prefilter_replaceanchor($tpl_source, &$smarty)
{
   return preg_replace('/<a href="#([A-Za-z0-9\\._-]+)">(.+)<\/a>/', "{anchor anchor='$1' text='$2'}", $tpl_source);
}
?>
Danke an Andiministrator für die schnelle Regex-Hilfe :)!
User avatar
dc2
Forum Members
Forum Members
Posts: 116
Joined: Tue Jun 02, 2009 8:21 pm

Re: Smarty prefilter einsetzen

Post by dc2 »

Viele Dank für die schnelle Hilfe!

Ja bei /plugins hatte ich die Datei auch schonmal drin - aber vermutlich hat es aufgrund der anscheinend Regex nicht richtig funktioniert. Jetzt klappt alles, wie es soll - dankeschön :)

Hab fürher selbst schonmal mit Smarty rumgebastelt und hab die Datei deshalb erst in den Smarty-Plugin-Ordner getan xD
Wusste nicht, dass es so einfach geht  :D
Last edited by dc2 on Thu Jul 09, 2009 11:44 am, edited 1 time in total.
Post Reply

Return to “Smarty-Tipps und -Tricks”