插件程序是用来对模版中的插件进行解释并输出内容的程序。插件程序存放在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就可以了。 |