CI 묻고 답하기

제목 [질문]config 값을 library 에서 불러 쓰기, Global 하게 meta() 사용하기
글쓴이 우노 작성시각 2009/07/08 09:23:11
댓글 : 5 추천 : 0 스크랩 : 0 조회수 : 32489   RSS
안녕하세요. 요 며칠사이에 제 질문으로 도배가 되는 느낌이네요. ^^;;
그래도 염치불구하고 질문을 드립니다.

1. config 값을 library 에서 불러 쓸려고 하는데 잘 안되네요.

controller 에서는 아래와 같이 바로 config 값을 불러서 사용할 수 있는데요.
$language = $this->config->item('language'); // line 56

library 에서 동일하게 불러쓰면 에러가 발생합니다.

A PHP Error was encountered
Severity: Notice
Message: Undefined property: Minitextile::$config
Filename: libraries/Minitextile.php
Line Number: 56

Fatal error: Call to a member function item() on a non-object in /xxxx/CodeIgniter/system/application/libraries/Minitextile.php on line 56

별도로 library에서 load를 해줘야 하는 것 같기도 한데 어떻게 해야 할지 모르겠습니다.
$this->config->load('language', TRUE);
이렇게도 시도해봤는데, 안되네요.

2. html helper 에 보면 meta() 가 있더라구요. 이를 한곳에서만 선언하고 Global 하게 모든 view에서 불러서 사용하고 싶습니다.
하지면 지금은 매번 반복해서 선언하고 있습니다.

controller 의
function index()
{
$data['meta'] = array(
array('name' => 'Content-type', 'content' => 'text/html; charset=utf-8', 'type' => 'equiv'),
array('name' => 'Content-Language', 'content' => $this->config->item('language')),
array('name' => 'robots', 'content' => 'all'),
array('name' => 'description', 'content' => $this->config->item('description')),
array('name' => 'keywords', 'content' => $this->config->item('keywords')),
array('name' => 'copyright', 'content' => $this->config->item('copyright'))
);

....
}

이렇게 하고, view 에서 라고 쓰면 되는데... 어떻게 해야 한곳에서만 선언하고 모든 view에서 불러 쓸수 있을 까요?


감사합니다.
 다음글 [잡담]PHP 소스를 MVC 로 전환하기 (2)
 이전글 [질문]widget plugin 사용하기 (5)

댓글

변종원(웅파) / 2009/07/08 09:40:43 / 추천 0
1번. ci의 동작구조를 먼저 보셨으면 바로 답이 나왔을텐데.. ^^
제가 올린 글중에 CI가 어떤 순서로 작동하는지 이미지로 되어있는게 있습니다.
라이브러리안에서 ci의 구조를 사용하려면

$CI =& get_instance();
$language = $CI->config->item('language');

이렇게 사용하시면 됩니다.

매뉴얼 숙독하시면 여러모로 편합니다.


2번은 top include 부분을 만들어서 적용하시거나 hook 기능을 사용하시면 됩니다. 매뉴얼에서 후킹 부분 보시면 됩니다.
ci의 프로세스중에서 시스템이 로드된 직후, 콘트롤러가 로드되기전, 로드된후 등 원하는 포인트에 프로그램을 실행할 수 있습니다.
시스템 로드된 직후에 meta()가 아닌 일반 html 형태의 meta값을 넣어놓으면 ci를 거치는 모든 프로그램에서 상단에 먼저 선언이 됩니다.
제 경우에는 시스템 로드된 직후에 주소에 해당하는 값을 모두 상수로 선언하여 그 이후 사용되는 모든 CI프로그램에서 상수를 사용하고 있습니다.
예를 들면 주소가 http://ggg.com/product/gom 이라면 product(제품카테고리) gom(상품)에 해당하는 게시판이나 기타 값을 모두 상수로 선언하여
사용합니다. 그전에 설정프로그램에서 설정값을 xml로 만들고 후킹프로그램에서 xml을 읽어서 사용하기때문에 db 연결을 한번 줄일 수가 있죠.
실제 사용자가 접속했을때 게시판 설정을 가져오려면 보통 db연결을 하는데 xml로 대치하여 db 연결줄이기. ^^
후킹은 질문하신 내용뿐만 아니라 잘 사용하시면 정말 편한 기능입니다.
우노 / 2009/07/08 09:53:58 / 추천 0
감사합니다.
첫번째 질문을 쉽게 해결이 되었습니다. 매뉴얼을 한번 숙독은 했는데... 아직 실제하고 완전히 매칭시킬 수준이 안됩니다.

두번째 사항은 원래 저 역시 상수로 include 시켜서 작성해 놓았다가, html helper 안에 meta() 가 있어서 사용해 볼려다가 위와 같은 문제가 발생했던 것입니다.

알려주신 hook 기능은 한번 찬찬히 읽어보도록 하겠습니다.
마냐 / 2009/07/08 16:00:48 / 추천 0
전 그냥 위젯 플로그인으로.. head 불러올때 같이..
hook는 리턴값을 받을길이..
변종원(웅파) / 2009/07/08 16:46:22 / 추천 0
상수로 선언하시면 됩니다 배열도 serialize화하여 넘기면 됩니다
변종원(웅파) / 2009/07/08 22:24:24 / 추천 0
후킹부분 매뉴얼의 설명이 좀 부실하죠?
어떤 것은 쓸수있고 어떤 것은 쓸수없고가 정확히 명시되면 사용하기 쉬울텐데
저도 각 포인트마다 헷갈렸습니다.
나중에 포럼오픈하고 php.net 매뉴얼처럼 매뉴얼 하단에 매뉴얼에 대한 예제나 팁을 적을 수 있도록 할 예정입니다.
그리고 매뉴얼 내용에 해당하는 소스도 올려놓고 실행되는 부분까지 적용할 예정입니다.
그러면 좀 더 쉽게 CI에 접근할 수 있겠죠. ^^