本文主要针对东坡网“TAG高级管理”插件。对于帝国cms原版tag系统来说,由于缺少插件支持,涉及伪静态部分代码是不可用的。

这个网页的调用除了设计tag分类链接代码,其它都适合于tag静态化插件,仅需将其中出现的user_hTagLink换成user_HtmlTagLink

一、TAG调用问题

使用以下各种调用方法的前提条件是:已经按照插件安装说明,将 user_hTagLink 函数写入了 e/class/userfun.php 文件中。

1.1 如何调用当前信息的TAG

将以下函数放入e/class/userfun.php 文件中

//信息所属tag
function user_ReturnTagStr($id,$classid,$exp="<li>|</li>",$limit=10){
	global $dbtbpre,$empire,$public_r;
	$tagstr='';
	$i=0;
	$q=explode("|",$exp);
	$tsql=$empire->query("select tagid from {$dbtbpre}enewstagsdata where id=".$id." and classid=".$classid."");
	while($tr=$empire->fetch($tsql)){
		$tt=$empire->fetch1("select * from {$dbtbpre}enewstags where tagid=".$tr['tagid']." limit 1");
		if($tt['tagid']){
			if($i>$limit&&$limit){
				break;
			}
			$tagurl=user_hTagLink($tr['tagid']);
 			$tagstr.=$q[0].'<a href="'.$tagurl.'" title="'.$tt['tagname'].'" class="c1" target="_blank">'.$tt['tagname'].'</a>'.$q[1];
			$i+=1;
		}
	}
	return $tagstr;
}

在信息页中的调用方法:

<?=user_ReturnTagStr($navinfor['id'],$navinfor['classid'],"| ",4)?>

在列表页中开启程序代码,调用方法:

$tagstr=user_ReturnTagStr($r['id'],$r['classid'],'<li class="tag">|</li>',10);
$listtemp='其它代码'.$tagstr.'其它代码';

在灵动标签中的调用方法:

[e:loop={灵动标签调用语句}]
<?
$thistagstr=user_ReturnTagStr($bqr['id'],$bqr['classid'],'| ',10);
echo $thistagstr;
?>
[/e:loop]

1.2 按TAG分类调用TAG

调用代码如下:

<?
$tcsql=$empire->query("select * from {$dbtbpre}enewstagsclass where classid>0 order by classid desc");
while($tcr=$empire->fetch($tcsql)){
	//TAG分类链接
	$tagclassurl=user_TagClassUrl($tcr['classid'],1);
?>
	<!-- 显示分类名称 -->
   <div class="showtag">
	<h3><a href="<?=$tagclassurl?>"><?=$tcr['classname']?></a></h3>
         <ul>
	<?
	$tsql=$empire->query("select * from {$dbtbpre}enewstags where cid=".$tcr['classid']." order by tagid desc limit 10");
	while($tr=$empire->fetch($tsql)){
		$tagurl=user_hTagLink($tr['tagid']);
	?>
		<!-- 显示tag模板开始 -->
		<li><a href="<?=$tagurl?>"><?=$tr['tagname']?></a>(<?=$tr['num']?>)</li>
		<!-- 显示tag模板结束 -->
	<?
	}
	?>
        </ul>
  </div>
<?
}
?>

在以上代码中,蓝色部分控制了现实tag的分类,可以自由修改。classid>0 表示已分类的tag,classid=3 表示分类id为3的tag

红色部分控制了每个分类下TAG显示的数量,数字部分可以自由修改。若限制显示数量,则可删除红色部分。

1.3 常规的批量调用TAG

调用代码如下:

<ul>
<?
$tsql=$empire->query("select * from {$dbtbpre}enewstags order by tagid desc limit 10");
while($tr=$empire->fetch($tsql)){
	$tagurl=user_hTagLink($tr['tagid']);
?>
		<!-- 显示tag模板开始 -->
		<li><a href="<?=$tagurl?>"><?=$tr['tagname']?></a>(<?=$tr['num']?>)</li>
		<!-- 显示tag模板结束 -->
<?
}
?>
</ul>

在以上代码中,绿色部分控制了tag显示排序,常用方式有三种:tagid desc 最大tagid在最前,tagid 最小tagid在最前,num desc tag信息数最多在最前

二、结构说明及相关概念

在本插件中,前台tag可以做如下图展示:

TAG展示结构

插件自带一个聚合页,前台文件是 e/tags/alltags.php ,此文件可以展示上图中第一级和第二级的类容。此文件支持封面模板和列表模板两种形式,可以在插件中设置。以上是不带参数的情况。此文件支持两个参数:cid——TAG分类id;page——分页号,当带有参数时,自动转为列表模式。

上图中第三级的内容就是最终tag展示页了,前台文件是 e/tags/htag.php ,此文件支持两个参数:tag——tag标识,可以是tagid或者tag的拼音,具体情况根据插件设置;page——分页号。

所谓的“TAG伪静态首页”,就是tag在没有分页的情况下时的链接。

三、伪静态说明

在插件设置中,一般来说可以将设置伪静态格式如下:

TAG伪静态格式:tags/[!--tag--]_[!--page--]
TAG伪静态首页:tags/[!--tag--]/
TAG首页分页伪静态:tags-[!--cid--]-[!--page--]
TAG首页伪静态:tags/

