Boardunity & Video Forum

Boardunity & Video Forum (https://boardunity.de/)
-   Programmierung und Datenbanken (https://boardunity.de/programmierung-datenbanken-f23.html)
-   -   If-Abfragen in Templates (https://boardunity.de/if-abfragen-templates-t840.html)

Patrick Gotthardt 08.10.2003 18:44

If-Abfragen in Templates
 
Hi. Erstmal wollte ich gern ein Lob aussprechen. Gefällt mir hier sehr gut und versuche mich auch schon seit ein paar Tagen einzulesen. ^^"

Da ich gesehen habe, dass hier sehr viele Leute sind, die sich mit PHP usw. sehr gut auskennen wollte ich einfach mal um etwas hilfe bitten.

Ich würde mich nicht als vollkommenen Anfänger bezeichnen, aber so gut wie ihr bin ich noch nicht.
Zur Zeit versuche ich meine Fähigkeiten an einem Newssystem zu messen. Ist auch schon fast fertig und wenn ihr ehrlich bin find ich`s nicht schlecht... nur hat es imho ein Manko, dass ich einfach nicht beseitigt bekomme... und sind die Templates.
Ich habe dafür eine Klasse geschrieben die (imho) ganz gut ist. Habe auch einiges so gemacht, wie ich denke, dass es gut ist, aber bei den If-Abfragen in den Templates habe ich leider einigermassen grosse Probleme.
Ich habe nun schon eine entsprechende Funktion dafür geschrieben. Die Funktioniert auch, aber nicht so, wie ich es mir wünschen würde. So sind z.B. grösser/kleiner(&gleich) nicht möglich. ich kann also zZ. nur Strings nach gleich oder ungleich abfragen.
Deshalb wollte ich mal fragen, ob ihr mir eventuell dabei helfen könntet.
Also... so sieht`s momentan aus:
PHP-Code:

     function _ifelse($tpl) { 
                 if(
preg_match_all("`<\s*if\s*('|\")?([a-z0-9_-]+?)\\1\s*(==|<=|>=|<|>|!=)\s*('|\")?([a-z0-9_-]+?)\\4\s*>(.*?)<else>(.*?)</if>`is"$tpl$matchesPREG_SET_ORDER)) { 
            for(
$i=0$i count($matches); $i++) { 
                               eval(
"if(\$matches[\$i][2] ".$matches[$i][3]." \$matches[\$i][5]) { \$replace = \$matches[\$i][6]; } else { \$replace = \$matches[\$i][7]; } \$tpl = str_replace(\$matches[\$i][0], \$replace, \$tpl);");            
            } 
                 } 
        return 
$tpl
     } 

Ich sag schonmal danke an alle die mir da helfen. Weil ich hab da momentan keine Idee mehr... bzw. keine die nicht in einer Fehlerorgie enden... ^^"

worka 09.10.2003 11:55

Ich hab grad leider keine Zeit um detailiert auf dieses Problem einzugehen oder mich da reinzudenken. Aber ich benutze schon seit einiger Zeit die TemplateEngine Smarty. Damit hast du verdammt viele Möglichkeit offen. Unter anderem ist dort auch das IF-ELSE Problem enthalten. Wenn du lust hast, schau es dir an.

Link: http://smarty.php.net

Patrick Gotthardt 09.10.2003 12:15

Hi. Danke. Smarty kenne ich bereits, aber da ich lernen will ist es nicht optimal. Und abgesehen davon versuche ich dieses Templatesystem auf meine Bedürfnisse zu spezifizieren. Wenn ich jedesmal, wenn etwas nicht klappt auf etwas fertiges zurückgreife brauche ich überhaupt nichts zu Programmieren... deswegen frage ich lieber ob es jemanden gibt, der mir eventuell dabei hilft und mir meine Fehler zeigt, damit ich sie verstehen und vermeiden kann...

Wenn du keine Zeit hast ist das auch nicht weiter schlimm. Ich habe eine Frage gestellt und wenn mir jemand dabei hilft bin ich ihm sehr dankbar. Bis dahin reicht meine Lösung aus, obwohl sie leider viele Manko`s hat... (verschachtelte If-Abfragen klappen nicht, grössen Abfragen klappen nicht, usw.), aber immerhin funktioniert sie.
Also kann ich warten, bis jemand die Zeit hat mir zu helfen. Ich danke dir trotzdem sehr. ^^

Patrick Gotthardt 09.10.2003 17:12

Oh je... erstmal danke für die Antwort. ^^
Leider kann ich mit Template Compiling nichts anfangen... sorry. :(

Könntest du mir das bitte erklären? Danke.

Patrick Gotthardt 11.10.2003 08:20

mhh... das müsste ich dann aber mit eval ausführen oder? Das wollte ich eigentlich nicht, weil ich für Variablen eine Formatierung habe, die ich auch einheitlich beibehalten möchte... :(

Patrick Gotthardt 11.10.2003 09:41

hmm... da haste allerdings auch wieder recht... :(

Momentan ersetze ich Variablen über str_replace... das sollte den Speed doch eigentlich nicht zu sehr beanspruchen oder? (momentan auf localhost ~0.03 Sekunden - bei 2|3 Queries)

Oh man... da muss ich noch viel lernen....

Hmm... *puh*
Danke dir... dann werde ich mal gucken, ob ich das umbasteln kann... ^^

exe 11.10.2003 09:56

Der Geschwindigkeitsverlust fällt bei einem relativ simplen Template noch eher human aus. Eine Idee diesen Verlust auszugleichen wäre die Templates nach PHP zu kompilieren. D.h. jedesmal wenn ein Template geändert wurde wird es automatisch in ein PHP Script übersetzt. Um es dann anzuzeigen wird es einfach includet.

Beispiel:
Code:

<html>
<head>
<title>Blah</title>
</head>

<body>

Hallo <tpl $user>,
<br><br>
dein Benutzerstatus ist <tpl $userstatus>

</body>
</html>

würde dann in folgendes PHP-Script umgewandelt:

PHP-Code:

<html>
<head>
<title>Blah</title>
</head>

<body>

Hallo <?php echo $templatedata['user']; ?>,
<br><br>
dein Benutzerstatus ist <?php echo $templatedata['userstatus']; ?>

</body>
</html>

Die Smarty Template Engine baut auf dieses Prinzip aus und ich konnte mich da selbst bei komplizierten Templates nie über die Geschwindigkeit beschweren..

Patrick Gotthardt 12.10.2003 09:01

Hmm... hört sich auch logisch an... Danke. ^^

Ich werde mir mal eure Tips merken und gucken, was ich am besten Umsetzen kann.

Aber ich denke für ein Newssystem sollte meine Variante noch erträglich sein... ausserdem ist die Versionsnummer eh noch unter 1... ^^"

Also danke auf jedenfall. ^^
Werde eure Vorschläge mal austesten... bin gespannt, ob ich das hinbekomme... ^^"


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:11 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