TIP게시판

제목 위젯 라이브러리(?) 입니다.
글쓴이 천재작곡가 작성시각 2016/06/03 11:19:08
댓글 : 1 추천 : 0 스크랩 : 1 조회수 : 14331   RSS

최근에 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을 이용한 위젯태그 구현 이군요.

좋은 아이디어 같습니다. ^^