주제: componenet에서 function 추가는 어찌 하나요???
OS : Windows2000 Server SP4
APM6 (Apache2.2.8 + PHP5.2.5 + MySQL5.0.51a) <- Apache + PHP만 사용.
DB : MySQL4.1.22
Textcube : 1.6.3 확장판
위 환경에서 다중 블로그 사용중입니다.
대표블로그의 표지에 관리자가 올린 공지 글을 작성 일자에 상관없이 상단에 노출 시킬려고 이리저리 찾아보던중...
"MT_Meta_RecentPS_Default" 라는 플러그인에서 최근 글 리스트를 조회하더라구요.
그리고 플러그인에서는
[Textcube_Home]/components/Textcube.Model.Paging.php 소스에 있는
"fetchWithPaging" 라는 function을 호출해서 사용하던데요.
물론, 고수님들은 이미 너무 잘 알고 계시겠지만....php 첨하는 초보에게는 나름 힘든 여정이었네여^^;;;;
암튼, 그리하여 플러그인에서 날리는 쿼리를 제가 만든 쿼리로 대체해서 조회하니...
에러가 발생해서 컴포넌트 소스를 나름 뜯어보니....
전체 카운트 해오는 쿼리가 플러그인에서 날리는 쿼리의 from 절 이하는 그대로 따와서 select 절을 count(*)로 대체해서 전체 건수를 구하던데여..... 이부분에서 에러가 나더라구요.
잔머리를 살포시 굴려 동일한 function을 하나 더 만들고 count 부분의 쿼리만 살포시 바꿔주면 될줄 알았는데...
이것두 에러가 나네여...
컴포넌트에서 function을 추가하면 달리 해줘야 하는게 있는지여???
ps - 새로 던져줄려고 하는 쿼리입니다.
select
e.blogid, e.id, e.userid, e.title
, e.content, e.slogan, e.category, e.published, e.contentFormatter /*, c.label*/
from (
(
select
blogid, id, userid, title
, content, slogan, category, published, contentFormatter, '0' as aaa
from tc_entries
where blogid = '1'
and category = '-2'
and visibility = '2'
order by published desc
)
union
(
select
blogid, id, userid, title
, content, slogan, category, published, contentFormatter, '1' as aaa
from tc_entries
where category <> '-2'
and visibility = '2'
and blogid <> '1'
order by published desc
)
order by aaa, published desc
) e LEFT JOIN tc_Categories c ON e.blogid = c.blogid AND e.category = c.id
ps2 - 새로 생성하려는 function 입니다.
/*
* 기존에 있는 fetchWithPaging function에서 이름만 바꾸고 전체 카운트 구하는 쿼리만 변경한 function
*/
function fetchWithPagingForCoverByPark($sql, $page, $count, $url = null, $prefix = '?page=', $countItem = null) {
global $folderURL, $service;
if ($url === null)
$url = $folderURL;
$paging = array('url' => $url, 'prefix' => $prefix, 'postfix' => '');
if (empty($sql))
return array(array(), $paging);
if (preg_match('/\s(FROM.*)(ORDER BY.*)$/si', $sql, $matches))
$from = $matches[1];
else
return array(array(), $paging);
/* 전체 카운트 구하는 쿼리는 별도 */
$paging['total'] = POD::queryCell("select count(*) from tc_entries where visibility = '2'");
if ($paging['total'] === null)
return array(array(), $paging);
if (empty($count)) $count = 1;
$paging['pages'] = intval(ceil($paging['total'] / $count));
$paging['page'] = is_numeric($page) ? $page : 1;
if ($paging['page'] > $paging['pages']) {
$paging['page'] = $paging['pages'];
if ($paging['pages'] > 0)
$paging['prev'] = $paging['pages'] - 1;
//return array(array(), $paging);
}
if ($paging['page'] > 1)
$paging['prev'] = $paging['page'] - 1;
if ($paging['page'] < $paging['pages'])
$paging['next'] = $paging['page'] + 1;
$offset = ($paging['page'] - 1) * $count;
if ($offset < 0) $offset = 0;
if ($countItem !== null) $count = $countItem;
return array(POD::queryAll("$sql LIMIT $offset, $count"), $paging);
}