帝国cms二次开发常见问题

1、如果开启了“关闭前台所有动态页面”选项,二次开发的文件如何能访问?
答:可以在开发的程序代码顶部一行加:define(‘EmpireCMSAdmin’,’1′);
就可以不受此设置影响。

2、LoadLang()导入语言包文件路径是如何表示的
答:导入语言包文件地址是相对于 ../data/language/ 目录,例子:
(1)、如果程序文件在/e/extend/目录,比如:/e/extend/a.php,则导入语言包可以用:
require LoadLang(‘pub/fun.php’);
(2)、如果程序文件在/e/extend/helloworld/目录,比如:/e/extend/helloworld/a.php,则导入语言包可以用:
require ‘../’.LoadLang(‘pub/fun.php’);
(3)、如果程序文件在根目录,比如:/a.php,则导入语言包可以用:
require ECMS_PATH.’e/data/’.LoadLang(‘pub/fun.php’);

3、$editor声明目录层次变量是如何表示的:
答:此变量如果没有使用printerror()等函数可以不设置。
默认$editor变量为0。
当程序文件在/e/path/目录,$editor不用设置,也就是用默认0。
当程序文件在/e/path/path2/目录,$editor=1。
当程序文件在/e/path/path2/path3/目录,$editor=2。
当程序文件在/e/path/path2/path3/path4/目录,$editor=3。

4、导入文件介绍:
导入栏目、专题、标题分类缓存文件:/e/data/dbcache/class.php
导入会员组缓存文件:/e/data/dbcache/MemberLevel.php
导入标签函数文件:/e/class/t_functions.php
导入编译标签文件:/e/class/functions.php

5、推荐变量过滤处理
(1)、数字型变量可以用(int)或intval函数处理,例子:
$page=(int)$_GET[‘page’];

$page=intval($_GET[‘page’]);
(2)、带小数点的数字型变量可以用(float)或floatval函数处理,例子:
$money=(float)$money;

$money=floatval($money);
(3)、字符型处理:
不带空格或其他特殊符号的,用
RepPostVar()函数过滤
带空格或其他特殊符号的用:
RepPostVar2()函数过滤

写入数据库的用:
RepPostStr()函数过滤

帝国CMS英文tags空格显示方法

打开 envalve\e\class\connect.php

在371行
//参数处理函数
function RepPostVar($val){
if($val!=addslashes($val))
{
exit();
}
CkPostStrChar($val);
$val=str_replace(” “,””,$val);
$val=str_replace(“%20″,””,$val);
$val=str_replace(“%27″,””,$val);
$val=str_replace(“*”,””,$val);

将 $val=str_replace(” “,””,$val); 更换为 $val=str_replace(“”,””,$val);

字段内容合并SQL语句 – 帝国CMS

update phome_ecms_表 set 字段=concat(字段1,字段2,字段3,字段4)  where classid in(栏目ID)

如要在字段之间加字符,则写成

update phome_ecms_表 set 字段=concat(字段1,”字符”,字段2,”字符”,字段3,”字符”,字段4) where classid in(栏目ID)

用灵动标签判断当前栏目ID实现栏目高亮 – 帝国CMS

一、取得栏目ID并添加class
文件e/class/userfun.php添加下面段语句

function currentPage($classid,$thisid){
global $class_r;
$fr=explode(‘|’,$class_r[$classid][featherclass]);
$topbclassid=$fr[1]?$fr[1]:$classid;//取得第一级栏目id
if ($topbclassid==$thisid) {
echo “class=’自定'”;
}
else {
}
}

二、用灵动标签调用

[e:loop={‘select classid,classname,classpath from [!db.pre!]enewsclass where bclassid=0 and showclass=0 order by myorder’,0,24,0}]
<li<?=currentPage($GLOBALS[navclassid],$bqr[classid])?>><a href=”<?=$public_r[newsurl]?><?=$bqr[classpath]?>/” title=”<?=$bqr[classname]?>”><?=$bqr[classname]?></a></li>
[/e:loop]

内容页文件命名形式以变量命名 – 帝国CMS

对已采集好或已手工好内容页的,文件名以变量命名形式可执行以下SQL语句:

update 表名 set filename=字段名 where classid in(栏目ID)

多个栏目用“,”隔开。案例:http://www.ninwo.org/Quote/sz_Stocks/

附:某字段批量添加内容

update `表名` set `字段`=CONCAT(字段,’内容’)

给反馈表单后台管理加上审核功能 – 帝国CMS

一、后台系统设置->执行SQL 如下:

#——————————————————————————
ALTER TABLE [!db.pre!]enewsfeedback ADD checked INT( 1 ) NOT NULL DEFAULT ‘0’
#——————————————————————————

二、e/class/userfun.php 加入如下代码:

#——————————————————————————
//审核反馈信息
function CheckFeedback($id,$bid,$userid,$username,$doing){
global $empire,$dbtbpre;
$id=(int)$id;
$bid=(int)$bid;
if(!$id)
{
printerror(“NotChangeFeedbackid”,”history.go(-1)”);
}
//验证权限
//CheckLevel($userid,$username,$classid,”feedback”);
$r=$empire->fetch1(“select id,title,filepath,filename from {$dbtbpre}enewsfeedback where id=’$id’;”);
if(!$r[‘id’])
{
printerror(“NotChangeFeedbackid”,”history.go(-1)”);
}
$sql=$empire->query(“update {$dbtbpre}enewsfeedback set checked=’$doing’ where id=’$id’;”);
if($sql)
{
//操作日志
insert_dolog(“id=”.$id.”<br>title=$r[title]”);
printerror2(‘操作成功’,”,0,0);
}
else
{printerror(“DbError”,”history.go(-1)”);}
}
#——————————————————————————

三、修改文件e/admin/tool/feedback.php

1、加入代码:require(“../../class/userfun.php”);

2、加入代码:

elseif($enews==”CheckFeedback”)
{
$id=$_GET[‘id’];
$bid=$_GET[‘bid’];
CheckFeedback($id,$bid,$logininid,$loginin,1);
}
elseif($enews==”UnCheckFeedback”)
{
$id=$_GET[‘id’];
$bid=$_GET[‘bid’];
CheckFeedback($id,$bid,$logininid,$loginin,0);
}

3、找到$query=”select id,bid,title,saytime,userid,username from {$dbtbpre}enewsfeedback”;这行代码,并插入字段“checked即完整代码是$query=”select id,bid,title,saytime,userid,username from {$dbtbpre}enewsfeedback”;

4、加入代码:

if($r[checked]){
$check='[<a href=”feedback.php?enews=UnCheckFeedback&id=’.$r[id].’&bid=’.$r[bid].'”>消审</a>]’;
}
else{
$check='[<a href=”feedback.php?enews=CheckFeedback&id=’.$r[id].’&bid=’.$r[bid].'”>审核</a>]’;
}

5、把代码“<?=$check?>”放到适合的位置,

四、调用反馈信息时SQL加一个 “and checked=1”,OK了!。

附注:可参考附件feedback.rar

给反馈表单后台管理加上全选按钮-帝国CMS

给反馈表单后台管理加上全选按钮,找到e/admin/tool/feedback.php加入以下代码:
1、JS部份代码

<script>
function CheckAll(form)
{
for (var i=0;i<form.elements.length;i++)
{
var e = form.elements[i];
if (e.name != ‘chkall’)
e.checked = form.chkall.checked;
}
}
</script>

2、按钮代码

<input type=checkbox name=chkall value=on onClick=CheckAll(this.form)>