Ik ondervind problemen met het maken van een Adjacency list. Voorheen gebruikte ik altijd if statements in de View voor het opmaken van een multi level menu. Maar daar ik via het MVC principe probeer te werken hoort dat natuurlijk niet zo. Dus heb ik gisteren verschillende tutorial gelezen over dit onderwerp. maar ik kom er niet uit Dit is de tafel:

CREATE TABLE IF NOT EXISTS `navigatie` (
  `id` tinyint(4) NOT NULL AUTO_INCREMENT,
  `parent` tinyint(4) NOT NULL DEFAULT '0',
  `url` varchar(64) NOT NULL,
  `label` varchar(64) NOT NULL,
  `sequence` tinyint(4) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


Dit is de inhoud:

INSERT INTO `navigatie` (`id`, `parent`, `url`, `label`, `sequence`) VALUES
(1, 0, '/', 'Home', 1),
(2, 0, 'javascript:void(0)', 'Diensten', 2),
(3, 0, 'avascript:void(0)', 'Tarieven', 3),
(4, 0, '/case_studies', 'Case Strudies', 4),
(5, 0, '/over', 'Over', 5),
(6, 2, '/diensten/online_strategie', 'Online Strategie', 1),
(7, 2, '/diensten/webdesign', 'Web Design', 2),
(8, 2, '/diensten/webdevelopment', 'Web Development', 3),
(9, 2, '/diensten/digital_marketing', 'Digital Marketing', 4);


En in de Model Class heb ik het volgende:

	public function get_menu()
	{
		$sql = $this->pdo->query('SELECT * FROM site_navigation ORDER BY parent, sequence ASC');
		
		$items	= array();
		$rows = $sql->fetchAll(PDO::FETCH_ASSOC);
		foreach ($rows as $r => $row) {
			$parent = (int)$row['parent'];
			if (!isset($items[$parent])) {
				$items[$parent][] = $row;
			}
		}
		foreach ($items[0] as $m => $item) {
			echo '<ul class="navbar-nav ml-auto">';
				echo '<li>'.$item['label'].'</li>';
				$this->get_sub_menu($item['id']);
			echo '</ul>';
		}
		return $items;
	}


En dan loop ik vast. Kan iemand mij verder op weg helpen. Bij voormaat dank
Ik zal er vast helemaal naast zitten but here goes:
De Controller bepaalt welke hoofdcontent er geladen dient te worden.
De hoofdcontent zit vaak in een (main)template.
Dit (main)template bevat allerlei snippets, waaronder het bovenstaande menu.

Mijn eerste ingeving zou dan ook zijn: de Controller is niet de plek waar je zaken omtrent dit menu regelt. Dit is niet (direct) de verantwoordelijkheid van de Controller. Ik zou haast zeggen dat dit wordt bepaald door de hoofdcontent zelf.

But who am I to blow against the wind.
@Thomas. In ieder geval bedankt. Inderdaad doet iedereen dingen op zijn eigen manier. Even goede vrienden
Ik ben het eens met Thomas.
Een controller is in mijn ogen een knooppunt waar alles bij elkaar komt.
Een model haalt heel de meuk bij elkaar.
En een view bouwt het geheel op het scherm.

De class van Thomas is dan ook best sterk gemaakt, hij weet niets van wat hij moet uitpoepen dus kan uitbereid worden, immers kan het ook zijn dat je ooit iets van XMl of JSON ooit wil gebruiken.
En dat kan makkelijk met die class. (Zou hem alleen een andere naam geven)

Ik weet natuurlijk niet of dit een enkel project is of dat je dit voor meerdere wil inzetten?

Dus mijn idee zou zijn om dit in template code te doen.
Immers dan word het al geladen door de controller.

Maar in een controller zelf niet. Iets met DRY. ;) (Don't repeat Yourself)

Reageren