2010-04-14 5 views
2

J'ai cherché des solutions pour ce problème mais je n'ai pas vu de solution "valid mvc" pour cela. J'espère que je peux expliquer mon problème assez clairement pour vous les gars.CodeIgniter - la bonne façon de créer des éléments "block" sur la page web

  • Je dois créer un bloc dynamique de HTML sur mon site. (par exemple, un bloc contenant les derniers commentaires du blog de l'utilisateur). J'ai un fichier de vue de modèle (un fichier contenant un en-tête, un conteneur de contenu et un pied de page) où j'ai besoin d'ajouter du contenu ET cet élément de bloc.

Le problème est que je ne veux pas dupliquer ce code de bloc sur chaque contrôleur. C'est juste stupide et je suis sûr qu'il y a une meilleure façon de le faire que de simplement répéter la même chose sur tous les fichiers du contrôleur.

Je peux très bien ajouter la vue à l'intérieur d'une autre vue, mais ce qui me dérange, c'est comment générer ce contenu dynamique dans le fichier de vue de ce bloc. Je ne peux pas appeler le contrôleur depuis le fichier de vue, le contrôleur depuis le fichier filem du contrôleur ou le modèle depuis le fichier de vue parce que ce que je comprends n'est pas la méthode "mvc"?

Quelqu'un at-il obtenu des astuces ou des conseils pour cela?

Répondre

1

J'ai rencontré le même problème. Je ne voulais pas dupliquer cette logique commune à travers mes méthodes d'action. Je passais cette logique au contrôleur de base, mais il se sentait un peu maladroit.

J'ai fini par tomber sur l'extension HMVC de CodeIgniter. C'est un très bon moyen de générer des vues partielles. Vous créez un module responsable de la génération du partiel. Le module est codé de manière MVC, comme vous le feriez pour vos pages. Ce module peut ensuite être inclus dans votre vue.

Si vous avez déjà utilisé ASP.NET MVC, il est similaire à Html.RenderAction.

+0

cela pourrait être exactement ce que je cherchais! merci un million! – kikkoman90

1

Si vous disposez de plusieurs contrôleurs pour dessiner ces données, vous pouvez utiliser un modèle ou étendre la classe Controller avec MY_Controller. Ceci est bien documenté dans le manuel de l'utilisateur de CodeIgniter.

Si elle est juste pour de nombreuses méthodes dans le même contrôleur, vous pouvez mettre la logique dans le constructeur des contrôleurs

Après re-lecture de votre post, je pense que la meilleure chose à faire pour vous est d'étendre La classe Controller de CodeIgniter avec MY_Controller documented here.

+0

ok, merci beaucoup! Je vais vérifier ça! – kikkoman90

2

Comme Zack l'a signalé, MY_Controller est idéal pour créer des données globales. Une façon de faire est de créer des vues "partielles", qui sont juste une vue qui contient tout ce dont elle a besoin. Parfois, c'est un peu de PHP, mais pour ces vues spéciales, ça ne me dérange pas de les rendre sales.

Une autre méthode consiste à associer une fonction d'assistance à une vue. Mettez tout votre PHP (demande cURL chercher RSS, la mise en cache, etc.) dans la fonction d'aide alors:

$this->load->view('partials/rss_feed'); 

La meilleure façon est de mettre en œuvre le Widgets system from PyroCMS. Cette chose est géniale! : D

+0

Utiliser partials + helpers est très rails-y. Non, il n'y a rien de mal à cela. Je l'utilise aussi. – Zack

+0

J'utilise les partiels comme ça dans mes applications CI, ça marche très bien. J'ajoute mon propre contrôleur de base personnalisé, qui ajoute l'ensemble des partiels que j'utilise pour diverses choses, comme xml_view, json_view, page_view, doc_view, etc. –

Questions connexes