在帝国的cm的列表页中如何调用信息tags呢?
在内容页,jiuhecai可以使用tags标签:[showtags]'selfinfo',10,0,'',0,'',' ',0,'','tagname'[/showtags]来调用 当前信息中的tags并且带连接。
要是在列表页中也可以这样调用就漂亮了,然并卵。列表页下部不支持标签。那就只好写代码了。
有以下考虑:
tags信息在副表中,要从数据库中调用;
最好还是用帝国的原生tags函数,这样伪静态什么的包容性好些。
第一个问题:
$tbname=$class_r[$r[classid]][tbname]; $fb=$r[stb]; $ftbname=$dbtbpre."ecms_".$tbname."_data_".$fb; $jhcr['infotags'] = $empire->gettotal("select infotags as total from $ftbname where id='$r[id]'"); $GLOBALS['navinfor']=$jhcr;
第二个问题
ob_start(); sys_eshowtags('selfinfo',10,0,'',0,'',' ',0,'','tagname'); $tags=ob_get_clean(); $listtemp='<li><a href="[!--titleurl--]" title="[!--oldtitle--]">[!--title--]</a> <span style="float:right">Tags: <i>'.$tags.'</i></span></li>';
说明下,showtags标签对应的函数就是
//显示TAGS function sys_eShowTags($cid,$num=0,$line=0,$order='',$isgood='',$isgoodshow='',$showjg='',$shownum=0,$cs='',$vartype=''){ global $empire,$dbtbpre,$public_r,$navinfor; $str=''; if(empty($showjg)) { $showjg=' '; } $ln=0; if($cid=='selfinfo') { if(empty($navinfor['infotags'])) { return ''; } $jg=''; $r=explode(',',$navinfor['infotags']); $count=count($r); for($i=0;$i<$count;$i++) { $ln++; $br=''; if($line) { if($ln%$line==0) { $br='<br>'; } } //TAGSID if($vartype=='tagid') { $tagr=$empire->fetch1("select tagid from {$dbtbpre}enewstags where tagname='".RepPostVar($r[$i])."' limit 1"); } if(empty($cs)&&!empty($public_r['rewritetags'])) { if($vartype=='tagid') { $rewriter=eReturnRewriteTagsUrl($tagr['tagid'],'etagid'.$tagr['tagid'],1); $tagsurl=$rewriter['pageurl']; } else { $rewriter=eReturnRewriteTagsUrl(0,$r[$i],1); $tagsurl=$rewriter['pageurl']; } } else { $tagsurl=$public_r[newsurl].'e/tags/?'.($vartype=='tagid'?'tagid='.$tagr['tagid']:'tagname='.urlencode($r[$i])).$cs; } $str.=$jg.'<a href="'.$tagsurl.'" target="_blank">'.$r[$i].'</a>'.$br; $jg=$br?'':$showjg; } } else { $and=''; $where=''; if($cid) { $where=strstr($cid,',')?"cid in ($cid)":"cid='$cid'"; $and=' and '; } if($isgood) { $where.=$and.'isgood=1'; } if($where) { $where=' where '.$where; } $order=$order?' '.$order:' tagid desc'; $limit=''; if($num) { $limit=' limit '.$num; } //推荐标红 $gfont1=''; $gfont2=''; if($isgoodshow) { if(strstr($isgoodshow,'r')) { $gfont1='<font color="red">'; $gfont2='</font>'; } if(strstr($isgoodshow,'s')) { $gfont1=$gfont1.'<b>'; $gfont2='</b>'.$gfont2; } } $jg=''; $snum=''; $sql=$empire->query("select tagid,tagname,num,isgood from {$dbtbpre}enewstags".$where." order by".$order.$limit); while($r=$empire->fetch($sql)) { if($shownum) { $snum='('.$r[num].')'; } $font1=''; $font2=''; if($isgoodshow&&$r[isgood]) { $font1=$gfont1; $font2=$gfont2; } $ln++; $br=''; if($line) { if($ln%$line==0) { $br='<br>'; } } if(empty($cs)&&!empty($public_r['rewritetags'])) { $rewriter=eReturnRewriteTagsUrl($r['tagid'],$vartype=='tagid'?'etagid'.$r['tagid']:$r['tagname'],1); $tagsurl=$rewriter['pageurl']; } else { $tagsurl=$public_r[newsurl].'e/tags/?'.($vartype=='tagid'?'tagid='.$r[tagid]:'tagname='.urlencode($r[tagname])).$cs; } $str.=$jg.'<a href="'.$tagsurl.'" target="_blank">'.$font1.$r[tagname].$snum.$font2.'</a>'.$br; $jg=$br?'':$showjg; } } echo $str; }
但是,这个函数帝国源码包装过度,直接echo了结果,而不是函数返回值,无奈只好ob_start()拦截后获取。还有就是这个函数调用了global $navinfor,那只好在调用前,满足人家的要求了。
最后,勾选使用程序代码后,合并问题一和问题二中的代码就完成任务了。