站长百科 | 数字化技能提升教程 数字化时代生存宝典
首页
数字化百科
电子书
建站程序
开发
服务器
办公软件
开发教程
服务器教程
软件使用教程
运营教程
热门电子书
WordPress教程
宝塔面板教程
CSS教程
Shopify教程
导航
程序频道
推广频道
网赚频道
人物频道
网站程序
网页制作
云计算
服务器
CMS
论坛
网店
虚拟主机
cPanel
网址导航
WIKI使用导航
WIKI首页
最新资讯
网站程序
站长人物
页面分类
使用帮助
编辑测试
创建条目
网站地图
站长百科导航
站长百科
主机侦探
IDCtalk云说
跨境电商导航
WordPress啦
站长专题
网站推广
网站程序
网站赚钱
虚拟主机
cPanel
网址导航专题
云计算
微博营销
虚拟主机管理系统
开放平台
WIKI程序与应用
美国十大主机
编辑“
PHPWEB 插件制作说明
”
人物百科
|
营销百科
|
网赚百科
|
站长工具
|
网站程序
|
域名主机
|
互联网公司
|
分类索引
跳转至:
导航
、
搜索
警告:
您没有登录。如果您做出任意编辑,您的IP地址将会公开可见。如果您
登录
或
创建
一个账户,您的编辑将归属于您的用户名,且将享受其他好处。
反垃圾检查。
不要
加入这个!
<span style="text-align:center; border:1px solid #000; float:right; padding:6px;"><strong>导航:</strong> [[PHPWEB |上一页]]</span> <div style="clear:both;"></div> ==插件的程序文件和数据表== [[PHPWEB]]采用模块化结构,每个模块的前后台程序、模板都放在单独得模块目录下,例如:文章模块的目录是news,该目录下包含了文章管理后台(admin)、[[插件]]目录(module)、模板目录 (templates)等,各模块目录名的介绍请参考[[PHPWEB 软件文件系统结构说明]],本文主要介绍插件开发相关的程序结构。 每个插件由一个插件程序、一个默认模板、一条插件参数数据记录等三个元素构成。以“文章列表”插件为例,说明插件的文件和数据结构。“文章列表”插件程序是存放在news/module/目录中NewsList.php;插件的默认模板是news/templates/目录中的 tpl_newslist.htm;插件记录存放在数据表“_base_plusdefault”中,每个插件一条记录,记录了该插件的参数,其中 pluslable字段的值就是该插件的[[标签]]名,文章列表的pluslable是modNewsList。其中的规则是,pluslable标签名去掉前面的“mod”,就是插件的程序文件名,程序依据此规则找到插件程序并运行。 另外: *_base_plus数据表记录了每个页面上插入了那些插件、插件的位置、显示参数等信息 *_base_plustemp数据表记录了插件的扩展模板 ==插件记录表_base_plusdefault结构说明== 每个插件在 _base_plusdefault数据表中有一条记录,该记录决定了插件允许插入在哪些页面、有哪些参数可以设置、默认的设置参数是什么等信息。插件参数设置是和插件程序相配合的,设置了哪些可选项目,就要在程序中进行判断并正确体现出来。各字段说明如下: *id 自增量ID,新增插件记录时自动产生,无需特别指定 *coltype 插件的来源模块代码(如:news),根据此值寻找插件程序和模板文件的位置 *pluslable 唯一的插件标签名,不可重名,和插件程序文件名称对应,如modNewsList *plusname 插件的中文名,考虑到排版时在插件管理面板显示完整,一般不要超过16个字符 *plustype 允许在哪些模块使用该插件,all表示该插件可以在全站所有模块使用 *pluslocat 允许在哪些页面使用该插件,all表示全部页面;和plustype配合用以规定插件的可用范围 *tempname 插件的默认模板文件名(扩展模板则记录在_base_plustemp表中) *tempcolor 插件的默认颜色方案编号。除了导航菜单可选配色方案,其他插件均填-1,即不可选配色方案;程序支持所有插件均可选配色方案,但是这样做将使插件模板开发增加15倍工作量,故暂时只有导航菜单使用了这一机制 *showborder 插件默认选用的边框编号。A001代表001号边框模板,配色代号为A(配色编号从A-P共16种颜色,可以填写B001、P001等,但不推荐);1000表示自定义边框,如果插件默认不显示边框,可在此填写1000,并将borderwidth填为0。 *bordercolor 自定义边框的颜色,仅在showborder为1000自定义边框时有效 *borderwidth 自定义边框的宽度,仅在showborder为1000自定义边框时有效 *borderstyle 边框的样式,solid表示实线,dotted表示点状,dashed表示虚线... *borderlable 用于标签式边框填写被控插件编号,默认记录不要填任何内容 *borderroll 用于标签式边框的切换方式,默认记录不要填任何内容 *showbar 自定义边框是否显示插件标题栏,仅在showborder为1000自定义边框时有效 *barbg 自定义边框的标题栏背景色,仅在showborder为 1000自定义边框时有效 *barcolor 自定义边框的标题栏文字色,仅在showborder为1000自定义边框时有效 *backgroundcolor 自定义边框的背景色,仅在showborder为1000自定义边框时有效 *morelink 默认的更多链接,填-1表示不可设置更多链接 *width 插件默认的宽度,根据插件的理想显示尺寸填写 *height 插件的默认高度,根据插件的理想显示尺寸填写 *top 插件的顶边距,是相对于容器的顶边距,一般填0,方便用户在同一位置找到新插入的插件 *left 插件的左边距,是相对于容器的左边距,一般填0, *zindex 插件的Z轴位置,一般填写99,使插件插入时位于其他插件的前方 *padding 插件边框的内边距,即边框和内容之间的距离 *shownums 内容默认显示条数,如不可控制内容条数,填-1 *ord 内容的排序参数,根据插件来源数据表可提供排序的参数,以“|”分割,如不允许设置,填-1 *sc 内容的排序方法,asc或desc,如不允许设置,填-1 *showtj 是否只显示推荐内容,1表示默认选中“只显示推荐内容”,0表示不规定是否显示推荐内容,如果不可设置是否显示推荐内容,填-1 *cutword 内容标题截取文字,填数字,不可设置时填-1 *target 链接打开方式,_self或_blank,不可设置时填-1 *catid 默认选择的分类id,用于选择内容的显示分类。当该值不是-1时,必须在 classtbl字段中填如对应的数据表名,该数据表的结构必须符合PHPWEB的catpath分类方法,如文章、下载分类等均按此标准规划分类。 *cutbody 内容截取字数,一般配合程序截取body,memo等字段,不可设置时填-1 *picw 缩图宽度,一般用于图片展示等插件,不可设置时填-1 *pich 缩图高度,一般用于图片展示等插件,不可设置时填-1 *fittype 缩图的默认自适应方法,填 fill或不可设置时填-1 *title 默认的插件标题 *body 在插件设置时可直接输入[[html]]编辑内容,-1为不可填 *pic 在插件设置时可直接上传图片,-1为不可上传图片 *piclink 在插件设置时可直接上传图片的配套链接,-1为不可填 *attach 在插件设置时可直接上传文件,-1为不可上传文件 *movi 在插件设置时可填写视频来源网址,-1为不可填 *sourceurl 在插件设置时可填写其他来源网址,-1为不可填 *word、 word1、word2、word3、word4、text、text1、link、link1、link2、link3、link4 这些字段用于自定义内容模块中的组合内容插件,一般不使用,填-1 *code 用于输入代码,不可输入填-1 *tags 为空时可设置匹配标签,-1时不可设置 *groupid 用于选择分组,如友情链接、广告组等插件,填-1时不可选择分组 *projid 用于选择专题,如文章列表插件,填-1时不可选择专题 *moveable 预留字段,全部填1 *classtbl 对应catid的分类数据表名 *grouptbl 对应groupid的分组数据表名 *projtbl 对应projid的专题数据表名 *setglobal 是否允许全站同时插入插件,1为可同时插入,0为不可同时插入。注意事项:一般只能允许每页只可插入一个的插件进行全站同时插入,否则会弄乱页面 *overflow 内容溢出是是否自动增加高度,对于可预知高度的应设为hidden,不可预知高度得设为visible *bodyzone 插件默认插入的容器,可选填top、content、bottom *display 预留字段,填1 *ifmul 一个页面中是否允许多次插入本插件,注意插入多个会产生互相冲突的一般应设为0 *ifrefresh 插入插件后是否刷新页面,一般带js的插件应设为1,需要刷新后才能看到效果,普通插件设为0 '''重要提示:'''插件记录表默认参数的设置属于开发范畴,所设置的参数必须进行对应的程序开发才能体现,非程序开发人员切勿在数据表中随意更改已有插件的参数,否则可能导致程序出错! ==插件程序开发== 在规划好一个插件应该按什么样的规则显示、有哪些参数可以设置后,就可以进行插件程序开发了。插件程序的作用就是按可选参数设置,将内容取出来,交给模板显示内容。接下来以“文章列表”插件为例,说明插件程序的开发方法: <pre> <?php /* [插件名称] 最新文章列表 [适用范围] 全站 */ function NewsList(){ #插件程序文件名和插件函数同名 global $fsql,$msql; #全局[[数据库]]连接类 $coltitle=$GLOBALS["PLUSVARS"]["coltitle"]; $shownums=$GLOBALS["PLUSVARS"]["shownums"]; $ord=$GLOBALS["PLUSVARS"]["ord"]; $sc=$GLOBALS["PLUSVARS"]["sc"]; $showtj=$GLOBALS["PLUSVARS"]["showtj"]; $cutword=$GLOBALS["PLUSVARS"]["cutword"]; $cutbody=$GLOBALS["PLUSVARS"]["cutbody"]; $target=$GLOBALS["PLUSVARS"]["target"]; $catid=$GLOBALS["PLUSVARS"]["catid"]; $projid=$GLOBALS["PLUSVARS"]["projid"]; $tags=$GLOBALS["PLUSVARS"]["tags"]; $pagename=$GLOBALS["PLUSVARS"]["pagename"]; $tempname=$GLOBALS["PLUSVARS"]["tempname"]; # 以上读入插件设置参数,在插件记录表中允许设置的项目,必须将设置参数读入,在程序中对参数进行判断;在插件记录表中设置为-1的字段,绝对不要在这里引入 或判断。这是因为当记录值为-1时,插件设置窗口将不显示该参数的设置,用户看不到,但程序一旦解释了,该值就是-1,会使运行结果和预期的不一样。 //地址栏参数 if($pagename=="query" && strstr($_SERVER["QUERY_STRING"],".html")){ $Arr=explode(".html",$_SERVER["QUERY_STRING"]); $nowcatid=$Arr[0]; }elseif($_GET["catid"]>0){ $nowcatid=$_GET["catid"]; }else{ $nowcatid=0; } #文章列表插件中根据插件插入的不同地方,判断当前页面的分类id,以求根据页面自动显示当前分类下的文章。 #默认查询条件 $scl=" iffb='1' and catid!='0' "; #如果插件设置了只显示推荐,则只取tj=1的数据 if($showtj!="" && $showtj!="0"){ $scl.=" and tj='1' "; } #显示分类规则:如果插件设置时未指定分类,则显示当前所在分类,否则不限分类 if($catid!=0 && $catid!=""){ $catid=fmpath($catid); $scl.=" and catpath regexp '$catid' "; }elseif($nowcatid!=0 && $nowcatid!=""){ $catid=fmpath($nowcatid); $scl.=" and catpath regexp '$nowcatid' "; } #匹配专题,如果插件设置中选择了只显示某个专题的文章,则只获取匹配某专题的数据 if($projid!=0 && $projid!=""){ $projid=fmpath($projid); $scl.=" and proj regexp '$projid' "; } #判断匹配标签,如果插件设置中填写了匹配标签,只获取匹配的记录 if($tags!=""){ $tags=$tags.","; $scl.=" and tags regexp '$tags' "; } #模版解释,读入插件模板,将插件模板中的代码按<!- ->标签进行分离,存入数组 #例如<!-start-> 和<!-start->之间的内容,就是$TempArr["start"],依此类推 $Temp=LoadTemp($tempname); $TempArr=SplitTblTemp($Temp); #首先将模板的start部分需要的显示的变量替换给模板 $var=array( 'coltitle' => $coltitle, 'morelink' => $morelink ); $str=ShowTplTemp($TempArr["start"],$var); #开始循环,按条件取出文章 $picnum=1; $fsql->query("select * from pw_news_con where $scl order by $ord $sc limit 0,$shownums"); while($fsql->next_record()){ $id=$fsql->f('id'); $title=$fsql->f('title'); $catpath=$fsql->f('catpath'); $dtime=$fsql->f('dtime'); $nowcatid=$fsql->f('catid'); $ifnew=$fsql->f('ifnew'); $ifred=$fsql->f('ifred'); $ifbold=$fsql->f('ifbold'); $author=$fsql->f('author'); $source=$fsql->f('source'); $cl=$fsql->f('cl'); $src=$fsql->f('src'); $cl=$fsql->f('cl'); $fileurl=$fsql->f('fileurl'); $downcount=$fsql->f('downcount'); $prop1=$fsql->f('prop1'); $prop2=$fsql->f('prop2'); $prop3=$fsql->f('prop3'); $prop4=$fsql->f('prop4'); $prop5=$fsql->f('prop5'); $prop6=$fsql->f('prop6'); $prop7=$fsql->f('prop7'); $prop8=$fsql->f('prop8'); $prop9=$fsql->f('prop9'); $prop10=$fsql->f('prop10'); $prop11=$fsql->f('prop11'); $prop12=$fsql->f('prop12'); $prop13=$fsql->f('prop13'); $prop14=$fsql->f('prop14'); $prop15=$fsql->f('prop15'); $prop16=$fsql->f('prop16'); $prop17=$fsql->f('prop17'); $prop18=$fsql->f('prop18'); $prop19=$fsql->f('prop19'); $prop20=$fsql->f('prop20'); $memo=$fsql->f('memo'); $mid=$fsql->f('memberid'); #对取出的数据进行一系列判断,取出在该插件中可能被显示的数据 if($mid>0){ $memberurl=ROOTPATH."member/home.php?mid=".$mid; }else{ $memberurl="#"; } if($GLOBALS["CONF"]["CatchOpen"]=="1" && file_exists(ROOTPATH."news/html/".$id.".html")){ $link=ROOTPATH."news/html/".$id.".html"; }else{ $link=ROOTPATH."news/html/?".$id.".html"; } $dtime=date("m/d",$dtime); if($ifbold=="1"){$bold=" style='font-weight:bold' ";}else{$bold="";} if($ifred!="0"){$red=" style='color:".$ifred."' ";}else{$red="";} if($cutword!="0"){$title=csubstr($title,0,$cutword);} if($cutbody!="0"){$memo=csubstr($memo,0,$cutbody);} if($src==""){$src="news/pics/nopic.gif";} $src=ROOTPATH.$src; $downurl=ROOTPATH."news/download.php?id=".$id; //显示所属分类 $msql->query("select cat from pw_news_cat where catid='$nowcatid'"); if($msql->next_record()){ $cat=$msql->f('cat'); } // 参数列 $i=1; $msql->query("select * from pw_news_prop where catid='$nowcatid' order by xuhao"); while($msql->next_record()){ $pn="propname".$i; $$pn=$msql->f('propname'); $i++; } #模版标签解释,将数据解释给模板 $var=array ( 'title' => $title, 'memo' => $memo, 'dtime' => $dtime, 'red' => $red, 'bold' => $bold, 'link' => $link, 'target' => $target, 'author' => $author, 'source' => $source, 'cat' => $cat, 'src' => $src, 'cl' => $cl, 'memberurl' => $memberurl, 'picnum' => $picnum, 'downurl' => $downurl, 'fileurl' => $fileurl, 'downcount' => $downcount, 'prop1' => $prop1, 'prop2' => $prop2, 'prop3' => $prop3, 'prop4' => $prop4, 'prop5' => $prop5, 'prop6' => $prop6, 'prop7' => $prop7, 'prop8' => $prop8, 'prop9' => $prop9, 'prop10' => $prop10, 'prop11' => $prop11, 'prop12' => $prop12, 'prop13' => $prop13, 'prop14' => $prop14, 'prop15' => $prop15, 'prop16' => $prop16, 'prop17' => $prop17, 'prop18' => $prop18, 'prop19' => $prop19, 'prop20' => $prop20, 'propname1' => $propname1, 'propname2' => $propname2, 'propname3' => $propname3, 'propname4' => $propname4, 'propname5' => $propname5, 'propname6' => $propname6, 'propname7' => $propname7, 'propname8' => $propname8, 'propname9' => $propname9, 'propname10' => $propname10, 'propname11' => $propname11, 'propname12' => $propname12, 'propname13' => $propname13, 'propname14' => $propname14, 'propname15' => $propname15, 'propname16' => $propname16, 'propname17' => $propname17, 'propname18' => $propname18, 'propname19' => $propname19, 'propname20' => $propname20 ); $str.=ShowTplTemp($TempArr["list"],$var); $picnum++; } #循环结束,将模板的结尾部分,即<!-end->标签之间的内容加入$str,最后返回$str,$str的内容将被完整显示。 $str.=$TempArr["end"]; return $str; } ?> </pre> ==插件默认模板制作== 以“文章列表”插件的默认模板tpl_newslist.htm为例,源码如下: <pre> <!-start-> <link href="css/newslist.css" rel="stylesheet" type="text/css" /> <ul class="newslist"> <!-start-> <!-list-> <li class="newslist"><a href="{ # link # }" target="{ # target # }" class="newslist" { # bold # } { # red # } >{ # title # }</a></li> <!-list-> <!-end-> </ul> <!-end-> </pre> 插件模板一般具有开始部分、循环部分、结束部分,可根据显示的需要,将内容放在合适的位置。如果插件中需要进行多个循环,或加入其它内容,除了这些标签外,还可以使用以下标签: *<!-m1-><!-m1-> *<!-m2-><!-m2-> *<!-m3-><!-m3-> *<!-menu-><!-menu-> *<!-text-><!-text-> *<!-rowstart-><!-rowstart-> *<!-rowend-><!-rowend-> *<!-con-><!-con-> 实际上,标签的作用是让程序把其中的内容加入到数组元素中,而循环是在程序中进行的。例如<!-menu-><!-menu->之间的内容在被加入到数组后就是$TempArr["menu"],在程序中可以将其中的内容进行判断,输出需要的数据。 文章列表插件是所有插件中设置参数最多,也是比较复杂的插件。学习插件开发,可以从简单的开始。比如可以尝试只从[[数据库]]中取出一条数据,通过插件+[[模板]]将其显示出来,然后逐步深入研究插件开发。也可以通过研究学习现有的插件,通过修改现有插件来逐步熟悉插件的开发。 ==插件资源包制作方法== 如果希望发布自己制作的插件,建议你给插件的命名带有自己的英文网名,以避免插件重名。例如你自己制作的特色文章列表插件,可以是 MyNameNewsList.php,pluslable是modMyNameNewsList.。 插件打包时应按原来的文件结构,从模块目录开始,按实际目录存放文件,方便用户了解文件的上传位置。还要在后台'''“模块插件设置”'''中,将此插件的记录导出为.dat文件,一起打包。 初次制作插件资源包,建议先自己测试一次插件安装过程,以保证插件资源包的正确。 ==相关条目== *[[Drupal]] *[[DedeCMS]] *[[ECShop]] *[[osCommerce]] ==参考来源== *[http://www.phpweb.net/news/html/?370.html 参考来源] [[category:PHPWEB|C]]
摘要:
请注意,您对站长百科的所有贡献都可能被其他贡献者编辑,修改或删除。如果您不希望您的文字被任意修改和再散布,请不要提交。
您同时也要向我们保证您所提交的内容是您自己所作,或得自一个不受版权保护或相似自由的来源(参阅
Wordpress-mediawiki:版权
的细节)。
未经许可,请勿提交受版权保护的作品!
取消
编辑帮助
(在新窗口中打开)