vLIB
Mon, 01. January 2007 - 04:47:01 *
Welcome, Guest. Please login or register.
Did you miss your activation email?

Login with username, password and session length
News: Please register with your real name and do not post any SPAM!
 
   Home   Help Search Members Login Register  
Pages: [1]
  Reply  |  Print  
Author Topic: tmpl_if und variable values  (Read 548 times)
0 Members and 0 Guests are viewing this topic.
jermyn
SuperMod
Junior Member
**
Offline Offline

Posts: 11


View Profile WWW
on: Fri, 16. September 2005 - 18:18:29
Reply with quoteQuote

Hallo Claus und die anderen, die mitlesen.

Ich war bis jetzt eigentlich sehr begeistert von dem vLib Template System bis
ich heute auf eine Sache gestossen bin, die ich sehr komisch finde und f�r die ich keine L�sung gefunden habe. Wenn m�glich, dann schreibt mit bitte wenn Ihr eine Idee habt, wie ich das l�se. Sonst muss ich leider auf eine andere Template Engine umsteigen.

Das Problem liegt in einem HTML Select, den ich aufbauen will. Ich habe einen DB Loop, der das select baut. Jetzt m�chte ich nach der ersten Auswahl das gleiche Form wieder aufrufen und die Auswahl soll selektiert sein. Ich habe das so versucht:

Code:
select class=field name=fpid
tmpl_loop name=foerderprogramm
 � � option value={tmpl_var name=fpid} tmpl_if name=fpid op=== value=2selected/tmpl_if{tmpl_var name=fpname}
/option
/tmpl_loop
/select

Das Problem f�r den Select ist der Vergleich auf den statischen Wert. Ich brauche hier eine Variable in dem tmpl_if auf die ich vergleichen kann. Ich habe meine Variable aus dem abgesendeten Form in PHP abgefangen und auch mit setVar an vLIB �bergeben.

Im Forum habe ich auch schon die negative Antwort gelesen -> dass eben nur Strings unterst�tzt werden. Aber ich kann mir nicht vorstellen, dass noch niemand dieses Problem hatte.

�ber Antworten w�re ich sehr dankbar Da ich bis Montag dieses kleine Projekt fertig haben muss, muss ich mich bald entscheiden, welchen Weg ich gehe.

DANKE
Last Edit: Tue, 27. December 2005 - 15:52:48 by ClausVB Logged
jermyn
SuperMod
Junior Member
**
Offline Offline

Posts: 11


View Profile WWW
Reply #1 on: Mon, 19. September 2005 - 23:46:23
Reply with quoteQuote

Hallo Claus,

