插件程序是用来对模版中的插件进行解释并输出内容的程序。插件程序存放在module目录,文件名和插件对应。比如对应的插件程序就是NewsList.php。
每一个插件程序都是一个函数(少数可能是多个嵌套函数),函数名称和文件名称相同。下面以NewsList.php为例,描述插件程序的编写方法:
1、默认参数定义
function NewsList(){
//定义函数内需要的全局变量
global $fsql,$charset,$tbl_news_con,$CatchOpen;
global $strMore,$NowMenuid,$MenuInfo;
//取出modNewsList的后台插件设置输出数组$PSET
$PSET=PlusSet("modNewsList");
//判断后台是否设置了插件参数,如果设置了就使用设置的参数,没有设置就使用默认值
//内容来源栏目的范围,如果后台未指定来源栏目,则调用默认栏目来源。当插件位于news栏目下时,默认显示当前栏目的内容,否则默认显示全部内容
$showmenuid=PlusDef($PSET["showmenuid"],MenuDef("news",$NowMenuid));
$shownums=PlusDef($PSET["shownums"],"5"); //显示条数,默认5条
$ord=PlusDef($PSET["ord"],"id");//排序参数,默认按id排序
$sc=PlusDef($PSET["sc"],"desc"); //排序方式,默认倒排
$showtime=PlusDef($PSET["showtime"],"n/j");//时间格式
$cutword=PlusDef($PSET["cutword"],"0");//截取文字
$target=PlusDef($PSET["target"],"_self");//目标窗口
$onlytj=PlusDef($PSET["onlytj"],"0");//是否只显示推荐内容
$catid=PlusDef($PSET["catid"],"0");//显示类别范围
$more=PlusDef($PSET["showmore"],$strMore);//显示更多的格式,默认为语言包中定义的$strMore值
$tempname=PlusDef($PSET["tempname"],"tpl_list.htm");//调用模版,默认tpl_list.htm
2、根据以上参数设置,生成数据库查询条件
$scl=" iffb='1' ";
if($showmenuid!="0" && $showmenuid!=""){
$scl.=" and menuid='$showmenuid' ";
$fold=MenuFold($showmenuid);
$morelink=ROOTPATH.$fold."/class/?".$catid.".html";
}else{
$morelink=ROOTPATH."";
}
if($catid!=0 && $catid!=""){
$catid=fmpath($catid);
$scl.=" and catpath regexp '$catid' ";
}
if($onlytj=="1"){
$scl.=" and tj='1' ";
}
3、将模版读入数组
$Temp=LoadTemp(ROOTPATH."templates/".$MenuInfo["skin"]."/".$tempname);
$TempArr=SplitTblTemp($Temp);
4、取出数据并输出
$str=$TempArr["start"]; //读入模版开始部分,即<!-start-><!-start->之间的内容
$kk=0;
$havepic=0;
$fsql->query("select * from $tbl_news_con where $scl order by $ord $sc limit 0,$shownums");
while($fsql->next_record()){
$id=$fsql->f('id');
$title=$fsql->f('title');
$menuid=$fsql->f('menuid');
$catpath=$fsql->f('catpath');
$dtime=$fsql->f('dtime');
$nowcatid=$fsql->f('catid');
$ifnew=$fsql->f('ifnew');
$ifred=$fsql->f('ifred');
$author=$fsql->f('author');
$source=$fsql->f('source');
$cl=$fsql->f('cl');
$src=$fsql->f('src');
$type=$fsql->f('type');
$fold=MenuFold($menuid);
if($CatchOpen=="1"){
$link=ROOTPATH.$fold."/html/".$id.".html";
}else{
$link=ROOTPATH.$fold."/html/?".$id.".html";
}
$dtime=date($showtime,$dtime);
if($ifbold=="1"){$bold=" style='font-weight:bold' ";}else{$bold="";}
if($ifred=="1"){$red=" style='color:#ff0000' ";}else{$red="";}
if($cutword!="0"){$title=csubstr($title,0,$cutword,$charset);}
$var=array (
'title' => $title,
'dtime' => $dtime,
'red' => $red,
'author' => $author,
'source' => $source,
'cl' => $cl,
'link' => $link,
'target' => $target,
'bold' => $bold
);
$str.=ShowTplTemp($TempArr["list"],$var);//循环替换<!-list->和<!-list->之间的标签
$kk++;
}
$str.=$TempArr["end"]; // 读入模版结束部分,即<!-end-><!-end->之间的内容
$morestr=str_replace("",$more,$TempArr["more"]);
$morestr=str_replace("",$morelink,$morestr);
$str.=$morestr;
return $str;
一个标准插件制作完成后,需要在_plus_set数据表中增加一条记录,注册这个插件,使后台可以选用和设置插件参数。
当然,如果是为某个网站专门制作的个性化插件,可以不必那么复杂。因为所有的参数都可以是固定的。只要在函数中将所需结果输出后赋值给$str ,最终return $str就可以了。