-----------------------------------------------------------------------------
插件名称:超级TAG管理
插件作者:东坡网
官方网站:dp1037.com
----------------------------
-----------------------------------------------------------------------------
插件名称:超级TAG管理
插件作者:东坡网
官方网站:dp1037.com
-----------------------------------------------------------------------------
东坡网——致力于帝国cms插件和二次开发,为帝国cms加油!
-----------------------------------------------------------------------------
帮助文档:
http://dp1037.com/help/itag/
超级TAG管理 功能简介
一、TAG展示新增功能
1、TAG拼音功能,TAG的链接可以用拼音展示;
2、TAG可以生成静态文件,TAG静态链接四种方式可选;
3、TAG可以动态或伪静态展示;
4、带有TAG分类页,展示所有tag;
5、TAG动态页自带缓存功能;
6、TAG新增图片字段,上传图片,并可以在附件里管理图片;
7、TAG新增编辑器字段,可以储存更多资料。
二、管理新增功能
1、新增、修改信息,自动更新当前TAG
2、带分词功能,从标题提取TAG 和 批量提取TAG,支持火车头发布时自动提取
3、从信息列表推送信息到TAG
4、批量同步TAG到关键字替换
5、TAG可以单独设置模板
6、可以批量增加TAG
7、TAG批量关联信息
第二步:数据表安装
1、在浏览器地址栏中输入 http://你的网站地址/e/dongpo/itag/install/ 回车执行安装程序
2、选择“安装”,然后按照提示执行下一步操作
3、看到“安装数据库成功”表示安装数据库成功
4、为确保完全,将 /e/dongpo/itag/ 目录下的 install 文件夹删除或改名
可能出现的错误及处理方法:
(1)提示:安装程序已锁定
解决:将 /e/dongpo/itag/install/ 目录下的 install.off 文件删除
(2)提示:Table ... already exists
解决:先执行“卸载”,再执行“安装”
打开 e/class/userfun.php 文件,在 ?> 之前一行插入如下代码:
function dp_itagLink($tagid,$tagname=''){
include_once(ECMS_PATH.'e/dongpo/itag/dp_funs.php');
$url=dp_itag_url($tagid,$tagname);
return $url;
}
function dp_itagClassLink($cid){
include_once(ECMS_PATH.'e/dongpo/itag/dp_funs.php');
$url=dp_itag_curl($cid);
return $url;
}
function dp_itagHtml($classid,$id){
global $empire,$dbtbpre,$dp_itag;
include_once(ECMS_PATH.'e/dongpo/itag/dp_funs.php');
if(empty($dp_itag)){
$sr=$empire->fetch1("select * from {$dbtbpre}dp_itag_set where k='all'");
$dp_itag=json_decode($sr['v'],true);
if(empty($dp_itag)){
return false;
}
}
$sql=$empire->query("select tagid from {$dbtbpre}enewstagsdata where classid='$classid' and id='$id'");
while($r=$empire->fetch($sql)){
$add=$empire->fetch1("select * from {$dbtbpre}enewstags where tagid='$r[tagid]' limit 1");
$addr=$empire->fetch1("select * from {$dbtbpre}dp_itag where tagid='$r[tagid]' limit 1");
if(!$dp_itag['ishtml']){
iTagDelCache($addr['tagid'],$addr['py']);
}else{
iTagHtml($add,$addr);
}
}
}
伪静态设置
1、只有TAG页面模式为 动态页面 时,才需要设置伪静态
2、设置步骤:
(1)在插件 参数设置 页面,设置好TAG伪静态规则
(2)根据伪静态规则,设置服务器的伪静态规则
TAG伪静态网址说明:
(1)支持三种标签,TAGID:[!--tagid--] TAG拼音:[!--tagpy--] 分页号:[!--page--]
(2)[!--tagpy--] 和 [!--tagid--] 不能同时使用
(3)以 tagid 为规则的网址,对应的网址是 e/tags/itag.php?tagid=[!--tagid--]&page=[!--page--]
(4)以 tagpy 为规则的网址,对应的网址是e/tags/itag.php?py=[!--tagpy--]&page=[!--page--]
分类伪静态网址说明:
(1)支持两种标签,TAG分类ID:[!--cid--] 分页号:[!--page--]
(2)对应的网址是 e/tags/itaglist.php?cid=[!--cid--]&page=[!--page--]
例子:
(1)一个网站的TAG网址伪静态规则设置如下:
TAG不含分页网址:/
tag/[!--tagpy--].html
TAG含有分页网址:/
tag/[!--tagpy--]_[!--page--].html
分类不含分页网址:/
tag/list_[!--cid--]
分类含有分页网址:/
tag/list_[!--cid--]_[!--page--]
(2)那么根据不同WEB服务器,服务器伪静态规则不同,如下:
.htaccess
RewriteEngine On
#tag拼音网址规则 (如果以tagid为网址,则将py改成tagid)
RewriteRule ^tag/([a-z0-9]+)_([0-9]+).html$ e/tags/itag.php?py=$1&page=$2
RewriteRule ^tag/([a-z0-9]+).html$ e/tags/itag.php?py=$1
#tag分类网址规则
RewriteRule ^tag/list_([0-9]+)_([0-9]+)$ e/tags/itaglist.php?cid=$1&page=$2
RewriteRule ^tag/list_([0-9]+)$ e/tags/itaglist.php?cid=$1
Nginx
#tag拼音网址规则 (如果以tagid为网址,则将py改成tagid)
rewrite ^([^\.]*)/tag/([a-z0-9]+)_([0-9]+).html$ $1/e/tags/itag.php?py=$2&page=$3 last;
rewrite ^([^\.]*)/tag/([a-z0-9]+).html$ $1/e/tags/itag.php?py=$2 last;
#tag分类网址规则
rewrite ^([^\.]*)/tag/list_([0-9]+)_([0-9]+)$ $1/e/tags/itaglist.php?cid=$1&page=$2 last;
rewrite ^([^\.]*)/tag/list_([0-9]+)$ $1/e/tags/itaglist.php?cid=$1 last;
httpd.ini
[ISAPI_Rewrite]
CacheClockRate 3600
RepeatLimit 32
#tag拼音网址规则 (如果以tagid为网址,则将py改成tagid)
RewriteRule ^tag/([a-z0-9]+)_([0-9]+).html$ e/tags/itag.php?py=$1&page=$2
RewriteRule ^tag/([a-z0-9]+).html$ e/tags/itag.php?py=$1
#tag分类网址规则
RewriteRule ^tag/list_([0-9]+)_([0-9]+)$ e/tags/itaglist.php?cid=$1&page=$2
RewriteRule ^tag/list_([0-9]+)$ e/tags/itaglist.php?cid=$1
web.config
<rules>
<rule name="itagpage">
<match url="^(.*/)*tag/([a-z0-9]+)_([0-9]+)\.html\?*(.*)$" />
<action type="Rewrite" url="{R:1}/e/tags/itag.php\?py={R:2}&page={R:3}" />
</rule>
<rule name="itag">
<match url="^(.*/)*tag/([a-z0-9]+)\.html\?*(.*)$" />
<action type="Rewrite" url="{R:1}/e/tags/itag.php\?py={R:2}" />
</rule>
<rule name="listtagpage">
<match url="^(.*/)*tag/list_([0-9]+)_([0-9]+)\?*(.*)$" />
<action type="Rewrite" url="{R:1}/e/tags/itaglist.php\?cid={R:2}&page={R:3}" />
</rule>
<rule name="listtag">
<match url="^(.*/)*tag/list_([0-9]+)\?*(.*)$" />
<action type="Rewrite" url="{R:1}/e/tags/itaglist.php\?cid={R:2}" />
</rule>
</rules>
动态页缓存设置
1、默认没有开启缓存功能,只有设置TAG为动态页面,才需要使用缓存功能
2、缓存功能开启,以及配置,需要修改配置文件 e/dongpo/itag/cache_config.php
3、网站目录一定要以“/”结尾,填写示例:
windows系统填写格式: G:/web/website/
linux系统填写格式: /data/wwwroot/demo/
如何快速查看网站目录?
打开页面:系统 》网站多访问端 》管理网站访问端 》增加访问端
在页面展示的表单中,可以看到 访问端目录 ,就是这里需要填写的网站目录
TAG页自动更新
1、TAG页自动更新是指,新增、修改信息时,可以更新信息的TAG页。更新包含静态tag生成和动态tag缓存更新。
2、修改方法
(1)打开文件 e/class/hinfofun.php
(2)查找
GetHtml($add['classid'],$id,'',0);
,在其下一行插入代码:
dp_itagHtml($add['classid'],$id);
修改后的代码如图1:
(3)查找
GetHtml($add['classid'],$add['id'],'',0);
,共有两处,在其下一行插入代码:
dp_itagHtml($add['classid'],$add['id']);
修改后的代码如图2:
从标题提取TAG和批量提取
一、从标题提取TAG
1、当信息标题存在且关键字为空时,鼠标点击一下 关键字 输入框,程序会将标题分词,提取词语,填充到 关键字 和 TAGS 里。
2、实现此功能:
(1)进入页面:系统 》 数据表与系统模型 》管理数据表,点击需要使用本功能的数据表后的 管理字段
(2)修改 title 字段,在 输入表单替换html代码 中,第一行加入代码:
<?php include_once("../dongpo/itag/getword.php");?>
修改后变成如图所示:
二、批量提取TAG
1、在本插件管理菜单中,点击“批量操作”,就可以看到“批量提取TAG”界面
2、建议提取到临时表,可以避免将提取到的垃圾词入库成tag
3、提取到临时表后,需要在“临时TAG”页面中对临时tag执行“入库”操作,才能临时tag真正变成tag
4、“一键入库”功能,是将所有信息数大于1的临时tag入库
自动提取TAG设置
自动提取标题中的词语作为tag和关键字
打开 e/class/hinfofun.php, 找到
$add['infotags']=hRepPostStr($add['infotags'],1);
在其下一行插入代码:
if(empty($add['infotags'])){
include_once(ECMS_PATH.'e/dongpo/itag/pscws/tiqu2.php');
$add['infotags'] = itag_tiqu($add[title]);
if(empty($add[keyboard])){
$add[keyboard] = $add['infotags'];
}
}
说明
只有当信息的infotags字段为空时,才会执行此程序
从信息列表推送信息到TAG
1、在信息列表页,增加一个推送至TAG按钮,方便信息推送到tag。
2、实现此功能:
(1)打开信息列表模板文件 e/data/html/list/listinfo.php
(2)找到代码 </script> 在其上一行插入代码:
function PushInfoToTag(form){
var id='';
id=GetSelectId(form);
if(id==''){
alert('请选择要推送的信息');
return false;
}
window.open('../dongpo/itag/push.php?<?=$ecms_hashur['ehref']?>&classid=<?=$classid?>&id='+id,'PushToTag','width=600,height=600,scrollbars=yes,left=300,top=150,resizable=yes');
}
(3)找到代码 <input type="button" name="Submit112" value="推送 在其上一行插入代码:
<input type="button" name="Submit52" value="推送至TAG" onClick="PushInfoToTag(this.form);">
(4)刚才找到的“推送”是推送的碎片,不需要此功能的可以顺手将此行删除,或者修改为“推送至碎片”以方便区分
同步功能详解
重要问题:同步到哪里?
执行“同步”操作后,TAG将写入内容关键字数据表,具体位置:其它 》 新闻模型相关 》 内容关键字 ,如图:
“内容关键字”是用来替换文章内容词语,给词语加链接的。如果不详细了解“替换关键字”,请勿使用本插件的同步功能。
TAG图片功能详解
1、tag图片可以通过三处上传:输入框图片上传、编辑器图片上传、编辑器多图上传。支持生成缩略图、加水印功能。如图:
2、图片会统一上传到 d/file/p/ 目录
3、图片会写入公共附件数据表 phome_enewsfile_public ,表中字段 id 表示 tagid
4、可以通过后台附件管理功能,管理tag图片
5、删除tag时,tag所属图片会被同步删除
TAG模板自定义
有三处可以设置TAG模板:
(1)TAG新增/修改 页面,tag所属模板,优先级最高
(2)分类管理中,此分类下tag使用的模板,优先级居中
(3)插件管理的 参数设置 ,设置TAG默认列表模板,优先级最低
TAG页模板内的调用
1、当前tag的所有相关字段数组名:$navinfor,可以用 <?=$navinfor[字段名]?>获取相关值
tagid: <?=$navinfor[tagid]?>
tag名: <?=$navinfor[tagname]?>
信息数: <?=$navinfor[num]?>
推荐等级: <?=$navinfor[isgood]?>
tag分类id: <?=$navinfor[cid]?>
tag网页标题: <?=$navinfor[tagtitle]?>
tag网页关键词: <?=$navinfor[tagkey]?>
tag网页描述: <?=$navinfor[tagdes]?>
最后修改时间(时间戳): <?=$navinfor[fclast]?>
设置的tag模板id: <?=$navinfor[tempid]?>
tag拼音: <?=$navinfor[py]?>
tag图片: <?=$navinfor[tagpic]?>
tag单页内容: <?=$navinfor[tagtext]?>
tag链接: <?=$navinfor[tagurl]?>
2、上一个TAG
[e:loop={"select * from {$dbtbpre}enewstags where tagid<$navinfor[tagid] order by tagid desc limit 1",0,24,0}]
<a href=" <?=dp_itagLink($bqr[tagid])?>" target="_blank"> <?=$bqr['tagname']?></a>
[/e:loop]
3、下一个TAG
[e:loop={"select * from {$dbtbpre}enewstags where tagid>$navinfor[tagid] order by tagid limit 1",0,24,0}]
<a href=" <?=dp_itagLink($bqr[tagid])?>" target="_blank"> <?=$bqr['tagname']?></a>
[/e:loop]
4、同分类下的其它TAG 10个,没有分类id时返回空
<?php
if($navinfor['cid']){
?>
[e:loop={"select * from {$dbtbpre}enewstags where cid=$navinfor[cid] and tagid!=$navinfor[tagid] order by tagid limit 10",0,24,0}]
<a href=" <?=dp_itagLink($bqr[tagid])?>" target="_blank"> <?=$bqr['tagname']?></a>
[/e:loop]
<?}?>
分类页模板内的调用
分类页模板 的 列表内容模板(list.var) 使用的标签:
//以下几项,在代码模式中,用$r数组可以调用出来
tagid: [!--tagid--]
tag名: [!--tagname--]
信息数: [!--num--]
推荐等级: [!--isgood--]
tag分类id: [!--cid--]
tag网页标题: [!--tagtitle--]
tag网页关键词: [!--tagkey--]
tag网页描述: [!--tagdes--]
最后修改时间(时间戳): [!--fclast--]
//以下三项,也可以在代码模式中,用$ta数组调用出来
tag链接: [!--tagurl--]
tag拼音: [!--py--]
tag图片: [!--tagpic--]
调用信息的TAG
1、调用信息TAG的函数,放进 e/class/userfun.php 文件 ?> 代码之前,方便在模板中调用
/***
$classid 信息栏目id
$id 信息id
$exp 包裹每一个tag的前后标签,用|分割,默认是<li><a href="">TAG</a></li>
$limit 调用tag数量,默认10个
***/
function dp_InfoTag($classid,$id,$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=dp_itagLink($tr['tagid']);
$tagstr.=$q[0].'<a href="'.$tagurl.'" title="'.$tt['tagname'].'" class="c1" target="_blank">'.$tt['tagname'].'</a>'.$q[1];
$i+=1;
}
}
return $tagstr;
}
2、在内容页模板中使用上述dp_InfoTag函数,调用当前信息的tag
<?=dp_InfoTag($navinfor['classid'],$navinfor['id'],'|<br>',8)?>
3、在列表页中,列表内容模板(list.var) 使用dp_InfoTag函数的例子:
$tagstr=dp_InfoTag($r['classid'],$r['id'],'| ',5);
$listtemp='
<li>
<h3><a href="[!--titleurl--]">[!--title--]</a></h3>
<p>[!--smalltext--]</p>
TAG:'.$tagstr.'
</li>
';
注意需要勾选使用程序代码。帝国CMS官网:list.var使用程序代码说明
4、灵动标签中使用dp_InfoTag函数的例子:
[e:loop={灵动标签调用语句}]
<?
$thistagstr=dp_InfoTag($bqr['classid'],$bqr['id'],'| ',10);
?>
<a href="" target="_blank"></a>
TAG: <?=$thistagstr?>
[/e:loop]
调用多个TAG
1、调用最新10个tag
<?
$tsql=$empire->query("select * from {$dbtbpre}enewstags order by tagid desc limit 10");
while($tr=$empire->fetch($tsql)){
$tagurl=dp_itagLink($tr['tagid']);
?>
<li><a href=""><?=$tr['tagname']?></a>(<?=$tr['num']?>)</li>
<?}?>
2、按分类调用TAG
<?
$tcsql=$empire->query("select * from {$dbtbpre}enewstagsclass where classid>0 order by classid desc");
while($tcr=$empire->fetch($tcsql)){
$tagclassurl=dp_itagClassLink($tcr['classid']);
?>
<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=dp_itagLink($tr['tagid']);
?>
<li><a href="<?=$tagurl?>"><?=$tr['tagname']?></a>(<?=$tr['num']?>)</li>
<?
}
?>
</ul>
</div>
<?
}
?>
3、按照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">
<?
foreach($zm_r as $zm){
?>
<h3><a name="<?=$zm?>"><?=strtoupper($zm)?></a></h3>
<ul>
<?
$zsql=$empire->query("select tagid from {$dbtbpre}dp_itag 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=dp_itagLink($zr[tagid]);
?>
<li><a href="<?=$tagurl?>"><?=$t['tagname']?></a></li>
<?
}
?>
</ul>
<?
}
?>
</div>
4、在栏目页模板,根据tag分类绑定的栏目,调用此栏目下的TAG
<?php
$bdsql=$empire->query("select * from {$dbtbpre}dp_itag_class where modid='$navclassid'");
while($bdr=$empire->fetch($bdsql)){
$cid=$bdr['classid'];
$tcsql=$empire->query("select * from {$dbtbpre}enewstagsclass where classid='$cid' order by classid desc");
while($tcr=$empire->fetch($tcsql)){
$tagclassurl=dp_itagClassLink($tcr['classid']);
?>
<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=dp_itagLink($tr['tagid']);
?>
<li><a href="<?=$tagurl?>"><?=$tr['tagname']?></a>(<?=$tr['num']?>)</li>
<?
}
?>
</ul>
</div>
<?
}
}
?>