在帝国的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,那只好在调用前,满足人家的要求了。 最后,勾选使用程序代码后,合并问题一和问题二中的代码就完成任务了。
|