login  Naam:   Wachtwoord: 
Registreer je!
 Forum

[PHP]Menu Parsen

Offline Esli - 31/01/2010 11:52 (laatste wijziging 31/01/2010 18:00)
Avatar van EsliPHP interesse Hallo,

Ik zit met een ideetje, weet dat het met regexjes moet, maar verder weet ik niet goed hoe ik het kan bereiken. (Ik ben namelijk nooit een specialist geweest in regex).

Mijn doel is om "menu's te parsen". Het is de bedoeling dat er via PHP bepaalde zaken uit de database worden gehaald en dat die dan op de juiste plaats komen te staan. Ik ga het proberen te verduidelijk met een voorbeeldje. (Wat die tekst dat ik hier zonet schreef verstaat toch niemand )

Stel dat het volgende bestand mijn template-bestand is:
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml">
  4. <head>
  5. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
  6. <title>Een titletje</title>
  7. </head>
  8. <body>
  9. <div id="headermenu">{$MENU#0}</div>
  10. <div id="left">{$MENU#1}</div>
  11. <div id="right">
  12. <p>Uiteraard is dit maar ter voorbeeld bedoeld, mijn echte template is net iets complexer :-)</p>
  13. </div>
  14. <div id="footer">{$MENU#2}</div>
  15. </body>
  16. </html>


Zoals je ziet gebruik ik enkele maal {$MENU#ID}, dat is dan ook wat ik wil gaan "replacen" (een preg_replace wellicht)

Nu stel dat ik voor menu0, menu1, menu2 het volgende uit de database haal.

  1. <!-- menu 0 -->
  2. <a href="#">MenuItem0</a> <a href="#">MenuItem1</a> <a href="#">MenuItem3</a>
  3.  
  4. <!-- menu 1 -->
  5. <ul>
  6. <li><a href="#">MenuItem0</a></li>
  7. <li><a href="#">MenuItem1</a></li>
  8. <li><a href="#">MenuItem2</a></li>
  9. <li><a href="#">MenuItem3</a></li>
  10. <li><a href="#">MenuItem4</a></li>
  11. </ul>
  12.  
  13. <!-- menu 2 -->
  14. <a href="#">MenuItem0</a> <a href="#">MenuItem1</a> <a href="#">MenuItem3</a>


Dan wil ik via PHP de eerste code dus netjes parsen tot het volgende:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml">
  4. <head>
  5. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
  6. <title>Een titletje</title>
  7. </head>
  8. <body>
  9. <div id="headermenu"><a href="#">MenuItem0</a> <a href="#">MenuItem1</a> <a href="#">MenuItem3</a></div>
  10. <div id="left">
  11. <ul>
  12. <li><a href="#">MenuItem0</a></li>
  13. <li><a href="#">MenuItem1</a></li>
  14. <li><a href="#">MenuItem2</a></li>
  15. <li><a href="#">MenuItem3</a></li>
  16. <li><a href="#">MenuItem4</a></li>
  17. </ul>
  18. </div>
  19. <div id="right">
  20. <p>Uiteraard is dit maar ter voorbeeld bedoeld, mijn echte template is net iets complexer :-)</p>
  21. </div>
  22. <div id="footer"><a href="#">MenuItem0</a> <a href="#">MenuItem1</a> <a href="#">MenuItem3</a></div>
  23. </body>
  24. </html>


Ik heb echter geen idee hoe ik dit het best kan bereiken. Voor alle duidelijkheid, ik verwacht niet van jullie dat jullie het maken voor mij (d'uh), maar ik hoop dat jullie mij wat op weg kunnen zetten...

8 antwoorden

Gesponsorde links
Offline TotempaaltJ - 31/01/2010 12:39
Avatar van TotempaaltJ PHP interesse Alles over Regular Expressions, maar gebruik dan liever een template engine, zoals Smarty, dat bespaart een hoop werk 
Offline Esli - 31/01/2010 12:43
Avatar van Esli PHP interesse
Bigboss schreef:
Alles over Regular Expressions, maar gebruik dan liever een template engine, zoals Smarty, dat bespaart een hoop werk 


Ik heb nog getwijfeld om het in mijn topic te zetten: ik wil absoluut geen smarty :-).µ

Ik wil zelf iets maken :-)
Offline TotempaaltJ - 31/01/2010 15:27
Avatar van TotempaaltJ PHP interesse Haha, oke, nou dan moet je de eerste link gebruiken 
Offline Esli - 31/01/2010 15:28 (laatste wijziging 31/01/2010 18:01)
Avatar van Esli PHP interesse Ik zal straks nog is wat prutsen zie! =-) Als ik er niet uit kom kom ik wel weer naar hier :-) (Tot straks dus xD)

Oké, intussen is het me gelukt. (Ik moet wel nog checks etc gaan inbouwen en alles wat "mooi" maken.) Nu ik heb de indruk dat dit nog vrij complex is en dat het eenvoudiger moet kunnen.

De code kan je hier vinden:
http://plaatscode.be/138587/

[Kom nou niet af met file_get_contents etc, dat weet ik nou ook wel ]
Offline TotempaaltJ - 31/01/2010 18:30
Avatar van TotempaaltJ PHP interesse Kan inderdaad veel simpeler, door preg_replace met de 'e' modifier te gebruiken 
Offline Esli - 31/01/2010 19:03
Avatar van Esli PHP interesse Hmmz, het lijkt erop dat dit net iets eenvoudiger is .

Nu ik begrijp de pattern niet zo goed. '/\{\$MENU\#([0-9])\}/sie'

Voornamelijk die /sie dan, die ken ik niet?
Offline TotempaaltJ - 31/01/2010 19:28
Avatar van TotempaaltJ PHP interesse De pattern:
/: Standaard begin
\{\$MENU\#([0-9])\}: Bijna hetzelfde als jij had
/: Standaard einde
s: "single-line mode" zinloos eigenlijk, kan je beter weghalen
i: case insensitive, dus negeert hoofdletters
e: Speciale modifier van preg_replace, zorgt ervoor dat je php code kan gebruiken, dus '$menu[\\1]' vervangt \\1 door het nummer in ([0-9]), en draait dat dan in PHP, wat dus bv $menu[0] wordt.
Bedankt door: Esli
Offline Esli - 05/02/2010 23:29
Avatar van Esli PHP interesse Sorry voor late reactie, druk.

Bedankt!

Ik ga er morgen weer mee verder, als ik er niet uitkom kom ik wel weer :-)
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.202s