ich hab mir die vLIB Template Engine angepasst. Jetzt kann ich in den TMPL_IF auch gegen TMPL_VARS`s vergleichen.

Ich hab eben gelesen, dass du dich im Urlaub befindest. W�re nett, wenn du dich kurz melden w�rdest (nat�rlich nach deiner R�ckkehr) und wir kurz die �nderung besprechen k�nnen. Vielleicht war meine Aktion ja unn�tig, da du eine viel bessere L�sung kennst....

Gru� Werner
Logged
ClausVB
Administrator
Hero Member
*****
Offline Offline

Posts: 423



View Profile WWW
Reply #2 on: Tue, 20. September 2005 - 12:05:51
Reply with quoteQuote

Quote
Ich hab eben gelesen, dass du dich im Urlaub befindest. W�re nett, wenn du dich kurz melden w�rdest (nat�rlich nach deiner R�ckkehr) und wir kurz die �nderung besprechen k�nnen. Vielleicht war meine Aktion ja unn�tig, da du eine viel bessere L�sung kennst....
Ich kenne eine bessere L�sung, bin aber nicht sicher ob sie Dir gef�llt. Ich mache alle Vergleiche soweit es irgendwie geht in PHP. Nat�rlich ist es manchmal einfach praktischer mit TMPL_IF zu pr�fen, aber es widerspricht dem Gedanken von Templating, aufwendige
- SWITCH-CASE Strukturen
- IF Strukturen
mit Templating umzusetzen.

Ich mache also die meisten IF-Strukturen PHP-seitig und �bergebe dann dem Template nur noch Werte.

Beispiel:
Es gibt verschiedene Eskalations- oder Priorit�tslevel in einer DB (sagen wir 4 St�ck). Diese 4 St�ck k�nnen in der DB als Name stehen:
- Blau
- Gr�n
- Gelb
- Rot
oder als Zahlen
- 1, 2, 3, 4

Ich verwende meistens Zahlen (Primary Key) in solchen F�llen. Es gibt jetzt 2 Varianten das zu l�sen:

Code:
switch priority
{
    case 1
        prio_gif = blue.gif;
    break;
    case 2
        prio_gif = green.gif;
    break;
    case 3
        prio_gif = yellow.gif;
    break;
    case 4
        prio_gif = red.gif;
    break;
    default
        error_messageNO_PRIORITY;
}

und dann �bergibt man das GIF (den Text, das PDF, etc.) mit der Methode "setVar".

oder Du machst eine TMPL_IF, TMPL_ELSEIF Struktur

Code:
tmpl_if name=prio op=== value=1
 �blau
tmpl_elseif name=prio op=== value=2
 �gr�n
...
tmpl_else
 � Fehlermeldung Keine Prio gesetzt
/tmpl_if

Das INCLUDE-Prinzip: Wenn das oben genannte noch nicht ausreicht, kann man auch v�llig modular mit
- include header.php (benutzt das Template header.htm)
- include prio_blue.php (benutzt das Template prio_blue.htm)
usw. arbeiten. Damit teilt man nicht nur seine Seite in mehrere logische Bereiche auf, sondern man ist komplett unabh�ngig von der angesprochenen TMPL_IF Problematik, da alles v�llig wahlweise und modular zusammengestellt werden kann.

Ich verwende das INCLUDE-Prinzip auf meiner Homepage, um "Header", Navigation und "Footer" immer einzubinden, die verschiedenen Inhalte aber dynamisch aus ein DB. Der User bestimmt durch seinen Klick auf verschiedene Navigationspunkte, welche Datei inkludiert werden muss.

So kann ich mit vLIB sehr modular arbeiten. Kein Skript hat mehr als 20 Zeilen und jedes Skript bildet eine logische Einheit. Ich pers�nlich k�nnte sogar auf die Vergleichsm�glichkeiten von TMPL_IF verzichten, weil ich alle "komplizierten" IF-Strukturen in PHP mache.

Fazit: Du solltest Dein Problem also mit PHP und nicht mit TMPL_IF l�sen.

Ich hoffe, dass hilft Dir etwas.

Gru�
Claus
Last Edit: Tue, 20. September 2005 - 12:15:26 by ClausVB Logged
jermyn
SuperMod
Junior Member
**
Offline Offline

Posts: 11


View Profile WWW
Reply #3 on: Tue, 20. September 2005 - 14:59:02
Reply with quoteQuote

Hallo Claus,

ich sehe das ja genau so wie du.

Aber - ich versuche nat�rlich Code zu sparen - wie jeder. Deine L�sung erfordert ja eine Case Condition in PHP. Wenn ich jedoch eine Auswahlliste(select/option) eines Forms aus einer DB Tabelle mit Eintr�gen versorge, benutze ich nat�rlich sehr gerne die setDBLoop Funktion. Quasi perfekt. Nur das einzige Problem ist eben die selected Option zu setzen. Auf PHP Seite komme ich ja nicht mehr an die Daten ran, bzw. w�rde ja die sch�ne Funktion des setDBLoop ausser Kraft setzen, wenn ich von Hand den Loop aufbauen w�rde.

Siehst du meinen Punkt?
Logged
ClausVB
Administrator
Hero Member
*****
Offline Offline

Posts: 423



View Profile WWW
Reply #4 on: Wed, 21. September 2005 - 12:25:00
Reply with quoteQuote

Quote
Siehst du meinen Punkt?
Ich verstehe das sehr gut. Ich habe mich schon oft dar�ber ge�rgert, dass man mit "setdbloop" nicht ohne weiteres Datumsanzeigen (Unix-Timestamp => "Mittwoch, 21.09.2005") oder Konvertierungen machen kann. Aber das ist eben so. Man muss in solchen F�llen mit "array_push" arbeiten und das ist auch richtig so, weil wir sonst bei Smarty landen, wo man im Template
- FOREACH
- SUBSTRING
- regul�re Ausdr�cke
und vieles mehr unterst�tzt.

Immer wenn man in vLIB etwas aufbereiten m�chte, Daten ver�ndern m�chte, sollte man das mit PHP machen. Trotzdem habe ich vielleicht eine L�sung f�r Dich.

Hier in dem Forum gibt es zu jedem Post einen "author_name". Den m�chte ich jetzt in einem Template in Checkboxen umwandeln. Immer wenn der Autor gleich "ClausVB" ist, soll die Checkbox gesetzt sein:
Code:
SELECT author_name, IFauthor_name = ClausVB, 1, 0 AS boolean
FROM vlib_posts
Das gibt zur�ck:
Quote
paulfontfreide 0
vv 0
releasedj 0
ClausVB 1
releasedj 0
releasedj 0
ClausVB 1
releasedj 0
ClausVB 1
ClausVB 1
releasedj 0
Damit kann ich die Templatevariable "boolean" auf "checked" (oder "selected") setzen, wenn "boolean" == 1 ist.

Fazit (meine Meinung): Alles was SQL nicht kann, darf vom Template oder "setdbloop" nicht unterst�tzt werden. Solche F�lle m�ssen mit PHP und "array_push" gel�st werden.

Gru�
Claus
Last Edit: Wed, 19. July 2006 - 12:12:14 by ClausVB Logged
jermyn
SuperMod
Junior Member
**
Offline Offline

Posts: 11


View Profile WWW
Reply #5 on: Wed, 21. September 2005 - 12:31:52
Reply with quoteQuote

Clevere Idee

Hatte wohl mal wieder ein Brett vorm Kopf. Die Programmierung ins SQL zu velegen ist ja wirklich nicht bl�d. Ich denk mal dr�ber nach und werde das bei Gelegenheit mal austesten.

Werde jetzt aber wohl das schon abgegebene Projekt nicht mehr �ndern ;-)

Gru� Werner
Logged
ClausVB
Administrator
Hero Member
*****
Offline Offline

Posts: 423



View Profile WWW
Reply #6 on: Wed, 21. September 2005 - 12:44:43
Reply with quoteQuote

Quote
(...) Die Programmierung ins SQL zu velegen ist ja wirklich nicht bl�d. Ich denk mal dr�ber nach und werde das bei Gelegenheit mal austesten.
Dem stimme ich zu. Allerdings kann das gerade bei Datumskonvertierungen sehr aufwendig werden, wie folgender Post von Yaslaw Kowalejeff beweist.

Da arbeite ich lieber mit "vlibDate" und "array_push". Ich bleibe dabei ... Alles was SQL nicht kann, darf vom Template oder "setdbloop" nicht unterst�tzt werden. Solche F�lle m�ssen mit PHP und "array_push" gel�st werden.

Eine Template Engine wie Smarty will ich f�r vLIB nicht. Wenn Du aber solche IF-Strukturen haben willst und auch Datum im Template umwandeln m�chtest, dann solltet Du Dir TinyButStrong (Beispiele) ansehen.

Ich setze das f�r mein GPL Produkt "dl_stats 2.0" ein. Ich finde es allerdings 1.000 mal komplizierter als vLIB.

Gru�
Claus
Logged
ClausVB
Administrator
Hero Member
*****
Offline Offline

Posts: 423



View Profile WWW
Reply #7 on: Tue, 27. December 2005 - 15:51:33
Reply with quoteQuote

Nachtrag: Man kann eine Menge mit SQL l�sen und SETDBLOOP verwenden.

Code:
select_files = SELECT l_name, REPLACELEFTl_text, 400, a, <a AS substr_text FROM dl_licences ORDER BY l_name;
Bei meiner Applikation sollen alle HTML-Tags auch umgewandelt werden. Aus irgendwelchen Gr�nden haben
- Firefox
- und IE
aber Probleme mit einem ge�ffneten A-Tag (<a>), der dann auf einen </td> trifft. Also lasse ich mit MySQL die er�ffnenden A-Tags ersetzen.

Gru�
Claus
Logged
Pages: [1]
  Reply  |  Print  
 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1 RC2 | SMF © 2001-2005, Lewis Media Valid XHTML 1.0! Valid CSS!