帝国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)