2010-01-20 7 views
0

J'ai mis en page, rien de spécial, trois colonnes, juste pour apprendre CakePHP. Dans la documentation, je n'ai rien trouvé à propos de ce cas.CakePHP: Mise en page, variables et question

J'ai obtenu des statistiques dans les barres latérales, si je les envoie au fichier layout (default.ctp) car elles sont affichées sur chaque page.

Je construis (grâce à un utilisateur ici) un composant:

class SidebarComponent extends object { 
    function startup(&$controller) { 
     $this->controller = $controller; // Stores reference Controller in the component 
    } 

    function count_articles() { 
     $articles = ClassRegistry::init('Articles')->count_articles(); 
     $this->controller->set(compact('articles')); 
    } 
} 

Tout fonctionne parfaitement. J'ai eu une question sur ma technique. Je avais besoin de charger méthode des composants dans le contrôleur en mettant:

$this->Sidebar->count_articles(); 

ai donc décidé de le rendre un peu plus courte, parce que je vais devoir mettre dans chaque contrôleur. Donc, j'ai créé la fonction du nouveau composant:

function sidebars($userid) { 
     return array(
       $this->top_articles(), 
       $this->random_article() 
       ); 
} 

Et j'initialiser dans le contrôleur de cette façon:

$this->Sidebar->sidebars(); 

Tout fonctionne correctement, j'ai besoin que des conseils/commentaires si c'est bon comme je le fais:

Merci pour votre temps.

Répondre

1

vous n'avez pas besoin de l'appeler explicitement dans chaque contrôleur. La méthode startup() de component est appelée automatiquement avant chaque action du contrôleur qui utilise votre composant. Vous pouvez donc utiliser startup() pour obtenir et définir vos données pour les vues, et si vous avez besoin d'une initialisation avant (comme obtenir une référence au contrôleur), placez-le dans la méthode initialize() du composant.

+0

Hm ... ne pense pas que cela. Des échantillons de code? :) – Johannes

+0

jetez un oeil à http://book.cakephp.org/view/64/Creating-Components#MVC-Class-Access-Within-Components-65. Fondamentalement, vous pouvez déplacer startup() de votre exemple à initialize(), et sidebars() à startup(). Attention aux paramètres, bien sûr. exemple - http://bin.cakephp.org/view/1135878647. – parserr

0

Si vous avez avec les mêmes sidebars choses en eux, sonne aussi comme un cas pour des éléments aussi bien