帝国cms MoreTags插件 帮助文档
MoreTags功能简介
在帝国cms默认情况下,一篇文章只有一个默认的tag字段,但在很多情况下,需要多个tag字段进行分类和关联。比如一部电视剧,按照演员需要tag字段,按照作品类型还需要一个tag字段。为了解决这个问题,东坡网开发了MoreTags插件。
MoreTags插件主要功能
1、允许一个信息有多个TAG字段
2、TAG信息保存于一般的信息表,因此,TAG同时具有一般信息的各种属性
MoreTags 与 Sinfo 插件的对比
功能 | MoreTags | Sinfo |
动态、静态都支持 | 是 | 是 |
无限层级关联信息 | 是 | 是 |
按模型聚合信息 | 是 | 是 |
父信息列表页静态生成 | 否 | 是 |
按模型聚合静态生成 | 否 | 是 |
按子类聚合信息 | 否 | 是 |
一条信息允许多个聚合字段 | 是 | 否 |
上手难易程度 | 一般 | 非常难 |
安装方法
第一步:文件上传及菜单安装
1、将插件压缩包解压,得到 e文件夹,将 e文件夹 上传到 网站根目录
2、在浏览器执行 ,安装插件菜单
3、如果是linux系统,请将 e/dongpo/moretags/config.php 文件设置为 0777 权限
注意:(1)插件必须位于e/dongpo/目录下,不能修改为别的名字(2)如果使用ftp软件上传,请用二进制方式
第二步:新建moretags数据表
一、新建moretags数据表
- 数据表名:moretags
- 数据表标识:moretags(可自由填写)
二、为moretags数据表增加特殊字段tmd5
项目 | 取值 |
字段名 | tmd5 |
字段标识 | tmd5 |
字段类型 | CHAR |
字段长度 | 32 |
存放表 | 主表 |
加索引 | 是 |
后台增加信息处理函数 | Moretags_TitleMd5 |
后台修改信息处理函数 | Moretags_TitleMd5 |
显示顺序 | 999 |
其它 | 默认即可 |
三、新建moretags表的系统模型
(1)系统模型的规则与帝国cms一样,无特殊
(2)tmd5字段在系统模型设置为:录入项、可增加、可修改、列表模板、内容模板
注意:
moretags表中title 为必须字段,其它字段可以按照帝国cms一般的方法增减
第三步:修改系统文件
一、修改 e/class/connect.php 文件
1、搜索 ,在其上一行插入代码,插入后如下:
require_once ECMS_PATH.'e/dongpo/moretags/dp_funs.php';
//--------------- 数据库 ---------------
二、修改 e/class/hinfofun.php 文件
1、搜索,在其上一行插入代码:
Moretags_Insert($add['classid'],$id,$newstime,$add['checked']);
2、搜索,在其上一行插入代码:
Moretags_Insert($add['classid'],$add['id'],$newstime,$newchecked);
3、搜索(共有 3 处,都需要修改),在其上一行插入代码:
Moretags_Clear($r);
三、修改 moretags数据表模型的信息列表 文件
moretags表默认模型信息列表文件位置是e/data/html/list/listinfo.php,如果有自定义模型文件,也按照下列方法修改。
搜索 ,在其后紧跟着插入代码:
<?=MoreTags_ShowInfos($r['classid'],$r['id'])?>
注意:
修改文件时不用使用记事本,否则可能会改变文档编码,产生未知错误。
插件的使用
几个基本概念
为了用户更好理解和使用MoreTags插件,有几个概念需要详细说明一下。
一、父信息和子信息
- 信息:在帝国cms的栏目里,发布的一条记录,就叫做一条信息。
- 父信息:包含其他信息的信息。
- 子信息:被其它信息包含的信息。
例如:
一个帝国cms栏目里四条信息:学校、班级、学生A、学生B,存在以下关系:
(1)学校 是班级的父信息,班级 是学生A和学生B的父信息
(2)班级 是学校的子信息,学生A和学生B是班级的子信息
(3)班级 担当了父信息的角色,同时也担当子信息角色
二、关联
- 关联:将一条信息推送给另一条信息,使之产生父子关系的过程。
- 关联字段:在子信息数据表中,用于关联父信息的字段。
- 关联数据表:记录信息父子关系的数据表。
三、关联数据表
(1)关联数据表名
数据表前缀moretags_子信息所在数据表名_关联字段名
(2)关联数据表结构
字段 | 类型 | 说明 |
tid | int(10) | 自增字段 |
tagid | int(10) | 父信息id |
classid | smallint(5) | 子信息栏目id |
id | int(10) | 子信息id |
newstime | int(10) | 子信息索引时间,用于排序 |
mid | smallint(5) | 子信息模型id |
为数据表添加关联字段
关联字段,是子信息所在的数据表中建立的一个特殊字段,用于与父信息关联。关联字段的名称不固定,可以自行确定。
添加关联字段有两个步骤,不仅要在系统数据表中添加字段,还要在插件设置中添加相应的记录。
步骤一、在子信息所在数据表中建立关联字段,并修改系统模型
项目 | 取值 | 补充说明 |
字段名: | xxxxx | |
字段标识: | XXXXX | |
字段类型: | VARCHAR | 长度:255 |
存放表: | 主表 | |
输入表单替换html代码: | ||
<input name="xxxxx" type="text" value="<?=$ecmsfirstpost==1?ehtmlspecialchars(stripSlashes($_GET[xxxxx])):ehtmlspecialchars(stripSlashes($r[xxxxx]))?>" size="60"> <input name="oldxxxxx" type="hidden" value="<?=$ecmsfirstpost==1?"":ehtmlspecialchars(stripSlashes($r[xxxxx]))?>"> |
||
其它选项默认即可 |
注意:
(1)输入表单替换html代码在新建字段时无法设置的,只有在修改字段时才能更改。
(2)上述html代码,其中的xxxxx是刚加的字段名,必须用这个字段名替换掉。
新增并修改好这个字段后,还要修改对应的数据模型,使整个字段为:录入项、可增加、可修改、列表模板、内容模板。
步骤二、在插件设置中添加关联字段记录
完成上述步骤一后,还须在插件设置中添加关联字段记录,才能使用关联字段功能。添加记录方法如下:
在帝国cms后台,打开网页:插件 》 MoreTags插件 》 设置 》 增加字段,按照以下说明,将步骤一中的字段记录在插件设置中。
项目 | 说明 |
字段名 | 就是在上述步骤一中增加的关联字段名 |
所属数据表 | 上述字段所在的数据表名 |
父信息默认栏目 | 父信息如果不存在,将新建一个父信息,此父信息默认的栏目 |
父信息页列表式显示方法
因为父信息是也帝国cms的内容页,所以不能按照分页列表的方式显示子信息。如果子信息很多,且需要分页显示,可以按照以下方法,用动态页的方式实现此功能。
一条父信息,根据子信息所在数据表不同、关联字段不同,可以有不同的分页链接。
第一步:选定一个列表模板
因为链接的参数中必须用到列表模板ID,因此必须先确定好列表模板ID.
第二步:确定好伪静态链接格式,并在模板中使用
例如:想用这个做tag,父信息位于栏目id是19的栏目,栏目目录是tags,那么伪静态链接确定为:
不带分页的链接格式:
/tags/[!--id--]/
带分页的链接格式:
/tags/[!--id--]/[!--page--].html
此功能要求必须确定好这两种链接格式。然后,在刚选定的模板顶部插入php代码:
<?
$url='/tags/[!--id--].html';
$url_page='/tags/[!--id--]-[!--page--].html';
?>
接着在模版正文合适的位置插入代码来调用分页条,如下代码所示:
<div class="epages"><?=MoreTags_FanYe($url,$url_page)?></div>
第三步:确定好动态链接
分页式父信息的动态链接的格式如下:
网址/e/dongpo/moretags/liebiao.php?classid=栏目ID&id=信息ID&ztbname=子信息所在数据表&zf=子信息表中用于关联父信息的字段&listtempid=列表模板ID&page=分页号&lenth=每页显示信息数
lenth 表示每页显示信息数,可以不设置,默认20条
page 表示分页号,首页时可以不设置
第四步:设置服务器伪静态规则
伪静态规则也必须是2条,一条是无分页的链接格式,一条是有分页的链接格式
伪静态规则请自行书写,我这里举个 .htaccess 的例子:
RewriteRule ^tags/([0-9]+).html e/dongpo/moretags/liebiao.php?classid=19&id=$1&ztbname=article&zf=zhuanti&listtempid=3 [L]
RewriteRule ^tags/([0-9]+)/([0-9]+).html e/dongpo/moretags/liebiao.php?classid=19&id=$1&ztbname=article&zf=zhuanti&listtempid=3&page=$2 [L]
第五步:为分页的html添加一个css样式
参考样式如下:
/*翻页*/
.epages{margin:20px 0; text-align:center}
.epages a{border:1px solid #ccc; background:#fff; padding:3px 6px; text-decoration:none; color:#333; border-radius:4px; margin:0 4px 0 0;}
.epages a:hover,.epages a.current-page{background:#dfdfdf; border-color:#dfdfdf; font-weight:bold;}
.epages a.no-link:hover{background:#fff; border-color:#ccc; font-weight:normal;}
模板中的调用
子信息调用父信息
这里演示的调用代码,都是直接用php代码书写。这种调用方式更灵活,效率更高。
1、典型的应用例子
(1)小说网站中:章节页 调用 书籍信息
(2)剧情网站中:剧情页 调用 电视剧信息
(3)游戏网站中:攻略页 调用 游戏信息
(4)新闻网站中:内容页 调用 多个TAG
2、调用代码
(1)一般将此段代码放在模板顶部,在模板中间相应位置用 <?=$astr?> 显示父信息
(2)代码中 limit 100 表示最多调用100个,数字范围0~999999。在明确只有1个父信息时,写为1,可以提高效率。
(3)子信息id 和 子信息classid 在不同页面中取值方法不同,下面是在内容页中的取值方法。可以根据实际应用来修改。
<?php
//子信息id
$zi_id=$navinfor[id];
//子信息classid
$zi_classid=$navinfor[classid];
$astr='';
$sqlb=$empire->query("select tagid from {$dbtbpre}moretags_子信息所在数据表名_关联字段名 where classid='$zi_classid' and id='$zi_id' limit 100");
while($rb=$empire->fetch($sqlb)){
$rr=$empire->fetch1("select id,classid,title,titleurl from {$dbtbpre}ecms_moretags where id='$rb[tagid]' limit 1");
if($rr['id']){
$astr.='<a href="'.$rr['titleurl'].'" title="'.$rr['title'].'" target="_blank">'.$rr['title'].'</a> ';
}
}
?>
父信息调用子信息
这里演示的调用代码,都是直接用php代码书写。这种调用方式更灵活,效率更高。
1、典型的应用例子
(1)小说网站中:小说页 调用 章节
(2)剧情网站中:电视剧页 调用 剧情
(3)新闻网站中:tag 调用 子信息
2、调用代码
此段代码放在模板顶部,在模板中间相应位置用 <?=$bstr?> 显示多个父信息。下面代码中 100 表示最多调用100个,可以自行修改别的数字0~99999。
<?php
//父信息id
$fuid=$navinfor['id'];
$ccstr='';
$sqlcc=$empire->query("select id,classid from {$dbtbpre}moretags_子信息所在数据表名_关联字段名 where tagid='$fuid' order by newstime limit 99999");
while($ccr=$empire->fetch($sqlcc)){
$rr=$empire->fetch1("select id,title,titleurl from {$dbtbpre}ecms_".$class_r[$ccr['classid']]['tbname']." where id='$ccr[id]' limit 1");
if($rr['id']){
$ccstr.='<a href="'.$rr['titleurl'].'" title="'.$rr['title'].'">'.$rr['title'].'</a> ';
}
}
?>
子信息调用父信息的全部子信息
子信息调用父信息的全部子信息,就是将 子信息调用父信息 和 父信息调用子信息 代码结合起来。
<?php //子信息id $zi_id=$navinfor[id]; //子信息classid $zi_classid=$navinfor[classid]; $allstr=''; $sqlb=$empire->query("select tagid from {$dbtbpre}moretags_子信息所在数据表名_关联字段名 where classid='$zi_classid' and id='$zi_id' limit 100"); while($rb=$empire->fetch($sqlb)){ $rrb=$empire->fetch1("select id,classid,title,titleurl from {$dbtbpre}ecms_moretags where id='$rb[tagid]' limit 1"); if($rrb['id']){ //第一层循环 至此调用出来了父信息id //父信息id $fuid=$rrb['id']; $sqlcc=$empire->query("select id,classid from {$dbtbpre}moretags_子信息所在数据表名_关联字段名 where tagid='$fuid' order by newstime limit 99999"); while($ccr=$empire->fetch($sqlcc)){ //第二层循环 调用当前父信息下的其它子信息 $rr2=$empire->fetch1("select id,title,titleurl from {$dbtbpre}ecms_".$class_r[$ccr['classid']]['tbname']." where id='$ccr[id]' limit 1"); if($rr2['id']){ $allstr.='<a href="'.$rr2['titleurl'].'" title="'.$rr2['title'].'">'.$rr2['title'].'</a> '; } } } } echo $allstr; ?>
综合使用教程
用MoreTags插件仿7猫影视网
教程地址:https://www.bilibili.com/video/BV1mK4y1m7yy
评论(1)