#1 27. Februar 2007 cms - code problem Moin ich habe vor, mir ein kleines Cms zu schreiben. Ich lade ein Template, in dem die platzhalter so dargestellt werden: PHP: <@ und PHP: @> Das template wird so eingelesen: PHP: $filename = $base [ 'template' ]; $fp = fopen ( $filename , "r" ); $template = fread ( $fp , filesize ( $filename )); fclose ( $fp ); Dann wird "<@title@>" im template durch den Name des cms erstetzt. Der name wird aus dem array $base['title'] geladen. PHP: $template = str_replace ( $base [ 'tag_start' ]. 'title' . $base [ 'tag_end' ], $base [ 'title' ], $template ); Dann wird das ganze teil ausgegeben: PHP: echo $template ; Nur leider wird <@title@> nicht durch den title von base['title'] ersetzt. Hat jemand eine idee, woran das liegen könnte ? thx schonmal :] + Multi-Zitat Zitieren
#2 27. Februar 2007 AW: cms - code problem Sieht mir danach aus, als würde in $base['tag_*'] nicht das richtige drin stehen. Reguläre Ausdrücke sind übrigens bequemer. PHP: function callback ( $tag ) { global $base ; return $base [ $tag ]; } $template = preg_replace_callback ( '#<@[a-z0-9]@>#iU' , 'callback' , $template ); Damit werden in einem Rutsch alle Platzhalter durch die passenden Werte aus $base ersetzt + Multi-Zitat Zitieren
#3 27. Februar 2007 AW: cms - code problem oder du schreibst ne funktion: function tpl($tpl) { fopen $tpl fread echo } tpl("name"); + Multi-Zitat Zitieren
#4 27. Februar 2007 AW: cms - code problem Was soll das bringen? Ist doch keine funktionale Verbesserung. + Multi-Zitat Zitieren
#5 27. Februar 2007 AW: cms - code problem man könnte es auch gleich im preq_replace_callback unter bringen: PHP: $template = preg_replace_callback ( '#<@[a-z0-9]@>#iU' , // -------------------------------------------------------------------------- create_function ( 'global $base;' , 'return $base[$tag];' ), // -------------------------------------------------------------------------- $template ); und wenn man mit class arbeitet kann man aufs global verzichten + Multi-Zitat Zitieren
#6 2. März 2007 AW: cms - code problem wozu dient bei Code: $template = preg_replace_callback('#<@[a-z0-9]@>#iU', dieses iU am ende? + Multi-Zitat Zitieren
#7 2. März 2007 AW: cms - code problem PHP: Mögliche Modifikatoren in RegEx-Suchmustern - Manual + Multi-Zitat Zitieren
#8 3. März 2007 AW: cms - code problem ok.. scheint so zu klappen ! danke an alle ... ich habe jetzt aber ein neues problem...... ich lade eine datei, in der das hier als string steht : $base['title'] = 'test'; hat jemand eine idee, wie ich "test" ersetzen könnte ? Es muss natürlich dynamisch bleiben, also darf schonmal kein "test" drin vorkommen.. + Multi-Zitat Zitieren
#10 3. März 2007 AW: cms - code problem ich suche eine möglichkeit, um die variable $base['title'] = 'irgendwas'; zu ändern und wieder in die datei zu schreiben. Zb. gibt der benutzer im admin-cp bei "titel des forums" "test" ein. Dann soll die datei geladen werden, $base['title'] = 'irgendwas'; soll zu $base['title'] = 'test' verändert werden und die datei soll wieder abgespeichert werden... + Multi-Zitat Zitieren
#11 3. März 2007 AW: cms - code problem Ah, habs verstanden. Statischen PHP-Coder zu ändern ist recht umständlich. XML ist da als Format komfortabler, da es dafür verschiedene Bibliotheken (libxml, SimpleXML, XMLReader/XMLWriter) gibt. Die eleganteste Variante ist aber, die Sprachdaten einfach in einer Datenbank abzulegen. Dann kannst du mit einem simplen SQL-Query deine Sprachdaten ändern. + Multi-Zitat Zitieren
#12 3. März 2007 AW: cms - code problem Geht auch mit php ganz einfach PHP: $new_text = "<? \ $base = ".var_export( $base , true)." ?>"; $handle = fopen ('./libs/config.inc.php', "wb"); fwrite ($handle, $new_text, strlen($new_text)); fclose ($handle); @chmod ('./libs/config.inc.php', 0777); + Multi-Zitat Zitieren