CI 묻고 답하기

제목 hooks 질문 드립니다.
글쓴이 꾸숑 작성시각 2013/02/25 20:11:05
댓글 : 6 추천 : 0 스크랩 : 1 조회수 : 16885   RSS

제가 제작한 게시판에서 광범위 하게 사용되는 내용이여서 hooks를 이용하는게 좋겠다는 판단에서.. 
아래와 같이 제작했습니다.
controllers에서 $this->admin_view_article  $this->id 형태로 값을 불러 오는데  오류가 있습니다.
처음 hooks를 사용하다보니 어렵게 느껴 지네요... 잘못된 부분 지적 부탁 드립니다.

오류 내용
A PHP Error was encountered
Severity: Notice
Message: Undefined property: Board::$admin_view_article
Filename: controllers/board.php
Line Number: 40

A PHP Error was encountered
Severity: Notice
Message: Undefined property: Board::$id
Filename: controllers/board.php
Line Number: 41


config/hooks.php
$hook['post_controller_constructor'] = array(
 'class'    => '_Common',
 'function' => 'index',
 'filename' => 'Common.php',
 'filepath' => 'hooks'
);



hooks/Common.php
<?
class _Common {
 function index() {
   $CI =& get_instance();

   $CI->load->model('board_model');
   $CI->load->helper(array('form', 'url'));
   $CI->load->library('tank_auth');
   $CI->load->helper('alert');
   $CI->load->database();

  //게시판 세그먼트 값 상수 선언(전역적 사용)
   define('BOARD_NUM', $this->seg_value('num'));
   define('BOARD_ID', $this->seg_value('id'));
   define('BOARD_PAGE', $this->seg_value('page'));
   $this->id = BOARD_ID;//get id값
   $this->page = BOARD_PAGE;//get page값
   $this->num = BOARD_NUM;//get num값
   if(!$this->page)$this->page=1;

  //관리자 테이블값 가져와서 상수선언(전역적 사용)
      $id = $this->id;
   $CI->db->select("*");
   $CI->db->where('id', $id);
   $query = $CI->db->get('board_admin');
   $row = $query->row_array();{
   define('ADMIN_ID', $row['id']);
   define('ADMIN_BOARD_NAME', $row['board_name']);
   define('ADMIN_BOARD_SKIN', $row['board_skin']);
   define('ADMIN_READ_LEVEL', $row['read_level']);
   define('ADMIN_WRITE_LEVEL', $row['write_level']);
   define('ADMIN_REPLY_LEVEL', $row['reply_level']);
   define('ADMIN_COMMENT_LEVEL', $row['comment_level']);
      define('ADMIN_VIEW_ARTICLE', $row['view_article']);
   define('ADMIN_WIDTH', $row['width']);
   define('ADMIN_TITLE', $row['title']);
   define('ADMIN_PHOTO_COLS', $row['photo_cols']);
   define('ADMIN_PHOTO_HEIGHT', $row['photo_height']);

   $this->admin_id = ADMIN_ID;//테이블명
   $this->admin_board_name = ADMIN_BOARD_NAME;//게시판명
   $this->admin_board_skin = ADMIN_BOARD_SKIN;//게시판 스킨명
   $this->admin_read_level = ADMIN_READ_LEVEL;//
   $this->admin_write_level = ADMIN_WRITE_LEVEL;//
   $this->admin_reply_level = ADMIN_REPLY_LEVEL;//
   $this->admin_comment_level = ADMIN_COMMENT_LEVEL;//
   $this->admin_view_article = ADMIN_VIEW_ARTICLE;//
   $this->admin_width = ADMIN_WIDTH;//게시판 폭
   $this->admin_title = ADMIN_TITLE;//게시판 타이틀
   $this->admin_photo_cols = ADMIN_PHOTO_COLS;//리스트 이미지 1줄갯수
   $this->admin_photo_height = ADMIN_PHOTO_HEIGHT;//리스트 이미지 높이
   } 

   // 세그먼트값 찾기 (id/test 일때 id=test)
 function seg_value($key,$segment=NULL)
   {
   if($segment == NULL) {
   $segment = $this->uri->segment_array();
   }

   $this->seg_exp = array_values($segment);
   $arr_key = array_keys($this->seg_exp, $key);

  
   if($arr_key){
   $arr_val = $arr_key[0] + 1;
   } else {
   $arr_val = 200;
   }

   if(count($this->seg_exp) > $arr_val){
   return $this->seg_exp[$arr_val];
   }
    }

     //세그먼트 위치값 (id/test 일때 test의 세그먼트 위치값)
 function seg_index($key,$segment=NULL)
   {
   if($segment == NULL) {
   $segment = $this->uri->segment_array();
   }

   $this->seg_exp = array_values($segment);
   $arr_key = array_keys($this->seg_exp, $key);

   $tot =count($arr_key);

   if($tot > 0) {
   $arr_val = $arr_key[0] + 2;

   return $arr_val;
   } else {
   return "";
   }
 }
  }
}
?>

 

 

태그 hooks,CI
 다음글 sqlite 환경에서 tank_auth 돌려보신분 없나... (5)
 이전글 컨트롤러 안에 index 함수에서 벨리데이션 질문입니다... (1)

댓글

변종원(웅파) / 2013/02/25 20:28:17 / 추천 0
값들 찍어보세요. set_value 함수도 작동 안할겁니다. $this......
꾸숑 / 2013/02/25 20:36:07 / 추천 0
//웅파 첨부 소스 누락된 부분 있어서 수정해서 올렸어요

$CI->uri->segment_array() 이렇게 변경해도 오류는 그대로 인데요...~~~~~
꾸숑 / 2013/02/26 08:05:04 / 추천 0
//웅파 밤새워 이렇게 저렇게 해봤으나  set_value 함수가 작동을 하지 않네요...
시간 되시면... 딱 찝어서 알려 주시면 감사하겠습니다.

참고로 config.php에서 $config['enable_hooks'] = TRUE; 로 설정 했습니다.
들국화 / 2013/02/26 09:41:55 / 추천 0
음... 상수를 만드시고 왜 인스턴스 변수를 불러 올까요?
변종원(웅파) / 2013/02/26 10:32:38 / 추천 0
꾸숑/ 클래스 공부를 더 하셔야.....

index()함수안에서 $CI 인스턴스를 선언했습니다. 다른 함수인 set_value()에서 그 인스턴스를 쓸 수 있을까요? 없을까요? 쓰려면 어떻게 해야할까요? ^^

그리고 상수 만들었으면 그거 그냥 쓰시면 됩니다. 
(또 하나 후킹에서 $this->변수 선언해도 뒷단에서 못씁니다. 제가 팁 게시판에 올린거 있습니다. 찾아보세요)

이런저런 소스 참고하여 개발하는 것은 좋습니다. 왜 그렇게 만들었는지를 알고 쓰는게 중요합니다.
꾸숑 / 2013/02/27 00:08:38 / 추천 0
들국화// $this->admin_id이런 형태로 만든것은 여기 저기 적용하기가 편하기도 하고. 상수를 직접 변수처럼 사용해 본적이 없어서 입니다.

웅파//  $CI =& get_instance(); 를 함수 마다 선언해줘야 하는군요... 웅파님 답글 읽고 보아 하니.. 그렇군요
조금더 공부하고 검색해서 .. 제대로 hooks 사용해 보겠습니다.
제대로 작업 성공하면 소스 올려 볼게요^^ 몇칠 걸릴것 같아요 ~~~