2010-10-27 4 views
0

J'ai cette bibliothèque dans CI qui récupère mes dernières mises à jour twitter. Il a une fonction qui envoie mes dernières mises à jour en tant qu'objets à mon contrôleur. Je voudrais montrer ces mises à jour de Twitter sur le bas de page de ma page, ainsi elles sont évidentes à tout moment.passer des valeurs du modèle à afficher dans CI

Maintenant, ma question est comment je les appelle directement à partir d'une vue? Je sais que ce n'est pas une bonne pratique dans MVC mais je ne vois pas comment je pourrais faire autrement. Mon contrôleur s'occupe actuellement de toutes mes différentes pages (c'est un petit site web) et je ne pense pas que ce soit une très bonne habitude d'appeler mon cours twitter à la fin de chaque page du contrôleur et de l'envoyer ensuite au vues.

Typycally Je le fais dans mon contrôleur:

<?php 
    function index(){ 
    $data['page'] = 'home'; 
    //i don't want to call my twitter class here every single time I write a new page. (DRY?!) 
    $this->load->view('template', $data); 
    } 
?> 

Et il charge la vue « modèle » qui ressemble à ceci:

<?php 
$this->load->view('header'); 

$this->load->view('pages/'.$page); 

$this->load->view('footer'); 
?> 

donc des suggestions comment je dois faire?

Répondre

2

J'ai une bibliothèque d'aide qui prend une page partielle et l'enveloppe dans le thème maître. Vous pouvez utiliser le paramètre facultatif sur votre load->view pour afficher une chaîne.

Ensuite, lorsque vous rendez votre page maître, vous pouvez charger les mises à jour de twitter et les afficher. Bien que, je suggère fortement de mettre en cache votre réponse Twitter pendant au moins 5 minutes, vous économiserez beaucoup de frais généraux.

Exemple:

// Controller somwhere: 
$content = $this->load->view('pages/'.$page, array(), true); 
$this->myLibrary->masterPage($content); 


// Your library: 
function masterPage($content) 
{ 

    $twitterData = $this->twitter->loadStuff(); // whatever your function is 

    $twitter = $this->load->view('twitter_bar', array('data' => $twitterData), true); 

    $this->load->view('master', array('content' => $content, 'twitter' => $twitter); 
} 
+0

Merci, l'a fait de cette façon. Avoir un assistant qui charge la vue est une bonne idée. – networkprofile

+0

:) Merci, je suis heureux de pouvoir vous aider. Je n'ai jamais compris pourquoi une idée de page principale n'a jamais été cuite dans CI. Toujours boggled mon esprit. – Aren

0

Une approche alternative consiste à utiliser un dispositif de commande de base. Tous mes contrôleurs étendent mon contrôleur de base personnalisé qui contient les choses dont j'ai besoin sur chaque page, par exemple un objet contenant l'utilisateur actuel.

Questions connexes