标准插件程序调用原理详解
网畅,智能网站应用系统专业开发商!2009-01-17 16:00:53 作者:SystemMaster 来源: 文字大小: [] [] []
  插件程序是用来对模版中的插件进行解释并输出内容的程序。插件程序存放在module目录,文件名和插件对应。比如对应的插件程序就是NewsList.php。

  每一个插件程序都是一个函数(少数可能是多个嵌套函数),函数名称和文件名称相同。下面以NewsList.php为例,描述插件程序的编写方法:

1、默认参数定义

CODE:
[Copy to clipboard]
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、根据以上参数设置,生成数据库查询条件

CODE:
[Copy to clipboard]
                $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、将模版读入数组

CODE:
[Copy to clipboard]
$Temp=LoadTemp(ROOTPATH."templates/".$MenuInfo["skin"]."/".$tempname);
$TempArr=SplitTblTemp($Temp);
4、取出数据并输出

CODE:
[Copy to clipboard]
                $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就可以了。
  • 评论标题
  • 评论内容
  • 图片上传
  • 表情图标
  • 验 证 码