anoniem Geplaatst: 24 november 2004 Delen Geplaatst: 24 november 2004 [code:1:c32faaeaeb]function conf_url_rewrite($path, $mode = 'incoming') { if ($mode == 'incoming') { /** * Outgoing Url * $pattern = New generated url * $replacement = Original url **/ $pattern[] = '!^album/toevoegen$!'; $pattern[] = '!^hoofdstuk/toevoegen$!'; $pattern[] = '!^discussiepunt/toevoegen$!'; $pattern[] = '!^pagina/toevoegen$!'; $replacement[] = 'node/add/album'; $replacement[] = 'node/add/book'; $replacement[] = 'node/add/forum'; $replacement[] = 'node/add/page'; } else { /** * Outgoing Url * $pattern = Original url * $replacement = New generated url **/ $pattern[] = '!^node/add/album$!'; $pattern[] = '!^node/add/book$!'; $pattern[] = '!^node/add/forum$!'; $pattern[] = '!^node/add/page$!'; $replacement[] = 'album/toevoegen'; $replacement[] = 'hoofdstuk/toevoegen'; $replacement[] = 'discussiepunt/toevoegen'; $replacement[] = 'pagina/toevoegen'; } return preg_replace($pattern, $replacement, $path); }[/code:1:c32faaeaeb] Het stuk tekst hierboven vervangt bestaande urls door deze te vertalen in het nederlands. Knap stukje werk denk ik zo. Maar, zoals je hierboven ziet staan, gebruik ik bijna 4 maal hetzelfde stuk code om iets te vervangen, namelijk: - in incoming: $pattern[] = '!^album/toevoegen$!'; $pattern[] = '!^hoofdstuk/toevoegen$!'; $pattern[] = '!^discussiepunt/toevoegen$!'; $pattern[] = '!^pagina/toevoegen$!'; $replacement[] = 'node/add/album'; $replacement[] = 'node/add/book'; $replacement[] = 'node/add/forum'; $replacement[] = 'node/add/page'; en - in outgoing (else clause): $pattern[] = '!^node/add/album$!'; $pattern[] = '!^node/add/book$!'; $pattern[] = '!^node/add/forum$!'; $pattern[] = '!^node/add/page$!'; $replacement[] = 'album/toevoegen'; $replacement[] = 'hoofdstuk/toevoegen'; $replacement[] = 'discussiepunt/toevoegen'; $replacement[] = 'pagina/toevoegen'; Aangezien in het 'incoming' gedeelte enkel album/hoofdstuk/discussiepunt en pagina verschillen, kunnen de 4 $patters dan niet in 1 regel opgenomen worden? Hetzelfde met $replacements en hetzelfde in het gehele 'outgoing' (else clause) gedeelte. Dan zou ik als het goed is dus zoiets over moeten houden: [code:1:c32faaeaeb]function conf_url_rewrite($path, $mode = 'incoming') { if ($mode == 'incoming') { /** * Outgoing Url * $pattern = New generated url * $replacement = Original url **/ $pattern[] = '!^(album|hoofdstuk|discussiepunt|pagina)/toevoegen$!'; $replacement[] = 'node/add/(album|book|forum|page)'; } else { /** * Outgoing Url * $pattern = Original url * $replacement = New generated url **/ $pattern[] = '!^node/add/(album|book|forum|page)$!'; $replacement[] = '(album|hoofdstuk|discussiepunt|pagina)/toevoegen'; } return preg_replace($pattern, $replacement, $path); }[/code:1:c32faaeaeb] Iemand die snapt hoe ik zoiets tot stand kan laten komen? Ik hoop dat het begrijpelijk is wat ik bedoel, maar het is nogal een complex geheel.. Quote Link naar reactie
anoniem Geplaatst: 24 november 2004 Auteur Delen Geplaatst: 24 november 2004 ik denk dat ik begrijp wat je bedoelt. Alleen begrijp ik niet het waarom. Ten minste, als je wilt optimaliseren, dan kan ik je aanraden voor simpele search&replace gewoon str_replace te gebruiken, dat is veel sneller. Je zoekt niet op bijzondere patronen en ik denk dat 4 str_replace nog altijd sneller is dan 1 complexere regexp. Ook van 4 regexps 1 proberen te maken is niet altijd sneller. Maar als je het dan toch wil, dan was je al heel aardig op weg. De pattern lijkt mij geheel correct te zijn, alleen kun je in de replacement geen regexp gebruiken. $replacement[] = '(album|hoofdstuk|discussiepunt|pagina)/toevoegen'; moet worden $replacement[] = '$1/toevoegen'; waar $1 verwijst naar de gevonden string tussen het eerste paar haakjes (hier dus album [i:582729a082]of[/i:582729a082] hoofdstuk [i:582729a082]of[/i:582729a082] discussiepunt [i:582729a082]of[/i:582729a082] page). Volgens mij moet het dan doen wat jij wil Quote Link naar reactie
anoniem Geplaatst: 24 november 2004 Auteur Delen Geplaatst: 24 november 2004 Na enig benchmarken is het zelfs zo dat ik 5 str_replace() 's kan doen op exact 1 regexp. Dus, we gaan toch maar voor str_replace().. Ik heb nooit geweten dat str_replace() sneller was dan preg_replace(), dacht altijd dat dit andersom was. Trouwens, de regexp werkete hierna wel.. Stom van me, helemaal niet aan gedacht om de [i:0c8a55196f]back references[/i:0c8a55196f] te gebruiken. :-s Quote Link naar reactie
anoniem Geplaatst: 24 november 2004 Auteur Delen Geplaatst: 24 november 2004 Heb je ook al eens overwogen om gebruik te maken van apache's [url=http://www.google.com/search?sourceid=navclient&ie=UTF-8&q=apache+mod%5Frewrite+tutorial]mod_rewrite[/url]? Mits je hoster daar natuurlijk ondersteuning voor biedt. Quote Link naar reactie
anoniem Geplaatst: 24 november 2004 Auteur Delen Geplaatst: 24 november 2004 Ja Annie, dat heb ik overwogen.. Maar mijn host draait IIS en IIS Rewrite wordt onder geen enkele voorwaarde geinstalleerd.. Dus, dan moet het maar zo... Quote Link naar reactie
Aanbevolen berichten
Om een reactie te plaatsen, moet je eerst inloggen