load-> viewを使用してウィジェットライブラリを実装しようとしています。私はインクルードを使用してファイルを直接呼び出すことができ、varsキャッシュの問題を回避できますが、なぜそれがうまくいかないのか不思議です。ライブラリ内のビューのロード、キャッシュされたvarsの問題
マイコントローラー:
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);
}
}
マイライブラリ
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;
}
}
ウィジェット1:ウィジェット2
ウィジェット/コンテンツを呼び出しは:ウィジェットを呼び出します。ここ
は、私は私のコードを構造化している方法です/ banner
最初のウィジェットコールで設定されたバール(2番目のウィジェットコールと同じ名前)がキャッシュされます。つまり、最初のコールからの値が同じコールに渡されます。異なった意見があるので変です。
私が試してみました:
- をclear_vars()の使用:前とライブラリのロード - >ビューを行った後の$ this - > CI->ロード - > clear_varsを()、。
- 空の配列、nullなどでload-> viewを呼び出す
- varsにウィジェットslugのプレフィックスを追加しようとしました(それは動作しますが、プレフィックスをビューに送信する必要があります。可能性によるキャッシュの問題)
任意のアイデアではないでしょうか?
なぜ 'show()'メソッドでビューを2回ロードするのですか? – DFriend
が、ウィジェットを構築するための方法である@DFriend、私ははい – Eduardo
2つの異なるウィジェットを呼び出していますが、あなたは 'ショー()'メソッドに二度同じビューをロードします。 – DFriend