웹마스터 팁
필요한 함수 만들어 쓸 때.
2013.04.16 16:40
xe 잘 아시는 분들은 패스해주시구요.
----------------
xe 접하고나서 원하는 사이트를 만들기 위해 불가피하게 함수 수정을 하게 되는 경우가 많습니다.
저도 얼마전까지는 그렇게 코어함수를 수정해서 쓰다가 이곳에서 어느 분이 따로 만들어서 사용할 수 있다는 댓글 팁을 보고 실제로 적용해서 쓰고 있습니다.
config.user.inc.php 파일을 config 폴더에 하나 만듭니다.
(개발하시는 쪽에선 주로 디버깅용으로 사용하는듯 합니다. 그래서인지 이 파일에 대한 자세한 소개가 거의 없네요.)
이 파일은 config 폴더 내에 존재하면 xe 에서 자동으로 읽어들이게 되어있더군요.
코어 업데이트시에도 건재하게 그대로 살아있는 아주 유용한 파일이 아닌가 생각됩니다.
함수 하나를 예를 들겠습니다.
config.user.inc.php 내용.
<?php
if(!defined('__XE__')) {
exit();
}
define('__ZBXE__', __XE__);
function printCommentExtraImages($time_interval = 43200, $IsSecret, $Regdate) {
// variables for icon list
$buffs = array();
// Check if secret post is
if($IsSecret=="Y") $buffs[] = "secret";
// Set the latest time
$time_check = date("YmdHis", time()-$time_interval);
// Check new post
if($Regdate > $time_check) $buffs[] = "new";
// Get the icon directory
$path = sprintf('%s%s',getUrl(), 'modules/comment/tpl/icons/');
//if(!count($buffs)) return;
$buff = null;
foreach($buffs as $key => $val) {
$buff .= sprintf('<img class="newiconimg" src="%s%s.png" alt="%s" title="%s" />', $path, $val, $val, $val);
}
return $buff;
}
?>
이렇게 입력을 하면 xe 어느 곳에서나 위 함수를 불러다 쓸 수 있습니다.
위 함수는 기존 코어 내에 printExtraImages 라는 네임으로 있습니다만
이미지의 경로와 디자인, 그리고 기능을 약간 바꾸기 위해 새로 작성해 본 것입니다.
기존 함수를 수정하게 되면 코어 업데이트때마다 다시 수정을 해야만 하기 때문에 저렇게 따로 빼서 사용중입니다.
다만 기존의 함수 호출 방법인 $oDocument->printCommentExtraImages() 이나 $oComment->printCommentExtraImages()이 아닌
그냥 아래처럼 printCommentExtraImages()만 입력하면 됩니다.
{printCommentExtraImages($widget_info->duration_new, $v->is_secret, $v->regdate)}
그렇지만 함수 작성시 $this-> 지시자는 사용이 안되기 때문에
위의 예처럼 $this 가 가리키는 것들을 모두 함수 인자로 넣어줘야 합니다.($v->is_secret, $v->regdate)
그리고 xe 페이지에서는 그 인자에 해당하는 값을 변수로 미리 넣어줘야 하구요.
함수명은 작성할 때 다른 함수명과 중복되지 않도록 해주세요.(에러발생)
이상... 코어 업데이트시 발생할 에러를 줄이고 간편하게 업데이트를 하기 위한 사용자함수 만드는 방법이었습니다.
------------------
그리고 함수 사용시 있을 수 있는 xml 쿼리는 모듈폴더 내에 임의의 모듈을 생성해서 사용할 수 있습니다.
제 경우는 user_conf라는 모듈을 만들어서 그 안에 필요한 쿼리들을 넣어
필요한 쿼리가 있을때 위 사용자 함수와 연결해서 처리하고 있습니다.
혹 이 부분도 필요한 분이 있으면 알려드리겠습니다.
댓글 3
-
SCAC
2013.04.16 16:49
-
샹하이
2013.04.16 17:05
꼭 필요한 유용한 팁 감사합니다.
-
구름나무바위
2013.10.09 07:57
좋은 정보 감사드립니다.
예전에 XE의 문제라는 글을 본적이 있었는데 그때는 이해를 못했는데 시간이 지나보니 이 문제를 지적한 것 같네요.
xe 사이트를 운영하다 보면 내부 코드를 수정해야 하는 경우가 늘어나는데
업데이트때 마다 일일이 수작업을 해야 되고 코드가 달라지면 확인까지 해야되니 보통 어려운게 아니잖아요.
이 문제로 인해 각종 모듈, 애드온, 위젯등이 무용지물이 되어 버리고...
처음부터 이런 문제를 생각해서 만들었다면 좋았을텐데...
모듈마다 이렇게 사용자 함수를 정의해서 모듈 업데이트마다 영향을 받지 않도록 하는 것도 좋은 방법일텐데 :)
ㄳ 추천 놓고 갑니다.