J'essaie d'implémenter une bibliothèque de widgets en utilisant load-> view. Je sais que je peux utiliser include pour appeler directement le fichier et éviter les problèmes de cache de vars, mais je me demande juste pourquoi cela ne fonctionne pas.Chargement de la vue à l'intérieur d'une bibliothèque, problèmes avec les variables en cache
Voici comment j'ai structuré mon code:
Mon contrôleur:
class Page extends MY_Controller {
public $data = array();
public function __construct() {
parent::__construct();
...
$this->load->library('widgetmanager');
}
public function index($slug = '') {
echo $this->widgetmanager->show(2);
echo $this->widgetmanager->show(1);
}
}
Ma bibliothèque
class WidgetManager
{
private $CI;
public function __construct()
{
$this->CI = & get_instance();
}
public function show($widget_id) {
$data = array();
$widget_id = (int)$widget_id;
$this->CI->db->select('*');
$this->CI->db->from('widget');
$this->CI->db->where('id', $widget_id);
$query = $this->CI->db->get();
$item = $query->row_array();
$data['widget_title'] = $item['title'];
$data['widget_content'] = $item['content'];
$widget = $this->CI->load->view('widget/'.$item['source'], $data, TRUE);
$data['widget_title'] = '';
$data['widget_content'] = '';
$this->CI->load->view('widget/'.$item['source'], $data);
return $widget;
}
}
widget de 1: Appels widget/contenu
widget de 2: Appels un widget/banner
Quoi se passe est, les vars mis sur le premier appel de widget (ils sont même nom que le deuxième appel de widget), sont mis en cache, ce qui signifie que les valeurs du premier appel sont passées au même appel. C'est bizarre parce que ce sont des vues différentes.
J'ai essayé:
- En utilisant clear_vars(): $ this-> CI-> load-> clear_vars(), avant et après avoir fait load-> vue sur la bibliothèque. Appelez load-> view avec un tableau vide, null, etc
- J'ai essayé d'ajouter un préfixe avec le slug du widget aux vars (cela fonctionne, mais je dois envoyer en quelque sorte le préfixe à la vue, donc n'est pas possible cause de cache)
Des idées?
Pourquoi charger la vue deux fois dans la méthode 'show()'? – DFriend
@DFriend c'est une méthode pour construire un widget, j'appelle 2 widgets différents – Eduardo
Oui, mais vous chargez la même vue deux fois dans la méthode 'show()'. – DFriend