首页 > 其他 > 网站日记>正文

帝国cms中列表页调用信息tags

提示: 阅读权限:公开  

在帝国的cm的列表页中如何调用信息tags呢?

在内容页,jiuhecai可以使用tags标签:[showtags]'selfinfo',10,0,'',0,'',' ',0,'','tagname'[/showtags]来调用 当前信息中的tags并且带连接。

要是在列表页中也可以这样调用就漂亮了,然并卵。列表页下部不支持标签。那就只好写代码了。

有以下考虑:

  1. tags信息在副表中,要从数据库中调用;

  2. 最好还是用帝国的原生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,那只好在调用前,满足人家的要求了。

最后,勾选使用程序代码后,合并问题一和问题二中的代码就完成任务了。

上一篇:php函数之时间的格式化

下一篇:【帝国cms插件】批量修改上线时间

tags: 帝国cms tags 列表页 帝国

返回首页

相关

热门

站内直通车

[!--temp.bottomnav--]
返回顶部