根据以上伪静态格式,提供服务器的四条伪静态规则,仅供参考。

apache的.htaccess:

RewriteEngine On
#tag首页
RewriteRule ^tags/(.*)/$ e/tags/htag.php?tag=$1&page=$2

#tag列表
RewriteRule ^tags/(.*)_(.*)$ e/tags/htag.php?tag=$1&page=$2

#alltag
RewriteRule ^tags/$ e/tags/alltags.php

#alltag-cid
RewriteRule ^tags-(.*)-(.*)$ e/tags/alltags.php?cid=$1&page=$2

Nginx:

rewrite ^([^\.]*)/tags/(.*)/$ $1/e/tags/htag.php?tag=$2&page=$3 last;

rewrite ^([^\.]*)/tags/(.*)_(.*)$ $1/e/tags/htag.php?tag=$2&page=$3 last;

rewrite ^([^\.]*)/tags/$ $1/e/tags/alltags.php last;

rewrite ^([^\.]*)/tags-(.*)-(.*)$ $1/e/tags/alltags.php?cid=$2&page=$3 last;

IIS6的httpd.ini:

[ISAPI_Rewrite]
CacheClockRate 3600
RepeatLimit 32

#tag首页
RewriteRule ^tags/(.*)/$ e/tags/htag.php?tag=$1&page=$2

#tag列表
RewriteRule ^tags/(.*)_(.*)$ e/tags/htag.php?tag=$1&page=$2

#alltag
RewriteRule ^tags/$ e/tags/alltags.php

#alltag-cid
RewriteRule ^tags-(.*)-(.*)$ e/tags/alltags.php?cid=$1&page=$2

IIS7的web.config:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
	<rule name="tagindex">
		<match url="^(.*/)*tags/(.*)/\?*(.*)$" />
		<action type="Rewrite" url="{R:1}/e/tags/htag.php\?tag={R:2}&amp;page={R:3}" />
	</rule>
	<rule name="taglist">
		<match url="^(.*/)*tags/(.*)_(.*)\?*(.*)$" />
		<action type="Rewrite" url="{R:1}/e/tags/htag.php\?tag={R:2}&amp;page={R:3}" />
	</rule>
	<rule name="alltag">
		<match url="^(.*/)*tags/\?*(.*)$" />
		<action type="Rewrite" url="{R:1}/e/tags/alltags.php" />
	</rule>
	<rule name="alltagcid">
		<match url="^(.*/)*tags-(.*)-(.*)\?*(.*)$" />
		<action type="Rewrite" url="{R:1}/e/tags/alltags.php\?cid={R:2}&amp;page={R:3}" />
	</rule>
</rules>
</rewrite>
</system.webServer>  
</configuration>

四、深度调用:tag分类链接调用

在e/class/userfun.php 文件中写入以下函数

//tag分类链接
function user_TagClassUrl($cid){
	global $htag_r;
	include_once ECMS_PATH.'e/dongpo/htag/dp_funs.php';
	$url=htag_TagClassUrl($cid);
	return $url;
}

在模板中调用此函数即可,$cid是分类id

五、深度调用:tag分类页显示tag的信息

在列表模式下,开启使用程序代码,代码如下

$tagurl=user_hTagLink($r[tagid]);
$thisstr='<a href="'.$tagurl.'"><h3>'.$r[tagname].'('.$r[num].')</h3></a><p>简介:'.$ta[intro].'<p>';

$infostr='';
$isql=$empire->query("select id,classid from {$dbtbpre}enewstagsdata where tagid='".$r[tagid]."' limit 10");
while($ir=$empire->fetch($isql)){
	if(empty($class_r[$ir[classid]][tbname])){
		continue;
	}
	$infor=$empire->fetch1("select id,title,titleurl from {$dbtbpre}ecms_".$class_r[$ir[classid]][tbname]." where id='$ir[id]' limit 1");
	if(empty($infor['id']))	{
		continue;
	}
	$infostr.='<a href="'.$infor[titleurl].'">'.$infor[title].'</a>';
}
if($infostr){
	$infostr='<p>'.$infostr.'</p>';
}

$listtemp=$thisstr.$infostr.'<hr>';

在模板中调用此函数即可,$cid是分类id

六、深度调用:tag首页按照字母顺序调用

tag首页选择封面模板,在模板中输入以下代码:

<?php

$zm_r=array('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z');

?>

<!-- 全部字母 -->
<div class="zmlist">
	字母:
	<?
	foreach($zm_r as $zm){
	?>
		<a href="#<?=$zm?>"><?=strtoupper($zm)?></a>
	<?
	}
	?>
</div>

<div class="taglist">

<!-- 每个字母下的tag -->
<?
foreach($zm_r as $zm){
?>

<h3><a name="<?=$zm?>"><?=strtoupper($zm)?></a></h3>
<ul>

	<?
		$zsql=$empire->query("select tagid from {$dbtbpre}dp_tagsadd where py like '".$zm."%' order by tagid desc");
		while($zr=$empire->fetch($zsql)){
			$t=$empire->fetch1("select * from {$dbtbpre}enewstags where tagid='$zr[tagid]' limit 1");
			$tagurl=user_hTagLink($zr[tagid]);
			?>

			<li><a href="<?=$tagurl?>"><?=$t['tagname']?></a></li>

			<?
		}
	?>


</ul>
<?
}
?>

</div>

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注