login  Naam:   Wachtwoord: 
Registreer je!
 Forum

submenu via templateparser

Offline Raze - 23/03/2010 21:04 (laatste wijziging 24/03/2010 10:27)
Avatar van RazePHP beginner Hallo,

ik heb 2 tabellen in men database:
Page & menu
Page: (ik geef voor de gemakkelijkheid alleen ff de id's mee)
ID
---
1
2
3
4

Menu:
ID | Parent | Child
------------------
1 | 1 | 0
2 | 2 | 3
3 | 2 | 4

Ik wil dus een menu maken via een template parser. Ik heb 4 pagina's: 1 - 2 - 3 - 4

1 en 2 moeten in de menu komen, en als je over 1 gaat, moeten 3 en 4 zichtbaar worden.

De template code:
  1. [start-block menu]
  2. <a href="/index.php"><li class="item">Startpagina
  3. <ul>
  4. [start-block submenu]<a href="{Submenu_item:url}"><li>{Submenu_item:text}</li></a>[end-block submenu]
  5. </ul>
  6. </li></a>
  7. [end-block menu]


De code om de menu op te bouwen:
  1. $query = " SELECT
  2. DISTINCT
  3. parent
  4. FROM
  5. menu
  6. ";
  7.  
  8.  
  9. $result_fetch_menu_data = $dbConnection->query( $query );
  10.  
  11.  
  12. while( list( $parent ) = $dbConnection->fetchArray( $result_fetch_menu_data ) )
  13. {
  14.  
  15. $query = " SELECT
  16. access_url,
  17. title
  18. FROM
  19. page
  20. WHERE
  21. id = '".$parent."'
  22. ";
  23.  
  24.  
  25. $result_fetch_menu_parentvalue = $dbConnection->query( $query );
  26.  
  27.  
  28. list( $access_url , $title ) = $dbConnection->fetchArray( $result_fetch_menu_parentvalue );
  29.  
  30. $template->newBlock( 'menu' , array( 'Menu_item:url' => 'index.php?cm_page='.$access_url, 'Menu_item:text' => $title ) );
  31.  
  32.  
  33.  
  34. $query = " SELECT
  35. child
  36. FROM
  37. menu
  38. WHERE
  39. parent = '".$parent."'
  40. ";
  41.  
  42.  
  43. $result_fetch_menu_child = $dbConnection->query( $query );
  44.  
  45.  
  46. while( list( $child ) = $dbConnection->fetchArray( $result_fetch_menu_child ) )
  47. {
  48.  
  49. if( $child != 0 )
  50. {
  51.  
  52. $query = " SELECT
  53. access_url,
  54. title
  55. FROM
  56. page
  57. WHERE
  58. id = '".$child."'
  59. ";
  60.  
  61. $result_fetch_menu_childvalue = $dbConnection->query( $query );
  62.  
  63. list( $access_url_child , $title_child ) = $dbConnection->fetchArray( $result_fetch_menu_childvalue );
  64.  
  65. $template->newBlock( 'submenu' , array( 'Submenu_item:url' => $access_url_child, 'Submenu_item:text' => $title_child ) );
  66. }
  67.  
  68.  
  69. }
  70.  
  71. }


Wat gebeurt er?

Pagina 1 en 2 worden netjes weergegeven, maar nu heeft zowel pagina 1 als pagina 2 een submenu met 3 en 4 in, terwijl dit normaal alleen pagina 1 mag hebben.

Wie kan me hierbij helpen dit op te lossen?

EDIT:

ik denk zelf dat de fout in de code zit van de HTML zelf. Dat submenu block zit genest in het menu block en dus 2 keer want de menu block wordt 2 keer opgehaald. Hoe kan ik ervoor zorgen dat de submenu block maar één keer wordt opgehaald?

1 antwoord

Gesponsorde links
Offline Damage - 16/04/2010 00:39
Avatar van Damage PHP interesse Je moet 3 kolommen toevoegen. De nlef, nright en nlevel.

Bijvoorbeeld je hebt een pagina.. genaamd "Pagina 1" en deze bevat 2 subpagina's dan is de nleft van pagina 1: 1 en de nright 6. De nlevel is de diepte van de pagina. Aan de hand van de nleft en nright weet je dus welke paginas er omarmt worden. Want dat zijn alle waardes binnen de 1 en de 6. In dit geval de sub pagina's die de waardes 2 | 3 en 4 | 5 hebben. Het is misschien een beetje lastig uit te legen. Maar misschien helpt onderstaande voorbeeld jou beter.

nleft | nright | nlevel
pagina 1:: 1 | 6 | 1
sub 1 :: 2 | 3 | 2
sub 2 :: 4 | 5 | 2
pagina 2:: 7 | 8 | 1

Aan de hand van deze waardes weet je wanneer je een ul of li moet openen of sluiten.

En je kan beter je twee tabellen samen voegen.

Voordelen; je hoef maar één query uit te voeren om je gehele navigatie structuur in één keer te genereren.Je kunt overigens met de nleft en nright ook heel erg simpel kruimel paden maken.
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.223s