CI 묻고 답하기

제목 [질문]widget plugin 사용하기
글쓴이 우노 작성시각 2009/07/07 15:39:52
댓글 : 5 추천 : 0 스크랩 : 0 조회수 : 45320   RSS
사이트 구조를 만들기위해서, Template/Widget/Layout/include... 중에서 일단 Widget을 사용해 보기로 했습니다.

Bolg 를 만든다는 가정하에, 두가지를 해볼려고 하는데요.
우선 레이아웃을 잡기 위해, header, footer, sidebar 를 widget 형태로 불러드릴려고 합니다.

위젯 플러그인은 http://codeigniter.com/forums/viewthread/109584/P0/ 의 것을 설치하였구요

뷰에서 아래와 같이 변수를 넘겨주는 것없이 호출했습니다.


그리고 application/widgets/footer_wi.php 파일은 아래와 같습니다.

class Footer_wi extends Widget
{
function run() {

$this->render('footer_wi');
}
}
?>

이에 대한 뷰는 application/widgets/views/footer_wi.php 로서 아래와 같습니다.



Footer





아무 기능이 없는 단순한 불러들이기 파일입니다.

이럴 경우에는 매번 일종의 include 등과 비슷한 효과를 내기 위해서 매번 두개의 파일을 작성해야 하는데요...
잘하고 있는 것인지 모르겠습니다.

제가 widget의 용도를 잘못 쓰고 있다면 조언 부탁드립니다.
 다음글 [질문]config 값을 library 에서 불러 쓰기... (5)
 이전글 [질문]anchor 에 이미지 링크 걸기 (9)

댓글

우노 / 2009/07/07 16:02:01 / 추천 0
물론 widget 의 경우에는 변수를 넘겨받아 일부 웹기능을 구현하기 위해서 쓰는 것은 당연하겠지요.
변종원(웅파) / 2009/07/07 16:13:33 / 추천 0
위젯은 기능이 있는 프로그램에서 화면을 만들고 그 출력물을 포함할때 쓰시고 (로그인 위젯 같은 경우)
단순히 헤더, 푸터의 경우에는

$data['header'] = $this->load->view('header', TRUE);
$data['footer'] = $this->load->view('footer', TRUE);

$this->load->view('content', $data);

이렇게 처리하시면 됩니다.

$data['header'] = $this->load->view('header', TRUE); <- header.php파일을 읽어서 화면에 뿌리는 것이 아니라 그 결과물을 $data['header'] 에 할당합니다.


아니면 간단하게 아래처럼 쓰기도 합니다.

$this->load->view('header';
$this->load->view('content', $data);
$this->load->view('footer');
우노 / 2009/07/07 16:24:16 / 추천 0
저 역시 이를 고려해 봤었는데, 정확히 삼단으로 구분되는 경우에는 상관이 없지만 그렇지 않은 경우에는 (웹페이지 가운데서 불러들이는 경우에는...) 해당이 안되는 것 같아서 위의 방법을 생각해냈었습니다.
마냐 / 2009/07/07 18:53:46 / 추천 0
위 위젯을 수정해서.

class Widget
{
function Widget() {
$this->_assign_libraries();
}

function run($name, $data=array()) {
$args = func_get_args();

require_once APPPATH.'controllers/widget/'.$name.EXT;

if (strpos($name, '/')) {
$temp = explode('/', $name);
$name = ucfirst($temp[1]);
} else
$name = ucfirst($name);

$widget =& new $name();
return call_user_func_array(array(&$widget, 'index'), array_slice($args, 1));
}

function _assign_libraries() {
$CI =& get_instance();
foreach (get_object_vars($CI) as $key => $object) {
$this->$key =& $CI->$key;
}
}
}
 
$cmn = widget::run('_common'); // 로그인 관련 정보
$outlogin = widget::run('outlogin', $cmn); // 외부 로그인 폼
 
if (!$cmn['is_member']) echo "넌 뭐냐?";
.... code....
 
$head = array('title' => "타이틀");
$data = array(
"outlogin" => $outlogin
...
);
 
widget::run('head', $head);
$this->load->view('mainPage', $data);
widget::run('tail');
 
또는...
 
$head = array("title" => "타이틀", 'widget' => 'member');
$tail = array('widget' => 'member');
 
$outlogin = widget::run('outlogin', $cmn);
 
$head = array("title" => "메인페이지", 'widget' => 'main');
$tail = array('widget' => 'main');
 
widget::run('head', $head);
$this->load->view('member/mainPage', $data);
widget::run('tail', $tail);
 
member에 해당하는 head, tail의 뷰페이지 로드.
 
컨트롤이 필요없는 단순 뷰페이지 출력이라면 그냥 view로 해결.
우노 / 2009/07/08 09:33:57 / 추천 0
감사합니다. 많은 도움이 되었습니다. ^^