General

スキン変数<%blog%>

2008年1月6日

スキン変数の<%blog%>は、最も重要な機能の一つ。今のところ次のように記述しているが、変更の余地は大いにあるのでメモしておく。

static public function skinvar_blog($data,$tempname,$num=10,$category=0,$mode='parse'){
    switch($mode){
    case 'count':
        $select='COUNT(*)';
        break;
    case 'parse':
    default:
        $select='i.inumber as itemid, i.ititle as title, i.ibody as body, i.imore as more, i.itime as itime, i.iclosed as closed, '.
            'm.mname as author, m.mnumber as authorid, m.memail as email, m.murl as authorurl, '.
            'c.cname as category, i.icat as catid, c.cblog as blogid, '.
            'COUNT(o.cnumber) as commentnum ';
    }
    $search=(string)@$_GET['query'];
    $catid=(int)($category?$category:@$_GET['catid']);
    $startpos=(int)@$_GET['startpos'];
    if (preg_match('/^([0-9]+)\(([0-9]+)\)$/',(string)$num,$m)) list($m,$num,$startpos)=$m;
    $res=sql::query("SELECT DISTINCT $select ".
        'FROM jeans_item as i, jeans_member as m, jeans_category as c '.
        'LEFT JOIN jeans_comment as o ON o.citem=i.inumber '.
        'WHERE c.cblog=<%blogid%> AND c.catid=i.icat AND i.idraft=0 AND i.iauthor=m.mnumber AND i.idraft=0 '.
        ($search==''?'':'AND (i.ititle LIKE <%search%> OR i.ibody LIKE <%search%> OR i.imore LIKE <%search%>) ').
        ($catid?'AND c.catid=<%catid%> ':'').
        'GROUP BY i.inumber '.
        ($mode=='count'?'':'ORDER BY i.itime DESC LIMIT <%startpos%>, <%num%> '),
        array('blogid'=>(int)self::$blogid,
              'startpos'=>$startpos,
              'num'=>(int)$num,
              'search'=>"%$search%",
              'catid'=>$catid));
    switch($mode){
    case 'count':
        $row=sql::fetch_row($res);
        return $row[0];
    case 'parse':
    default:
        while($row=sql::fetch_assoc($res)){
            jit::parse_template($tempname,'ITEM',self::dataArray($data),$row);
        }
    }
}

LEFT JOINでjeans_commentテーブルを結合しているが、記事数が多くなった場合にこのクエリーの実行にどれくらいの時間を要するようになるかで、変更の余地ありである。現在のところ、記事数が2つの状態で、800μ秒ほど掛かっている。

コメント

コメントはありません

コメント送信