“ECMS技巧”

1、灵动标签调用栏目,可定义当前栏目的class样式:

[e:loop={"select classid,classname from {$dbtbpre}enewsclass where bclassid=5 and classid<>25 order by myorder,classid asc",0,24,0}]<?php
$classurl=sys_ReturnBqClassname($bqr,9);
$classname="";
if($bqr[classid]==$GLOBALS[navclassid])
{
$classname="tzzs_active";
} 
?><li class="<?=$classname?>"><a href="<?=$classurl?>"><?=$bqr[classname]?></a></li>[/e:loop]

其中“classid<>25”为排除指定栏目
增加代码可不调用隐藏设置的栏目:and showclass=0 //0为显示,1为不显示
若在列表模板里,需要判断当前栏目的父栏目id,直接使用bclassid=[!--bclass.id--]是无效的。
需要在页面顶部先获取父栏目的id数字才有效,代码如下:

<?php
    $a=$GLOBALS[navclassid];
    $b= $class_r[$a]['bclassid'];
?>

同时,灵动标签内bclassid=$b来实现父栏目id的调用,该方法同时适用内容模板页面。

2、复选项输出值的调用

(讨论http://bbs.phome.net/ShowThread/?threadid=360510&forumid=42

<?php
$shyashuasx=$navinfor[yashuasx];
$shyashuasx=rtrim($shyashuasx, "|");
$shyashuasx=ltrim($shyashuasx, "|");
$shyasarry = explode('|',$shyashuasx); 
for($index=0;$index<count($shyasarry);$index++) 
{ 
?>
  <div class="fl feature">
    <img src="[!--news.url--]skin/images/i/<?=$shyasarry[$index]?>.png" alt="<?=$shyasarry[$index]?>">
    <br>
    <?=$shyasarry[$index]?>
  </div>
<?php
} 
?> 

3、列表内容模板,需要判断是否登录调用不同的内容

(讨论http://bbs.phome.net/ShowThread/?threadid=360336&forumid=42
页面模板内容部分:

<?php
include("e/class/connect.php");  
$lguserid=intval(getcvar('mluserid'));//登陆用户ID
$lgusername=RepPostVar(getcvar('mlusername'));//登陆用户
$lggroupid=intval(getcvar('mlgroupid'));//会员组ID

if($lggroupid){
?>
    <div class="zinfo">“[!--class.name--]”共<em>[totaldata]$GLOBALS[navclassid],0,0[/totaldata]</em>条信息。欢迎<em><?php echo $lgusername;?></em>,用完记得<a href="/e/member/doaction.php?enews=exit">[退出]</a></div>
<?php
}else{
?>
    <div class="zinfo">“[!--class.name--]”共<em>[totaldata]$GLOBALS[navclassid],0,0[/totaldata]</em>条信息。列表仅显示条数,请<a href="/e/member/login/" target="_blank">登录</a>刷新页面后,查看详细信息。</div>
<?php
}
?>

列表内容模板部分(使用程序代码)

include("e/class/connect.php");  
$lguserid=intval(getcvar('mluserid'));//登陆用户ID
$lgusername=RepPostVar(getcvar('mlusername'));//登陆用户
$lggroupid=intval(getcvar('mlgroupid'));//会员组ID

if($lggroupid){
$listtemp='<li><a href="[!--titleurl--]"><img src="[!--titlepic--]" alt="[!--oldtitle--]" /><span>[!--title--]<span></a></li>';
}else{
$listtemp='<li><img src="/skin/images/p.png" alt="代用名" /><span>[<a href="/e/member/login/" target="_blank">登录后显示</a>]</span></li>';
}

4、结合项的信息数据统计

(讨论http://bbs.phome.net/showthread-42-360251-0.html
模板变量:

<?php 
$my_string=$class_r[$GLOBALS[navclassid]]['sonclass'];
$my_string=ltrim(rtrim($my_string, "|"), "|"); 
$my_string=str_replace("|",",",$my_string);
?>
<li class="t1">团员,共<em><?php $num=$empire->gettotal("select count(*) as total from phome_ecms_news where classid in($my_string) and shuxing='团员'");echo $num;?></em>人;</li>

5、灵动标签统计后台用户发布信息数量(同时排除不需要参与统计的用户)

[e:loop={"select id,username,count(*) as total from phome_ecms_news WHERE username<>'aijun' and username<>'admin' GROUP BY username ORDER BY total DESC LIMIT 0,10",0,24,0}]
<li><span><?=$bqr[total]?></span> <em><?=$bqno?></em> <?=$bqr[username]?></li>
[/e:loop]

6、标签模板使用程序代码,将时间分开调用(YY-MM-DD)

$y_time=date('Y',$r[newstime]);
$m_time=date('m',$r[newstime]);
$d_time=date('d',$r[newstime]);
$listtemp='<li><div class="ny_time"><em>'.$m_time.'-'.$d_time.'</em><br />'.$y_time.'</div></li>';

7、ECMS6.0版以后的验证码地址有所变化

评论验证码:/e/ShowKey/?v=pl
登陆验证码:/e/ShowKey/?v=login
注册验证码:/e/ShowKey/?v=reg
投稿验证码:/e/ShowKey/?v=info
留言板验证码:/e/ShowKey/?v=gbook
信息反馈验证码:/e/ShowKey/?v=feedback
取回密码验证码:/e/ShowKey/?v=getpassword
会员空间反馈验证码:/e/ShowKey/?v=spacefb
会员空间留言验证码:/e/ShowKey/?v=spacegb
验证码调用(可点击刷新):
<img src='/e/ShowKey/?v=feedback' onclick='this.src="/e/ShowKey/?v=feedback&"+Math.random();' style='cursor:pointer;height:37px;'>
后台登录,点击显示验证码:
<div id="checkkeyshowkey"><a href="#EmpireCMS" onclick="edoshowkey('checkkeyshowkey','checkkey');" title="点击显示验证码">点击显示</a></div>

8、[!--pagedes--]在内容页调用默认调用标题的无损解法:

通常大家可能会去修改functions.php,对以后升级会存在影响,为了SEO想了一个折中简单的办法。
<meta name="description" content="<?=$navinfor[id]?$navinfor[smalltext].'---':''?>[!--pagedes--]" />

9、其他一些零散细节代码

⑴ 获取栏目网址:
$classurl=sys_ReturnBqClassname($bqr,9);//取得栏目地址
⑵ 判断是否首页(用于高亮):
<?=(!$GLOBALS[navclassid])?' class="cur"':''?>
⑶ 判断是否当前页(高亮):
<?=($GLOBALS[navclassid]==$bqr[classid])?' class="cur"':''?>
⑷ 按照指定排序调用SQL语句片段(配合条件调用):
order by field(classid,10,3,4,41,40)
⑸ 栏目导航中判断某栏目是否为终极栏目:
if ($bqr[sonclass]=='' or $bqr[sonclass]=="|")

10、在PHP7.4上安装/运行的注意事项

⑴ 文件:e/config/config.php
$ecms_config['db']['usedb']='mysql';
改为
$ecms_config['db']['usedb']='mysqli';

⑵ 文件:e/class/connect.php
define('MAGIC_QUOTES_GPC',function_exists('get_magic_quotes_gpc')&&get_magic_quotes_gpc());
改为:
define('MAGIC_QUOTES_GPC',(ini_get('magic_quotes_gpc') == 1) ? true : false);

说明:get_magic_quotes_gpc()在php5.4版之后已废除了

11、帝国CMS调用栏目别名的两种方法

第一种:在最终栏目调用

<?=$class_r[$GLOBALS[navclassid]][bname]?>

第二种:万能的,哪里都行,应为是直接查询数据库输出的!

<?php 
$cr=$empire->fetch1("select bname from phome_enewsclass where 
classid='".$GLOBALS[navclassid]."' limit 1"); 
echo $cr['bname']; 
?>

12、判断当前页面为首页,是否首页高亮显示

<?php if(empty($GLOBALS[navclassid])){echo ' class="active"';}?>
说明:此判断会匹配首页,TAG页面和自定义页面,所以不想TAG页面和自定义页面也高亮,可以在TAG页面和自定义页面定义一个$GLOBALS[navclassid]。

逐步收集整理中...