Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] wyłuskiwanie spomiędzy znaczników (pętla)
Forum PHP.pl > Forum > Przedszkole
mar1aczi
Witam wszystkich!

Zwracam się z prośbą o pomoc smile.gif
W poniższym kodzie, dla przykładowego tekstu
  1. <?php
  2.  
  3. $text = "testy: {myplg conf=`kategoria/ustawienia.xml` width=`700`}[obiekt][linia1]treść linijki pierwszej[/linia1][linia2]treść w linijce drugiej[/linia3][/obiekt][obiekt][linia1]treść linijki pierwszej ob2[/linia1][linia2]treść w linijce drugiej ob2[/linia3][/obiekt]{/myplg}";
  4.  
  5. /* var $myplg_embed_codes_count;
  6. var $myplg_swfobject_embedded;
  7. var $myplg_wmode_values;
  8. var $myplg_regexp_match_keys;
  9. */
  10.  
  11. $myplg_embed_codes_count = 0;
  12. $myplg_swfobject_embedded = false;
  13. $myplg_wmode_values = array(
  14. 'allowed' => array('opaque', 'transparent', 'window'),
  15. 'default' => 'opaque',
  16. );
  17. $myplg_regexp_match_keys = array(
  18. 'settings' => 2,
  19. 'width' => 4,
  20. 'height' => 6,
  21. 'wmode' => 8,
  22. 'alternative_text' => 9,
  23. );
  24.  
  25. echo "--DEBUG begin--<br />";
  26. echo $text;
  27. echo "<br />";
  28. echo print_r($params);
  29. echo "<br />--DEBUG end--<br />";
  30.  
  31. $text = preg_replace_callback('|{myplg\s*(conf=`([^"]+)`)?\s*(width=`([0-9]+)`)?\s*(height=`([0-9]+)`)?\s*(wmode=([a-z]+))?\s*}(.*){/myplg}|i', '_myplgembed', $text);
  32.  
  33. echo "<br /><br />--tekst po sparsowaniu--<br />";
  34. echo $text;
  35.  
  36. function _myplgembed($params) {
  37.  
  38. $plikkonfigrugacji = !empty($params[$myplg_regexp_match_keys['settings']]) ? $params[$myplg_regexp_match_keys['settings']] : 'default.xml';
  39.  
  40. $myplg_width = $myplg_height = 0;
  41. $myplg_width = $params['myplg_width'];
  42. $myplg_height = $params['myplg_height'];
  43.  
  44. if (empty($params[$myplg_regexp_match_keys['wmode']])) {
  45. $myplg_wmode = $params['myplg_wmode'];
  46. if (empty($myplg_wmode)) {
  47. $myplg_wmode = $myplg_wmode_values['default'];
  48. }
  49. } else {
  50. $myplg_wmode = in_array($params[$myplg_regexp_match_keys['wmode']], $myplg_wmode_values['allowed']) ? $params[$myplg_regexp_match_keys['wmode']] : $myplg_wmode_values['default'];
  51. }
  52.  
  53. $myplg_embed_codes_count++;
  54.  
  55. //petla po wszystkich obiektach
  56. // wyluskaj obiekt ze znaczników [obiekt][/obiekt]
  57.  
  58. // wykonaj operacje na polach aktualnie danego obiektu
  59. // wkladanie do pliku xml <- to wiem jak zrobić
  60.  
  61. //koniec petli po obiektach
  62.  
  63. //var_dump($params);
  64.  
  65. return '
  66. konfig: '.$plikkonfiguracji.'
  67. <br />szerokosc: '.$myplg_width.'
  68. <br />wysokosc: '.$myplg_height.'
  69. <br />tryb: '.$myplg_wmode.'
  70. <br />znaleziony obiekt: '.$myplg_embed_codes_count;
  71. }
  72.  
  73. ?>

nie wiem jak się zabrać na wyłuskiwanie obiektów spomiędzy tagów, tak jak to opisałem w komentarzach funkcji. Nie działa mi również tak jak powinno 'wybieranie' parametrów konfiguracyjnych conf, width, height, wmode. Zakładam, że może zostać użyty jeden z tych parametrów bądź różne ich kombinacje.

Z góry dziękuję za wsparcie dla początkującego i wszelką konstruktywną pomoc.
tolomei
Do wyłuskiwania użyj sobie preg_match().
Widzę, że wyrażenia znasz, ale może mimo wszystko Cię coś natchnie TUTAJ.

Drugi raz dzisiaj "sprzedaję" ten kurs, ale to dlatego, że to jeden z lepszych jakie widziałem.

Pozdrawiam.
mar1aczi
Dzięki śliczne za odpowiedź. Kurs na pewno się przyda. Wyrażeń regularnych... się uczę smile.gif
Przydatny był: http://www.spaweditor.com/scripts/regex/, który pomógł mi usunąć błąd z
  1. $text = preg_replace_callback('|\{myplg\s*(conf="([^"]+)")?\s*(width="([0-9]+)")?\s*(height="([0-9]+)")?\s*(wmode=([a-z]+))?\s*}([^}]*)?{/myplg}|i', array($this, '_myplgembed'), $text);

To działa poprawnie. Dla dalszego wyłuskiwania skorzystałem z preg_match_all
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.