load-> view를 사용하여 위젯 라이브러리를 구현하려고합니다. include를 사용하여 파일을 직접 호출하고 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 : 위젯/컨텐츠
위젯이 호출 : 위젯 호출/banner
첫 번째 위젯 호출에 설정된 변수 (두 번째 위젯 호출과 동일한 이름)가 캐시되고, 첫 번째 호출의 값이 동일한 호출에 전달됩니다. 다른보기이기 때문에 그것은 별나다.
이 나는 시도했다 :
- clear_vars을 사용하여() : $ this-> CI->로드 -> clear_vars(), 이전과 라이브러리를로드 ->보기를 수행 한 후.
- 빈 배열, null 등을 사용하여 load-> view를 호출합니다.
- 위젯 슬러그와 함께 접두사를 vars에 추가하려고 시도했으나 작동하지 않지만보기에 접두어를 보내야합니다. 캐시 문제로 인해 가능하지 않음)
아이디어가 있으십니까?
왜'show()'메소드에서 뷰를 두 번로드합니까? – DFriend
@DFriend 위젯을 만드는 방법입니다. 다른 위젯을 두 개 호출합니다. – Eduardo
네,하지만 같은 뷰를'show()'메소드에서 두 번로드합니다. – DFriend