Smarty, gutes Design und die Trennung von Logik, Inhalt und Form

Smarty, gutes Design und die Trennung von Logik, Inhalt und Form

am 04.12.2006 12:53:04 von Stefan+Usenet

Wuerde mich interessieren, ob solche Dinge immer nur mir
passieren...

Gegeben ist ein Formular, das (neben diversen Eingabefeldern) auch
einen rein deskriptiven Freitext enthaelt. Das Programmsystem
verwendet Smarty, das betreffende Feld wird mit:

|
| Beschreibung
| {$Description|escape:"html"|nl2br}
|

sauber und elegant angezeigt. Nun kommt allerdings eine Erweiterung,
die es ermoeglicht, innerhalb der Beschreibung auszufuellende
Luecken zu definieren - die Luecken sind in der Notation &012, &022,
&032, ... gekennzeichnet (die Notation stammt aus einer Norm, ist
hier aber nicht weiter von Belang). Durch:

| $tpl['searchpattern'] = '/&0?(\d{1,2})2/';

und

|
| Beschreibung
| {$Description|escape:"html"|nl2br|regex_replace:$searchpatte rn:""}
|
|

bekomme ich das gewuenschte Eingabefeld. Mit etwas gutem Willen kann
ich sogar das noch als elegant bezeichnen, wobei mit die fehlende
Moeglichkeit, "}" direkt im Template einzugeben (der Smarty-Parser
scheint da etwas schwach auf der Brust zu sein), schon ziemlich
stoert, da ich mich nun in PHP ploetzlich wieder um HTML-Entities
kuemmern muss.

Aaaaber: im Sinn der Benutzerfreundlichkeit sollte das Eingabefeld
natuerlich auch noch ein value="{$oldValue|escape:"html"}" besitzen.
Und da hakt es, denn in den Parameter von "regex_replace" bekomme
ich keine weitere Variable mehr hinein - bzw. weiss ich nicht, wie
ich die Zeile dafuer schreiben muesste.

Eine Variable $x koennte man (was ich ueberraschend genug finde) im
Template immer noch mit

| value=\"$x\"

ansprechen. Hier geht es allerdings nicht um skalare Variablen,
sondern um Felder, konkret um das, was man ausserhalb des Strings
mit

| {$gap[$1]|escape:"html"}

ansprechen wuerde, und _wenn_ es dafuer noch eine Notation gibt,
kenne ich sie nicht...

Wie loese ich das Problem, ohne im Programm den HTML-Quelltext zu
erzeugen und im Template umaskiert auszugeben?


(Alle Beispiele sind vom Problem abstrahiert und koennen daher
Tippfehler enthalten; ich bitte ggf. um Verzeihung)

Servus,
Stefan

--
http://kontaktinser.at/ - die kostenlose Kontaktboerse fuer Oesterreich

Stefan. Für prächtige Apokalypsen in hurtigen Stürmen!
(Sloganizer)

Re: Smarty, gutes Design und die Trennung von Logik, Inhalt und Form

am 05.12.2006 15:16:34 von 5j3aphpja3

Hallo Stefan,

Stefan Froehlich schrieb:
> [...] Wie loese ich das Problem, ohne im Programm den HTML-Quelltext zu
> erzeugen und im Template umaskiert auszugeben?

ich denke in so einem Fall sollte man ein Plugin bzw. einen Modifier
schreiben, der mit Parametern gefüttert wird.

Von Fall zu Fall kannst Du diesen so parametrisiert erstellen, dass
mehrere Fälle abgefangen werden können.

http://smarty.php.net/manual/de/plugins.functions.php

Gruss

Hartmut

Re: Smarty, gutes Design und die Trennung von Logik, Inhalt und Form

am 05.12.2006 22:42:39 von Stefan+Usenet

On Tue, 05 Dec 2006 15:16:34 +0100 Hartmut König wrote:
> > [...] Wie loese ich das Problem, ohne im Programm den HTML-Quelltext zu
> > erzeugen und im Template umaskiert auszugeben?

> ich denke in so einem Fall sollte man ein Plugin bzw. einen Modifier
> schreiben, der mit Parametern gefüttert wird.

Ja, da hast Du wahr - irgendwie habe ich daran nicht gedacht, aber
auf die Art wird es sogar halbwegs elegant.

Servus,
Stefan

--
http://kontaktinser.at/ - die kostenlose Kontaktboerse fuer Oesterreich

Freude in allen Herzen. Mit Stefan. Ein verwundetes Vergnügen!
(Sloganizer)