Quel est le meilleur moyen de créer des menus dynamiques basés sur une base de données dans CakePHP?

StackOverflow https://stackoverflow.com/questions/613996

  •  03-07-2019
  •  | 
  •  

Question

Je souhaite afficher un menu sur chaque page exécutée à partir d'une base de données. Utiliser des php sales et simples est facile mais je veux l’intégrer à Cakephp en utilisant leur système MVC. Maintenant, ma question est: quelle est la meilleure façon de s'y prendre?

Mon objectif est de créer un élément avec la présentation, puis un composant ou un contrôleur pour toute la logique. Des suggestions sur ceci? Ou est-ce un Helper que je veux utiliser?

Je dois également obtenir toutes les données de plusieurs tables de la base de données. Est-il préférable de faire toute ma logique de collecte de données à travers un seul modèle? Ou utilisez-vous la plupart du temps dans le contrôleur de menu (ou composant) et utilisez les modèles pour chaque table?

Merci,

Walter

Était-ce utile?

La solution

Les modèles doivent extraire et traiter les données de la table qu’ils modélisent. Vous devez donc extraire les données de menu de chaque modèle de ce modèle.

Les composants sont destinés à loger la logique partagée par plusieurs contrôleurs. Ainsi, un composant de menu utilisé par tous vos contrôleurs semble être un bon endroit pour insérer le code permettant d'extraire les données de menu des modèles et de les écraser ensemble.

Un menu est généralement une liste imbriquée. Si c'est également le cas dans votre menu, le moyen le plus simple de générer le balisage est une fonction récursive (une fonction qui s'appelle elle-même) qui génère un niveau à la fois. Plutôt qu'un élément, je créerais simplement un helper avec une méthode menu () et l'appellerais directement à partir de la présentation.

Autres conseils

Je suis d’accord avec la réponse de neilcrooks, mais je voudrais ajouter quelques éléments pour plus de clarté.

Les aides et les éléments sont assez simples, sauf qu'ils peuvent être un peu plus robustes (du moins, c'est ce que je pense d'eux;)). Ainsi, si vous utilisez un assistant, vous pouvez lier et dissocier des associations de modèles à la volée, ce qui vous permettra de récupérer les données de vos modèles associés (temporairement).

Personnellement, j'aime les gros modèles et les contrôleurs maigres, alors je pense que si j'étais dans cette situation, j'utiliserais un assistant et lierais temporairement les modèles à ce dernier. Toutes les données que je dois extraire des modèles existants seront accessibles via les appels de type Model1- > fetchMenuPart (...).

Vous pouvez ensuite appeler votre assistant à partir de votre fichier de mise en page.

Je ne sais pas pourquoi cela n’est documenté nulle part, mais j’ai trouvé cela hier soir. Les variables de votre mise en page ou de vos éléments doivent être définies avec la fin _for_layout. Par exemple: $ this- > set ('categories_for_layout', $ this- > Category- > find ('all'));

J'ai utilisé la méthode beforeFilter dans la classe AppController, car j'avais besoin de ce menu dans chaque page.

Voici une excellente solution que j'ai découverte lors de la recherche de cette chose sur Internet.

http://articles.classoutfit.com/cakephp-dynamic-navigation- bars /

Je pense que vous utiliseriez créer un élément contenant le code HTML du menu, puis afficher le menu dans votre présentation.

echo $this->element('your menu');

Pour le rendre dynamique, définissez les liens de menu, peut-être sous forme de tableau dans le contrôleur.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top