templates
diplomsiedler
- php
Hallo,
dank fastix verwende ich momentan das folgende script:
$importfile = fopen("template.html" , "r" );
#Die Datei wird zum lesen geöffnet.
$str = fread ($importfile);
#Jetzt steht der Inhalt von template.html in $str.
fclose($importfile);
$template = str_replace("[NAME]",$name,$str);
#Ersetze in $str "[NAME]" durch $name
Wobei $name zuvor aus einer Datenbank gelesen wird.
Wie kann ich mehrere Felder aus der Datenbank in $str schreiben. Geht das? Z.B. will ich auch noch [VORNAME] ersetzen?
Danke,
diplomsiedler
Hallo diplomsiedler,
$template = str_replace("[NAME]",$name,$str);
#Ersetze in $str "[NAME]" durch $nameWobei $name zuvor aus einer Datenbank gelesen wird.
Wie kann ich mehrere Felder aus der Datenbank in $str schreiben. Geht das? Z.B. will ich auch noch [VORNAME] ersetzen?
was spricht denn dagegen, die gleiche Funktion einfach nochmal mit anderen Parametern zu verwenden?
Grüße aus Darmstadt,
Benjamin
for ($i=1; $i<5 ; $i++)
{
$row = mysql_fetch_object ($result);
$name[$i] = $row->name;
$urlname[$i] = $row->urlname;
$offerID[$i] = $row->offerID;
$merchantCategory[$i] = $row->merchantCategory;
# Ersetzen der Platzhalter im Template
$template = str_replace("[NAME]",$name[$i],$str);
# Ersetze in $str "[NAME]" durch $name[$i]
$template = str_replace("[merchantCategory]",$merchantCategory [$i],$str);
$template = str_replace("[offerID]",$offerID[$i],$str);
[...]
Hier taucht das Problem auf. Der Austausch findet immer nur mit der letzten Variable statt. Hier also die [offerID]. Was mache ich falsch?
Danke im Voraus und Gruß aus Hamburg,
diplomsiedler
Hallo diplomsiedler,
# Ersetzen der Platzhalter im Template
$template = str_replace("[NAME]",$name[$i],$str);
# Ersetze in $str "[NAME]" durch $name[$i]$template = str_replace("[merchantCategory]",$merchantCategory [$i],$str);
$template = str_replace("[offerID]",$offerID[$i],$str);
[...]
Hier taucht das Problem auf. Der Austausch findet immer nur mit der letzten Variable statt. Hier also die [offerID]. Was mache ich falsch?
Logisch, weil du den Rückgabewert der Funktion str_replace immer wieder in $template schreibst, im Funktionsaufruf selbst aber $str als zu bearbeitenden String angibst, das kann ja nicht funktionieren. Ersetze alle Vorkommnisse von "$template" durch "$str" oder umgekehrt, und dein Problem dürfte behoben sein.
Grüße aus Darmstadt,
Benjamin
Logisch, weil du den Rückgabewert der Funktion str_replace immer wieder in $template schreibst, im Funktionsaufruf selbst aber $str als zu bearbeitenden String angibst, das kann ja nicht funktionieren. Ersetze alle Vorkommnisse von "$template" durch "$str" oder umgekehrt, und dein Problem dürfte behoben sein.
Irgendwie habe ich das nun auch geschnallt, aber datt bekomme ich nicht.
diplomsiedler
Ersetze alle Vorkommnisse von "$template" durch "$str" oder umgekehrt, und dein Problem dürfte behoben sein.
Wie denn?
Hallo diplomsiedler,
Ersetze alle Vorkommnisse von "$template" durch "$str" oder umgekehrt, und dein Problem dürfte behoben sein.
Wie denn?
$template = str_replace("[NAME]",$name[$i],$str);
$template = str_replace("[merchantCategory]",$merchantCategory [$i],$template);
^^^^^^^^^
$template = str_replace("[offerID]",$offerID[$i],$template);
^^^^^^^^^
Überlege mal, wie Dein voriger Code reagiert hätte:
Ersetzung $str $template
[NAME] [NAME] [Category] [offerID] Hans [Category] [offerID]
[Category] [NAME] [Category] [offerID] [NAME] irgendeine [offerID]
[offerID] [NAME] [Category] [offerID] [NAME] [Category] 24678
Du musst natürlich immer mit dem Ergebnis der vorigen Ersetzung weitermachen, sonst kann es nicht funktionieren.
Christian
Christian, ich danke Dir!
!!!Dieses Forum ist und bleibt - dank seiner User - einfach das Beste!!!
Gruß,
diplomsiedler
Hier taucht das Problem auf. Der Austausch findet immer nur mit der letzten Variable statt. Hier also die [offerID]. Was mache ich falsch?
Mist.
$exportfile = fopen($DateiNeu , "w+" ) ;
#Die Datei wird zum schreiben geöffnet.
fputs($exportfile,$template) ;
#In die Datei wird der Inhalt geschrieben
fclose($exportfile) ;
# und geschlossen
Hier taucht der Fehler aus.
Also ich bekomme es nicht hin die Mehr als eine Variable im Template zu ersetzen.
diplomsiedler
Moin!
$template = str_replace("[NAME]",$name,$str);
#Ersetze in $str "[NAME]" durch $namewas spricht denn dagegen, die gleiche Funktion einfach nochmal mit anderen Parametern zu verwenden?
Da spricht die Tatsache dagegen, dass das nicht allgemeingültig verwendet werden kann. Was ist, wenn in der ersten Operation der Platzhalter mit einem Wert ersetzt wird, der später wieder als gültiger Platzhalter angesehen wird?
Also: [NAME] wird durch "[VORNAME]" ersetzt, und dann wird [VORNAME] (und auch der schon ersetzte [NAME]) durch einen Vornamen ersetzt - nicht unbedingt wünschenswert.
- Sven Rautenberg
Hallo Sven,
Da spricht die Tatsache dagegen, dass das nicht allgemeingültig verwendet werden kann. Was ist, wenn in der ersten Operation der Platzhalter mit einem Wert ersetzt wird, der später wieder als gültiger Platzhalter angesehen wird?
ja, es ist zwar richtig, dass dadurch garantiert Probleme auftreten werden, aber dann muss man als Programmierer irgendwie sicherstellen, dass eine solche Syntax vom verarbeitenden Skript maskiert wird und sowas nicht passieren kann. Template-Engines arbeiten doch ähnlich, oder? (Ich habe mich noch mit keiner näher befasst, daher weiß ich das nicht genau). Ich persönlich halte das daher eher für ein geringeres Problem.
Grüße aus Darmstadt,
Benjamin