1

주제: 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);
}