本文是开发的帝国cms插件“多功能作者插件”帮助文档。
一、插件安装第五步详解
第五步是:修改文件 e\class\hinfofun.php ,修改 新增信息函数 和 修改信息函数。以下代码,蓝色部分是插件新增的。
(1)AddNews函数修改。
查找 function AddNews 找到此函数。修改后函数的第一行变成:
global $empire,$class_r,$class_zr,$bclassid,$public_r,$dbtbpre,$emod_r,$writer_r;
此函数的 //TAGS 判断语句附近代码变成:
//TAGS
if($add[infotags]&&$add[infotags]<>$add[oldinfotags])
{
eInsertTags($add[infotags],$add['classid'],$id,$newstime);
}
//作者文集
if($add[writers]&&$add[writers]<>$add[oldwriters])
{
include_once ECMS_PATH.'e/dongpo/writer/dp_funs.php';
hwriter_eInsert($add[writers],$add['classid'],$id,$newstime,$add['checked']);
}
//增加信息是否生成文件
if($ccr['addreinfo']&&$add['checked'])
{
GetHtml($add['classid'],$id,'',0);
}
(2)EditNews函数修改。
查找 function EditNews 找到此函数。修改后函数的第一行变成:
global $empire,$class_r,$class_zr,$bclassid,$public_r,$dbtbpre,$emod_r,$writer_r;
此函数的 //TAGS 判断语句附近代码变成:
//TAGS
if($add[infotags]&&$add[infotags]<>$add[oldinfotags])
{
eInsertTags($add[infotags],$add['classid'],$add['id'],$newstime);
}
//作者文集
if(($add[writers]&&$add[writers]<>$add[oldwriters])||$index_checkr['checked']!=$newchecked)
{
include_once ECMS_PATH.'e/dongpo/writer/dp_funs.php';
hwriter_eInsert($add[writers],$add['classid'],$add['id'],$newstime,$add['checked']);
}
//是否改变审核状态
if($index_checkr['checked']!=$newchecked)
二、插件设置示例
插件设置示例
三、伪静态说明
作者伪静态可用的标记:[!--writer--]、[!--page--]
作者首页伪静态可用的标记:[!--cid--]、[!--page--]
如上图设置,apache伪静态规则:
#文集首页
RewriteRule ^writer/(.*)/$ e/writer/writer.php?writer=$1
#信息列表
RewriteRule ^writer/(.*)_(.*)$ e/writer/writer.php?writer=$1&page=$2
#全部作者
RewriteRule ^writer/$ e/writer/index.php
#作者cid
RewriteRule ^writer-(.*)-(.*)/$ e/writer/index.php?cid=$1&page=$2
如上图设置,nginx伪静态规则:
rewrite ^([^\.]*)/writer/(.*)/$ $1/e/writer/writer.php?writer=$2 last;
rewrite ^([^\.]*)/writer/(.*)_(.*)$ $1/e/writer/writer.php?writer=$2&page=$3 last;
rewrite ^([^\.]*)/writer/$ $1/e/writer/index.php last;
rewrite ^([^\.]*)/writer-(.*)-(.*)/$ $1/e/writer/index.php?cid=$2&page=$3 last;
四、调用代码
将获取作者链接和作者分类链接的代码插入文件 e\class\userfun.php
function user_hWriterLink($wid,$dp=0){
global $writer_r;
include_once ECMS_PATH.'e/dongpo/writer/dp_funs.php';
if($dp==0){
$url=hwriter_WriterUrl($wid); //作者链接
}elseif($dp==1){
$url=hwriter_ClassUrl($wid); //作者分类链接,当$wid=0时是作者首页链接
}
return $url;
}
(1)当前信息的作者
将以下函数放入e/class/userfun.php 文件中
//作者链接
function user_ReturnWriterStr($id,$classid,$writers,$num=0){
global $dbtbpre,$empire,$public_r;
$writerstr='';
if($writers){
$tsql=$empire->query("select wid from {$dbtbpre}dp_writerdata where id=".$id." and classid=".$classid."");
while($tr=$empire->fetch($tsql)){
$tt=$empire->fetch1("select * from {$dbtbpre}dp_writer where wid=".$tr['wid']."");
if($tt['wid']){
if($num&&$tt['num']<$num){
$writerstr.=$tt['wname'];
}else{
$writerurl=user_hWriterLink($tt['wid']);
$writerstr.='<a href="'.$writerurl.'" title="'.$tt['wname'].'" class="c1" target="_blank">'.$tt['wname'].'</a>';
}
}
}
}
return $writerstr;
}
在本函数中,$num 参数表示:如果作者信息数小于此值时不显示出来,默认为0表示不限制。
在信息页中的调用方法:
<?=user_ReturnWriterStr($navinfor['id'],$navinfor['classid'],$navinfor['writers'],2)?>
在列表页中开启程序代码,调用方法:
$tagstr=user_ReturnWriterStr($r['id'],$r['classid'],$r['writers']);
在灵动标签中的调用方法:
[e:loop={灵动标签调用语句}]
<?
$thistagstr=user_ReturnWriterStr($bqr['id'],$bqr['classid'],$bqr['writers'],1);
echo $thistagstr;
?>
[/e:loop]
(2)按分类调用作者
<?
$tcsql=$empire->query("select * from {$dbtbpre}dp_writeclass where classid>0 order by classid desc");
while($tcr=$empire->fetch($tcsql)){
//作者分类链接
$wclassurl=user_hWriterLink($tcr['classid'],1);
?>
<!-- 显示分类名称 -->
<div class="showtag">
<h3><a href="<?=$wclassurl?>"><?=$tcr['classname']?></a></h3>
<ul>
<?
$tsql=$empire->query("select * from {$dbtbpre}dp_write where cid=".$tcr['classid']." order by wid desc limit 10");
while($tr=$empire->fetch($tsql)){
$wurl=user_hWriterLink($tr['wid']);
?>
<!-- 显示模板开始 -->
<li><a href="<?=$wurl?>"><?=$tr['wname']?></a>(<?=$tr['num']?>)</li>
<!-- 显示模板结束 -->
<?
}
?>
</ul>
</div>
<?
}
?>
在以上代码中,蓝色部分控制了显示作者的分类,可以自由修改。classid>0 表示已分类的作者,classid=3 表示分类id为3的作者
红色部分控制了每个分类下TAG显示的数量,数字部分可以自由修改。若限制显示数量,则可删除红色部分。
(3)常规的批量调用作者
<ul>
<?
$tsql=$empire->query("select * from {$dbtbpre}dp_write order by wid desc limit 10");
while($tr=$empire->fetch($tsql)){
$wurl=user_hWriterLink($tr['wid']);
?>
<!-- 显示模板开始 -->
<li><a href="<?=$wurl?>"><?=$tr['wname']?></a>(<?=$tr['num']?>)</li>
<!-- 显示模板结束 -->
<?
}
?>
</ul>
在以上代码中,绿色部分控制了作者显示排序,常用方式有三种:wid desc 最后加入作者在最前,wid 最先加入作者在最前,num desc 文集信息数最多在最前
五、其它说明
(1)作者文集页模板可以的标签
[!--pagetitle--]——作者名
[!--pagekey--]——作者别名
[!--pagedes--]——作者介绍
(2)作者列表模板可以的标签
[!--title--]——作者名
[!--oldtitle--]——作者别名
[!--titleurl--]——作者链接
[!--intro--]——作者介绍
[!--num--]——作者信息数
[!--isgood--]——作者推荐等级
(3)发布信息时,填写作者的方法同填写关键词,多个作者用英文逗号隔开
六、前台投稿也能使用插件的修改方法
先确认writers字段的投稿表单html代码是不是正确:
<input name="writers" type="text" id="writers" value="<?=$ecmsfirstpost==1?"":ehtmlspecialchars(stripSlashes($r[writers]))?>" size="20">
<input name="oldwriters" type="hidden" id="oldwriters" value="<?=ehtmlspecialchars(stripSlashes($r[writers]))?>">
修改文件 e\class\qinfofun.php ,在761行左右找到 DodoInfo 函数,在函数的第一行加入全局变量 $writer_r ,修改后这个函数的第一行变成
global $empire,$public_r,$emod_r,$level_r,$class_r,$dbtbpre,$fun_r,$writer_r;
在 932 行左右找到 esetcookie("qeditinfo","",0); 在其下一行插入代码:
//作者文集
if($add[writers]&&$add[writers]<>$add[oldwriters])
{
include_once ECMS_PATH.'e/dongpo/writer/dp_funs.php';
hwriter_eInsert($add[writers],$classid,$id,$newstime,$checked);
}
提醒:esetcookie("qeditinfo","",0); 在这个文件中有两处,这里是第一处。
另外,如果设置了会员投稿需审核,则该信息通过审核后还必须在插件处执行“信息清查”,才能让改信息在插件中正常显示。