#1 16. Mai 2012 Zuletzt bearbeitet: 16. Mai 2012 Hallo Leute, ich bin gerade dabei etwas zu verweifeln. Ich bin im Moment dabei ein Menu Management Modul zu schreiben. Dabei soll dem Benutzer ermöglicht werden, im Adminbereich eine struktur vorzugeben. Beispeil: HTML: [HEAD] <h4>menu.title</h4> <span>menu.image</span> [/HAED] [BODY] <div><span>item.url</span></div> [CHILDREN] <div> item.title </div> [FOREACH] <li><span>item.url</span></li> [FOREACH] [/CHILDREN] [/BODY] [FOOTER] <div class="footer"></div> [FOOTER] soo..soweit ganz gut. Funktioniert alles wunder bar. Der string wird mittels preg_match_all gefiltert und nach Segmenten getrennt. Danach werden dieser gefiltert und es wird geguckt, ob Params(item.xxxx) vorhanen sind. Hier kommt der Knackpunkt. Wie bekomme ich es nun am besten hin, dass dieser nach einer Überüprüfung PHP: preg_replace ( "#menu.([a-zA-Z]+)#si" , "HierSOllDasMenuArrayHin" , $string ) mit den werden aus dem Array ersetzt werden. Die Daten füe das Menu sind in der $this->menu gespeichert. Im Falle der Items ist es genau so $this->items. Es Muss ja theoretisch so ablaufen, dass die Items mit foreach durchlaufen werden, und für jedes Item die Struktur die z.B. in der [FOREACH]....[/FOREACH] enthalten ist, ersetzt wird also z.B. item.title in MenuElementTest etc. Ich kriege es i-wie mit preg replace nicht hin. Ich habe es auch schon mit preg_replace_callback versucht. Es sieht dann so aus. PHP: preg_replace_callback ( "#item.([a-zA-Z]+)#si" ,array( $this , "replace" ), $string ) public function replace ( $eingabe ) { foreach( $this -> item as $item ) if( is_array ( $eingabe )) foreach( $eingabe as $key ) return $item [ $key ] } und da liegt auch i-wie das Problem. würd mich freuen, wenn jemand nen Vorschlag zu hätte wie man das ganze am besten umsetzen könnte. EDIT wenn ich es versuch so zu lösen: PHP: $array =array( "url" => "test" ); return preg_replace ( "#menu.([a-zA-Z]+)#si" , $array . "['$1']" , $string ); bekomme ich die Fehlermeldung Code: Array to string conversion mfg atkaz + Multi-Zitat Zitieren
#2 16. Mai 2012 AW: problem mit preg_replace Hm du kannst natürlich nicht das Array mit dem String gleichsetzen. Da du einen Key im Array nutzt probiere es doch mal so: PHP: $array =array( "url" => "test" ); return preg_replace ( "#menu.([a-zA-Z]+)#si" , $array [ 'url' ]. "['$1']" , $string ); + Multi-Zitat Zitieren
#3 16. Mai 2012 Zuletzt bearbeitet: 16. Mai 2012 AW: problem mit preg_replace Soo Ich habe es nun wie folgt gelöst PHP: $newString = "" ; foreach( $this -> owner -> menuDb -> items as $item ) { // ersetzt den Child-Container durch die Kinderelemente $newString = preg_replace ( "#\[CHILDREN] (.*)\[/CHILDREN]#esi" , '$this->replaceChildren($item["id"])' , $string ); // Body-Struktur für jedes einzelne Item $arrayString []= preg_replace ( "#item.([a-zA-Z]+)#esi" , 'isset($item["\1"]) ? $item["\1"] : "\1"' , $newString ); } return implode ( " " , $arrayString ); das Entscheidende bei dieser Sache besteht in dem 'e' bei preg_replace + Multi-Zitat Zitieren