Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Wyrażenia regularne - jaka formuła?
Forum PHP.pl > Forum > Przedszkole
siutek
Witam, jako że z wyrażeniami regularnymi nie jest mi po drodze i za chiny nie potrafię skonstruować odpowiedniej reguły, to proszę Was o pomoc.
Na jednej ze stron mam wielopoziomowe menu w poniższej formie:

  1. <ul>
  2. <li id="..." class="...">
  3. <a href="...">dział 1</a>
  4. </li>
  5. <li id="..." class="...">
  6. <a href="...">dział 2</a>
  7. </li>
  8. <li id="..." class="... menu-item-has-children ...">
  9. <a href="...">dział 3</a>
  10. <ul class="sub-menu">
  11. <li class="...">
  12. <a href="....">poddział 1</a>
  13. </li>
  14. <li class="...">
  15. <a href="....">poddział 2</a>
  16. </li>
  17. <li class="...">
  18. <a href="....">poddział 3</a>
  19. </li>
  20. </ul>
  21. </li>
  22. <li id="..." class="...">
  23. <a href="...">dział 4</a>
  24. </li>
  25. <li id="..." class="...">
  26. <a href="...">dział 5</a>
  27. </li>
  28. </ul>


Problem polega na tym, że do menu drugiego poziomu muszę dodać kontener, tak aby zamiast

  1. <ul class="sub-menu">{...}</ul>


było

  1. <div class="..."><ul class="sub-menu">{...}</ul></div>


O ile znalezienie <ul class="sub-menu"> da się zrobić bez wyrażeń regularnych i potrafiłbym to wykonać, o tyle nie wiem jak znaleźć zamknięcie tej listy? Stąd pomysł na wyrażenia regularne.

Ktoś jest w stanie mi pomóc?
viking
A skąd pomysł żeby drzewo dom traktować regexpem zamiast np domdocument?
siutek
Strona jest na Wordpressie i nie do wszystkiego mam dostęp, nie mam zbyt wielkiego wpływu na konstrukcję menu. Mogę dodać klasy css, mogę dodać/usunąc kontaner dla całego menu, ale nie wiem jak dodać kontener do submenu. Stąd pomysł na regexpa, by zmodyfikować wygenerowany już kod HTML, bo do tego mam dostęp przy pomocy filtrów.
trueblue
A czy w argumentach przekazanych do filtra nie ma informacji, który to poziom menu?
SmokAnalog
Powinieneś zadbać o dostęp do funkcjonalności, której potrzebujesz.

Zamiast tak "łatać" to może lepiej po prostu zapisać menu w takiej formie, jaką chcesz, w normalnym pliku HTML i dołączać go do szablonu? Regex na HTML-u prosi się o błędy, a zabawy drzewem DOM przy każdym requeście też nie polecam.
vokiel
W WordPressie masz funkcję generującą menu, tam masz szablon tego jak to ma wyglądać. Szybciej, lepiej i bezpieczniej będzie dodać te kontenery w tym szablonie niż bawić się w naprawianie tego już po wygenerowaniu.

Drugie pytanie, czy na pewno musisz dodać ten kontener snitch.gif
SmokAnalog
Vokiel, chyba nie doczytałeś.
siutek
Cytat(vokiel @ 16.08.2020, 10:49:38 ) *
Drugie pytanie, czy na pewno musisz dodać ten kontener snitch.gif


Muszę, bo całą stronę zbudowałem na materialize css, a teraz walczę z bocznym, wysuwanym menu w trybie mobile. Jeśli chcę mieć takie menu wielopoziomowe, wykorzystując przy tym mechanizm materialize, muszę dodać ten kontener. Inaczej nie zadziała, przetestowałem różne alternatywne opcje, tylko z kontenerem działa.
vokiel
A jak masz tego WP? Masz dostęp do plików szablonu czy tylko jakaś atrapa/nakładka?
siutek
Cytat(vokiel @ 17.08.2020, 20:35:31 ) *
A jak masz tego WP? Masz dostęp do plików szablonu czy tylko jakaś atrapa/nakładka?

Do plików szablonu mam pełen dostęp - sam go budowałem od zera (z użyciem materialize css)
SmokAnalog
To do czego nie masz dostępu?
siutek
Cytat(SmokAnalog @ 17.08.2020, 23:38:58 ) *
To do czego nie masz dostępu?


Szablon szablonem, ale w miejscu gdzie powinno być menu wstawiam wywołanie jednej, dedykowanej funkcji która generuje menu w postaci <ul><li></li><li></li></ul>. Więc do tego gdzie umieścić menu, jak ma wyglądać (css) mam bezproblemowy dostęp, ale już do samej listy <ul> nie, bo to jest generowane przez WP.
SmokAnalog
A sama zabawa z parametrami wp_nav_menu() nie wystarczy?
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.