2009-11-17 13 views
4

En utilisant cakePHP mon but est de combiner la vue d'index de deux contrôleurs ou plus dans une page de mise en page.cakePHP: comment combiner deux vues d'application ou plus sur une page de mise en page cakePHP?

Exemple: J'ai des contrôleurs pour: nouvelles, événements, liens. Je souhaite afficher les cinq dernières entrées de chaque table dans une page de mise en page. En outre, lorsque l'un des liens des vues est sélectionné, il doit amener l'utilisateur à la vue correspondante pour cet enregistrement.

J'ai lu la section des livres sur views mais je ne vois pas comment faire une vue dans un élément accomplirait ceci. Ce qui me rend confus, c'est comment combiner trois contrôleurs/vues séparés en une seule mise en page?

Merci

Répondre

5

Créez des méthodes dans vos modèles News, Event et Link pour extraire les 5 derniers enregistrements. Ensuite, dans votre contrôleur, incluez les modèles dans la propriété Controller :: uses ou dans l'action use ClassRegistry :: init() pour accéder au modèle, par ex. Vous pouvez ensuite appeler ces méthodes de modèle à partir de n'importe quelle action du contrôleur, en conservant votre application DRY.

Dans votre vue my_action.ctp, et en effet de nombreuses autres vues, affichez simplement les éléments, par ex.

// my_action.ctp 
<?php 
echo $this->element('recent_news'); 
echo $this->element('recent_events'); 
echo $this->element('recent_links'); 
?> 

Vos éléments peuvent alors juste itérer sur la variable de nouvelles $ (ou autre) affichant les éléments avec des liens vers les actions « view » dans leurs contrôleurs respectifs.

Ce n'est pas parce qu'un contrôleur correspond à un modèle que vous ne pouvez pas utiliser d'autres modèles.

+0

merci beaucoup pour cela je viens de commencer gateau php, j'ai tous mes mannequins et contrôleurs wokring mais se battait avec la façon de combiner les différents contrôleurs et modèles. Les doigts croisés je peux le faire fonctionner demain. – Bear

5

D'abord, je dirais que les vues et les contrôleurs ne sont pas nécessairement liés ensemble - gâteau ajoutera implicitement la vue spécifiée par le fichier heirarchy/convention de nommage, mais cela ne doit pas nécessairement être le cas . Essayez donc de penser que les vues sont découplées du contrôleur (ce qui est l'un des principaux objectifs de l'utilisation de l'architecture MVC). En supposant que vos trois vues (A, B, C) correspondent exactement à la manière dont vous voulez les copier, placez-les dans un élément (qui est juste un fichier de vue situé dans le répertoire spécial APP/views/elements /). Maintenant, vous pouvez les utiliser dans des mises en page ou d'autres vues, juste en faisant un appel à $ this-> element ('elementName', array ('options')).

Fondamentalement, il suffit de faire abstraction du code que vous souhaitez afficher dans les éléments, puis insérez ces éléments dans les dispositions souhaitées.

2

Vous pouvez configurer votre contrôleur pour utiliser RequestHandler, puis rendre vos éléments de vue capables d'extraire leurs propres données à partir de contrôleurs distincts dans votre application.

Ce lien explique mieux que je peux http://bakery.cakephp.org/articles/view/creating-reusable-elements-with-requestaction

Une chose à garder à l'esprit est que les actions du contrôleur vous appelez devraient tenir compte de la mise en cache de leurs propres données afin que vous ne faites pas les requêtes de base de données inutiles.

+0

bonne solution; élégant et efficace. – Paul

Questions connexes