| 제목 | 위젯 라이브러리(?) 입니다. | ||
|---|---|---|---|
| 글쓴이 | 천재작곡가 | 작성시각 | 2016/06/03 11:19:08 |
|
|
|||
|
최근에 XE 로 만들어진 사이트를 유지보수할 기회가 있어서 보다보니 위젯시스템이 잘활용하면 괜찮겠다 싶어서 만들었습니다만... 사실 쓸일이 별루 없기는 할것같아요 그래도 일단 만든거니깐 공유해봅니다.
@ application/config/config.php $config['enable_hooks'] = TRUE; 후킹 사용으로 설정을 바꿔야 합니다.
@application/config/hooks.php
$hook['display_override'][] = array(
'class' => 'Widgets',
'function' => 'widget_replace',
'filename' => 'Widget.php',
'filepath' => 'hooks'
);
hooks 파일에 위젯 후킹 파일을 집어넣습니다. 디스플레이로 뿌려주기 직전으로 잡았습니다.
@application/hooks/Widget.php
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
/**
* Widget Class
* ========================================================================================
* Widget Class for Codeigniter
*/
class Widgets {
protected $CI;
/**
* do_replace widget tag to widget element
*/
function widget_replace() {
$this->CI =& get_instance();
// get display content;
$buffer = $this->CI->output->get_output();
// searching widget tags;
$buffer = preg_replace_callback('!<widget([^\>]*)\>!is', array($this,'trans'), $buffer);
// output replacing data;
$this->CI->output->set_output($buffer);
$this->CI->output->_display();
}
function trans($matches) {
// get extra values;
$vars = trim($matches[1]);
// replace array && return to query string
$vars = preg_replace('/\r\n|\r|\n|\t/',' ',$vars);
$vars = str_replace( array('"',' '), array('',' '), $vars );
$vars = trim(str_replace( " ", '&', $vars ));
// query string to array
parse_str($vars, $vars_array);
return $this->get_widget_content($vars_array);
}
function get_widget_content( $vars_array ) {
$return = "";
if(file_exists( VIEWPATH . "/widget/". $vars_array['type'] . ".php")) {
$return = $this->CI->load->view( "/widget/".$vars_array['type'] .".php", $vars_array, TRUE );
}
return $return;
}
}
위젯 클래스입니당
사용법~ 먼저 위젯부분이 치환되서 들어가는 부분입니다. @application/views/widget/위젯타입.php (저는 예시로 banner.php로 작업했습니다.) <img src="<?=$url?>" style="width:<?=$width?>;height:<?=$height?>">
다음으로 뷰파일에서 위젯 엘리먼트 정의입니다. @application/views/welcome_message.php <widget type="banner" width="200px" height="200px" url="http://placehold.it/200x200">
음.. 원리로 따지자면 디스플레이로 뿌려지기 직전에 <widget> 태그가 있는지 검색한후 <widget> 태그에서 type 속성과 같은이름을 가진 파일이 views/widget 폴더에 있다면 그 파일 내용으로 치환을 해줍니다. <widget> 태그 내에 들어있는 속성값들은 그대로 변수로 변환해줘서 치환되는 파일에 변수로 넘겨줍니다. 필요한값들을 해서 넘겨줘도 되겟지요. 슬라이드같은경우는 <widget id="slide" images="이미지01.png;이미지02.png;이미지03.png;"> 이런식으로 해서 사용해도 되지않을까 하는 생각에 만들어봤습니다.
응용을 한다면 위젯별로 id 속성을 따로 부여해서 캐시를 준다던가 하면 되지 않을까 싶은데.. 일단 뭐 쓸일이 거의 없지 않을까 싶긴합니다.. XE처럼 각 위젯들이 잘 공유된다면 모를까..
ps.. 참고로 저는 회사에서 랜딩페이지가 일주일에 한번씩 생산되는데 웹디자이너분이 드림위버밖에 못쓰시는지라 요거 만들어서 요런 요런값만 바꾸서 원하는 위치에 넣으면 슬라이드가 자동으로 나온다~ 라고하니깐 좋아하시더라구요 |
|||
| 태그 | 위젯,hook | ||
| 다음글 | db 쿠키 헬퍼 (3) | ||
| 이전글 | 폼 검증 에러메시지 조사 처리하기 (7) | ||
|
한대승(불의회상)
/
2016/06/03 12:02:33 /
추천
0
|
hook을 이용한 위젯태그 구현 이군요.
좋은 아이디어 같습니다. ^^