系统函数

最后更新于:2022-04-01 02:04:29

[TOC] ##获取栏目相关信息:getCategory | 参数 | 说明 | | -- | -- | | $catid | 栏目id,只支持单个,数值类型,必填 | | $field | 需要返回的栏目字段,例如;catname,如果为空,将以数组的形式返回全部参数。 | | $newCache | 是否使用缓存,默认false,布尔值 | ##获取模型数据:getModel | 参数 | 说明 | | -- | -- | | $modelid | 模型ID,必填项| | $field | 需要返回的模型字段,例如:tablename,如果为空,将以数组的形式返回全部参数。 | ##生成缩略图:thumb | 参数 | 说明 | | -- | -- | | $imgurl | 图片地址 | | $width | 缩略图宽度,默认100 | | $height | 缩略图高度,默认100 | | $thumbType | 缩略图生成方式 1 按设置大小截取 0 按原图等比例缩略,默认0 | | $smallpic | 图片不存在时显示默认图片,默认nopic.gif | `注意:图片路径要正确,必须是站内图片! ` > 模板中用法: {:thumb('/statics/images/rss.png')} ##字符截取:str_cut | 参数 | 说明 | | -- | -- | | $string | 需要截取的字符串 | | $length | 长度 | | $dot | 当长度超出时显示的字符,默认 ... | > 模板中用法: {$vo.title|str_cut=###,100} 或者 {:str_cut($vo['title'],100)} ##获取点击数:hits | 参数 | 说明 | | -- | -- | | $catid | 栏目ID | | $id | 信息ID | > 模板中用法:{:hits($catid,$id)} 或者 {:hits(2,255)} ##标题链接获取:titleurl | 参数 | 说明 | | -- | -- | | $catid | 栏目ID | | $id | 信息ID | ##获取文章评论总数:commcount | 参数 | 说明 | | -- | -- | | $catid | 栏目ID | | $id | 信息ID | > 模板中用法:{:commcount($catid,$id)} 或者 {:commcount(2,255)} ##生成标题样式:title_style | 参数 | 说明 | | -- | -- | | $style | 样式,通常时字段style,以“;”隔开,第一个是文字颜色,第二个是否加粗 | | $html | 是否显示完整的STYLE样式代码 | > 模板中用法:{:title_style($style)} 或者 {:title_style("#ff0000;bold")}
';

附录

最后更新于:2022-04-01 02:04:26

';

blockcache区块缓存标签

最后更新于:2022-04-01 02:04:24

**blockcache区块缓存标签** 区块缓存标签 标签:`<blockcache></blockcache>` 作用:把一个区域(区块)的数据缓存。 用法示例:`<blockcache cache="3600"></blockcache>` ##参数说明 | 参数 | 说明 | | -- | -- | | @cache | 缓存时间,单位秒,默认300秒 | ##使用示例 > 场景:有时我们需要使用很复杂的SQL查询,比较费时,为了达到效果,又不得不这样做的时候。 ~~~ <blockcache cache="3600"> 这里执行了一些比较耗时的查询操作。放在blockcache标签里,对结果进行全部缓存。 </blockcache> ~~~ > 提示:`该标签适合动态访问时使用,静态页面无需使用该标签!`
';

next下一篇标签

最后更新于:2022-04-01 02:04:22

**next下一篇标签** 使用方法:`<next catid="$catid" id="$id" target="1" msg="已经没有了" />` ##参数说明 | 参数 | 说明 | | -- | -- | | @catid | 栏目id,可以传入数字,在内容页可以不传 | |@id|信息id,可以传入数字,在内容页可以不传| |@target|是否新窗口打开,1 是 0否| |@msg|当没有上一篇时的提示语| |@field|返回指定字段内容,只支持 id,title,url| ##使用示例 ~~~ <next catid="$catid" id="$id" field="url" /> ~~~
';

pre上一篇标签

最后更新于:2022-04-01 02:04:19

**pre上一篇标签** 获取上一篇标签: 使用方法:`<pre catid="$catid" id="$id" target="1" msg="已经没有了" />` ##参数说明 | 参数 | 说明 | | -- | -- | | @catid | 栏目id,可以传入数字,在内容页可以不传 | |@id|信息id,可以传入数字,在内容页可以不传| |@target|是否新窗口打开,1 是 0否| |@msg|当没有上一篇时的提示语| |@field|返回指定字段内容,只支持 id,title,url| ##使用示例 ~~~ <pre catid="$catid" id="$id" field="url" /> ~~~
';

navigate导航标签

最后更新于:2022-04-01 02:04:17

**navigate导航标签** 标签:`<navigate/>` 作用:获取内容模型当前位置 用法示例:`<navigate catid="$catid" space=" &gt; " />` ##参数说明 | 参数 | 说明 | | -- | -- | | @catid | 栏目id,可以传入数字,也可以传递变量 $catid | |@space|分隔符,支持html代码(不支持“`>`”,“`<`”等特殊符号)| |@blank|是否新窗口打开| |@cache|缓存时间| 导航标签用法很简单,唯一需要注意的就是,在space参数传递过程中,不能出现“`<`”,“`>`”这样的字符,不然会导致出问题! > 可以使用html实体代替! ##用法示例 ~~~ 在内容页,栏目页可以直接这样使用: <navigate catid="$catid" space=" &gt; " /> 在没有$catid参数的页面,需要手动传入栏目ID <navigate catid="8" space=" &gt; " /> ~~~
';

template模板引入标签

最后更新于:2022-04-01 02:04:15

**template模板引入标签** 标签:`<template/>` 作用:引入其他模板 用法示例:`<template file="Member/footer.php"/>` [TOC] ##参数说明 | 参数 | 说明 | | -- | -- | | @file | 表示需要应用的模板路径。(这里需要说明的是,只能引入当前主题下的模板文件)(`必填`) | ##用法示例 ~~~ 假设主题:Default <template file="Content/header.php"/> ~~~ > 这个示例是最简单的,引入header.php这个模板! ##注意事项 > 首先,ShuipFCMS前台模板结构是 主题/各个模块目录/具体的模板页面 这种结构!template标签只能`当前主题`下的任何模板。所以Content/header.php 表示的就是 `Default`主题下`Content`目录下的`header.php`模板! `如果你真的很想很想引入其他主题下模板,可以使用下面的方法:` include 标签,该标签可以引入任何模板文件 具体用法:`<include file="完整模板文件名" />` 用法示例: ~~~ <include file="./shuipf/Template/Default/Content/header.php" /> ~~~ > 需要注意的地方是,file中的地址是以网站根目录下开始的,不要搞错拉!
';

get数据获取标签

最后更新于:2022-04-01 02:04:13

**get标签** 标签:`<get></get>` 作用:特殊标签,SQL查询标签 用法示例A:`<get sql="SELECT * FROM shuipfcms_article WHERE status=99 ORDER BY inputtime DESC" page="$page" num="5"> .. HTML ..</get>` 用法示例B:`<get table="article" status="99" order="inputtime DESC" where="其它where部分条件" page="$page" num="5">.. HTML ..</get>` [TOC] ##参数说明 | 参数 | 说明 | | -- | -- | | @sql | SQL语句,强烈建议只用于`select`类型语句,其他SQL有严重安全威胁,同时不建议直接在SQL语句中使用外部变量,如`:$_GET`,`$_POST`等。出现“`>`”,“`<`”这类,建议使用`{gt}`代替`>`,`{lt}`代替`<`,`{neq}`代替`<>`,`{elt}`代替`<=`,`{egt}`代替`>=` | |@page|当前分页号,默认$page,当传入该参数表示启用分页,一个页面只允许有一个page,多个标签使用多个page会造成不可预知的问题| |@num|每次返回数据量| |@cache|数据缓存时间,单位秒| |@return|返回值变量名称,默认data| |@pagefun|分页函数,默认page()| |@pagetp|分页模板| |@table|表名,不用填写表前缀,当存在`@table`参数时,忽略`@sql`参数| |@order|排序参数,只有配合`@table`参数有效| |@where|SQL的where部分条件,只有配合`@table`参数有效| ##普通SQL查询示例 ~~~ <get sql="SELECT * FROM shuipfcms_article  WHERE status=99 ORDER BY inputtime DESC" page="$page" num="5"> 表前缀可以使用shuipfcms代替,系统会自动替换为你安装时所设置的表前缀! 循环列表,默认返回数据是$data <ul> <volist name="data" id="vo">     <li>标题:{$vo.title},地址:{$vo.url}</li> </volist> </ul> 分页:{$pages} </get> ~~~ ##使用@table参数的查询示例 ~~~ <get table="article" status="99" order="inputtime DESC" page="$page" num="5"> 循环列表,默认返回数据是$data <ul> <volist name="data" id="vo">     <li>标题:{$vo.title},地址:{$vo.url}</li> </volist> </ul> 分页:{$pages} </get> ~~~ ##比较复杂的示例 ~~~ <?php $sql = 'SELECT * FROM shuipfcms_article  WHERE status=99 '; //接受外部数据 $_catid = I('get.classid',0,'intval'); if($_catid){     $sql .= " `catid` = '{$_catid}' "; } $sql .= ' ORDER BY inputtime DESC'; ?> <get sql="$sql" page="$page" num="5"> 表前缀可以使用shuipfcms代替,系统会自动替换为你安装时所设置的表前缀! 循环列表,默认返回数据是$data <ul> <volist name="data" id="vo">     <li>标题:{$vo.title},地址:{$vo.url}</li> </volist> </ul> 分页:{$pages} </get> ~~~ ##注意事项 >1.sql最好避免直接接受外部数据,会存在SQL注入风险! 2.请不要使用此标签处理非SELECT类型的查询语句! 3.page="$page" 存在,同样是开启分页,一个页面只允许一个标签开启使用,否则会出现不可预知的问题! 4.由于历史原因,如果采用第一种直接传入SQL,出现“`>`”,“`<`”这类,建议使用`{gt}`代替`>`,`{lt}`代替`<`,`{neq}`代替`<>`,`{elt}`代替`<=`,`{egt}`代替`>=`。
';

position推荐位标签

最后更新于:2022-04-01 02:04:10

**position推荐位标签** 标签:`<position></position>` 作用:推荐位标签 用法示例:`<position action="position" posid="1"> .. HTML ..</position>` [TOC] ##公用参数 | 参数 | 说明 | | -- | -- | | @cache | 数据缓存时间,单位秒 | |@return|返回值变量名称,默认data| |@where|sql语句的where部分| ##获取推荐位数据 | 参数 | 说明 | | -- | -- | |@posid|推荐位ID(`必填`)| |@catid|调用栏目ID| |@thumb|是否仅必须缩略图,1是,0不是| |@order|排序| |@num|每次返回数据量| 用法示例: ~~~ <position action="position" posid="1"> 循环推荐位里的数据,默认返回值是 data,默认情况下有以下基本数据 <volist name="data" id="vo"> 标题:{$vo.data.title} 链接:{$vo.data.url} 其他的字段,需要在模型里面设置字段的“在推荐位标签中调用”设置为是,就可以调用拉。 </volist> </position> ~~~
';

comment评论标签

最后更新于:2022-04-01 02:04:08

**comment评论标签** 标签:`<comment></comment>` 作用:评论标签 用法示例:`<comment action="get_comment" catid="$catid" id="$id"> .. HTML ..</comment>` [TOC] ##基本参数 | 参数 | 说明 | | -- | -- | | @action | 调用方法(`必填`) | |@catid|栏目id(`必填`),列表页,内容页可以使用 $catid 获取当前栏目。| ##公用参数 | 参数 | 说明 | | -- | -- | |@cache | 数据缓存时间,单位秒 | |@return|返回值变量名称,默认data| ##获取评论总数 当`@action`为`get_comment`时,获取评论总数 | 参数 | 说明 | | -- | -- | | @action | 调用方法(`必填`) | |@catid|栏目id(`必填`),列表页,内容页可以使用 $catid 获取当前栏目。| > 获取评论总数建议直接用:{:commcount($catid,$id)} 代替! ##获取评论数据 当`@action`为`lists`时,获取评论数据列表 | 参数 | 说明 | | -- | -- | | @action | 调用方法(`必填`) | |@catid|栏目id(`必填`),列表页,内容页可以使用 $catid 获取当前栏目。| |@hot|排序方式{0:最新}| |@date|时间格式 Y-m-d H:i:s A| |@where|sql语句的where部分| 用法示例: ~~~ <comment action="lists" catid="10" id="30"> 循环列表,默认返回数据是$data <ul> <volist name="data" id="vo">     <li>评论用户:{$vo.author},评论内容:{$vo.content}</li> </volist> </ul> </comment> ~~~ ##获取评论排行榜 | 参数 | 说明 | | -- | -- | |@num |返回信息数| 用法示例: ~~~ <comment action="bang" num="10"> 循环列表,默认返回数据是$data <ul> <volist name="data" id="vo">     <li>标题:{$vo.title},地址:{$vo.url}</li> </volist> </ul> </comment> ~~~
';

tags标签

最后更新于:2022-04-01 02:04:06

**Tags标签** 标签:`<tags></tags>` 作用:进行相关Tags数据调用 用法示例:`<tags action="lists" tag="$tag" num="4" page="$page" order="updatetime DESC"> .. HTML ..</tags>` 格式:`<tags action="方法名" 参数="内容"> .. HTML ..</tags>` [TOC] ## 基本参数 | 参数 | 说明 | | -- | -- | | @action | 调用方法(`必填`) | |@page|当前分页号,默认$page,当传入该参数表示启用分页,一个页面只允许有一个page,多个标签使用多个page会造成不可预知的问题。| |@num|每次返回数据量。| ##公用参数 | 参数 | 说明 | | -- | -- | | @cache | 数据缓存时间,单位秒。 | |@return|返回值变量名称,默认data| |@pagefun|分页函数,默认page()| |@pagetp|分页模板| |@where|sql语句的where部分 例如:child = 0| ##获取tag标签列表 当`@action`为`lists`时,获取tag标签列表 | 参数 | 说明 | | -- | -- | | @tag | 标签名,例如:厦门 支持多个,多个用空格或者英文逗号 | |@tagid|标签id 多个使用英文逗号隔开| |@order|排序| |@num|每次返回数据量| 用法示例: ~~~ <tags action="lists" tag="厦门" num="4" order="updatetime DESC"> 循环列表,默认返回数据是$data <ul> <volist name="data" id="vo">     <li>tag标签:{$vo.tag},文章标题:{$vo.title},文章地址:{$vo.url}</li> </volist> </ul> </tags> ~~~ ##获取tag点击排行榜 当`@action`为`top`时,获取tag点击排行榜 | 参数 | 说明 | | -- | -- | | @num | 每次返回数据量 | 用法示例: ~~~ <tags action="top"  num="4"  order="tagid DESC"> 循环列表,默认返回数据是$data <ul> <volist name="data" id="vo">     <li>tag标签:{$vo.tag},tag地址:{$vo.url},点击:{$vo.hits}</li> </volist> </ul> </tags> ~~~
';

spf标签

最后更新于:2022-04-01 02:04:03

**spf模块扩展标签** 标签:`<spf></spf>` 作用:调用非系统内置标签,例如安装新模块后,例如新模块(Demo)目录下TagLib/DemoTagLib.class.php(类名为DemoTagLib) 用法示例:`<spf module="Demo" action="lists"> .. HTML ..</spf>(lists表示类DemoTagLib中一个public方法。)` **特别说明:** > 除了标注是必填参数外,其它参数要看对应标签处理程序是否支持! 参数说明: | 参数 | 说明 | | -- | -- | | @module | 对应模块(`必填`) | |@action|调用方法(`必填`)| |@page|当前分页号,默认$page,当传入该参数表示启用分页,一个页面只允许有一个page,多个标签使用多个page会造成不可预知的问题。| |@num|每次返回数据量| |@cache|数据缓存时间,单位秒。| |@pagefun|分页函数,默认page。| |@pagetp|分页模板,必须是变量传递。| |@return|返回值变量名称,默认data。|
';

content内容标签

最后更新于:2022-04-01 02:04:01

**content内容标签** 标签:`<content></content>` 作用:内容模型相关标签,可调用栏目,列表等常用信息 用法示例:`<content action="lists" catid="$catid" order="id DESC" num="4" page="$page"> .. HTML ..</content>` 格式:`<content action="方法名" 参数="内容"> .. HTML ..</content>` `特别说明:` > `$catid` 变量在列表页,和内容页都表示当前栏目ID。 `page="$page"` 表示开启分页,每个页面,只允许出现`一`个,多个会出现未知错误! content 标签返回的是`数组`,所以要配合`volist标签`使用,具体看手册基本语法! [TOC] ##基本参数 | 参数名称 | 说明 | | -- | -- | | @action | 调用方法(必填) | | @page | 当前分页号,默认$page,当传入该参数表示启用分页,一个页面只允许有一个page,多个标签使用多个page会造成不可预知的问题。 | | @num | 每次返回数据量。 | | @catid| 栏目id(必填),列表页,内容页可以使用 $catid 获取当前栏目。| ##公用参数 | 参数名称 | 说明 | | -- | -- | | @cache | 数据缓存时间,单位秒 | |@return|返回值变量名称,默认data| |@pagefun|分页函数,默认page()| |@pagetp|分页模板| |@where|设置SQL where 部分。<br/>说明:出现“`>`”,“`<`”这类,建议使用`{gt}`代替`>`,`{lt}`代替`<`,`{neq}`代替`<>`,`{elt}`代替`<=`,`{egt}`代替`>=`。<br/> 建议直接`传入变量`。| **`下面的参数,是根据@action参数不同,而独有的`** * * * * * ##调用栏目信息列表 当`@action`为`lists`时,调用栏目信息列表 用法示例:`<content action="lists" catid="$catid" order="id DESC" num="4" page="$page"> .. HTML ..</content>` | 参数名称 | 说明 | | -- | -- | |@order|排序,例如“id DESC”| |@where|sql语句的where部分 例如:` thumb != '' AND status = 99 `| |@thumb|是否仅必须缩略图,1为调用带缩略图的| |@moreinfo|是否调用副表数据 1为是| |@output|是否经过ContentOutput处理,例如时间,在除了内容页其他调用,是一串数字,开启这个后就是直接输出日期了。同时,如果开启这个参数后,会增加一个_original参数,可以访问数据库存储的原始内容,例如 `$vo['_original']['id']`| 用法示例: ~~~ <content action="lists" catid="$catid"  order="id DESC" num="4" page="$page"> 循环列表,默认返回数据是$data <ul> <volist name="data" id="vo">     <li>标题:{$vo.title},地址:{$vo.url}</li> </volist> </ul> </content> ~~~ ##调用点击排行榜 当`@action`为`hits`时,调用点击排行榜 用法格式:`<content action="hits" catid="$catid" order="weekviews DESC" num="10"> .. HTML ..</content>` | 参数名称 | 说明 | | -- | -- | |@order|排序,例如“weekviews DESC”| |@day|调用多少天内的排行| |@where|sql语句的where部分。<br/>`views` 点击总数<br/>`yesterdayviews` 昨日点击<br/>`dayviews` 今日点击<br/>`weekviews` 本周点击<br/>`monthviews` 本月点击| 用法示例: ~~~ <content action="hits" catid="$catid"  order="weekviews DESC" num="10"> 循环列表,默认返回数据是$data <ul> <volist name="data" id="vo">     <li>标题:{$vo.title},地址:{$vo.url}</li> </volist> </ul> </content> ~~~ ##调用相关文章 当`@action`为`relation`时,调用相关文章 用法格式:`<content action="relation" relation="$relation" catid="$catid" order="id DESC" num="5" keywords="$keywords"> .. HTML ..</content>` | 参数名称 | 说明 | | -- | -- | |@nid|排除id 一般是 $id,排除当前文章| |@keywords|内容页面取值:$keywords,也就是关键字| |@relation|内容页取值$relation,当有$relation时keywords参数失效| |@where|sql语句的where部分| 用法示例: ~~~ <content action="relation" relation="$relation" catid="$catid"  order="id DESC" num="5" keywords="$keywords"> 循环列表,默认返回数据是$data <ul> <volist name="data" id="vo">     <li>标题:{$vo.title},地址:{$vo.url}</li> </volist> </ul> </content> ~~~ ##调用栏目列表 当`@action`为`category`时,调用栏目列表 用法格式:`<content action="category" catid="$catid" order="listorder ASC" > .. HTML ..</content>` | 参数名称 | 说明 | | -- | -- | |@order|排序,例如“listorder DESC”| |@where|sql语句的where部分 例如:` child = 0`| 用法示例: ~~~ <content action="category" catid="$catid"  order="listorder ASC" > 循环列表,默认返回数据是$data <ul> <volist name="data" id="vo">     <li>栏目标题:{$vo.catname},地址:{$vo.url}</li> </volist> </ul> </content> ~~~ ##其他一些小技巧 1. 如果要添加where条件,可以这样使用 `where="field='8'"`,如果想在where里调用变量,要使用`<?php $sql = "field = '{$id}'"; ?> where="$sql"` 这种方式,不可以直接在where里使用变量!(`注意:为了你的网站安全,不建议直接接受$_GET,$_POST等不可信数据!`) 2. 如果为了性能考虑,可以添加 `cache="3600"` 参数,标识缓存3600秒。这样在动态访问的时候,可以加快!推荐网站开启Memcached缓存。
';

模板标签

最后更新于:2022-04-01 02:03:59

##寄语 了解模板标签能很好的帮助站长自作各种模板~~ 常用的标签有:`content`标签、`get`标签 get标签可以调用`任何数据`,只有你想不到的,没有做不到的~~~
';

常用变量

最后更新于:2022-04-01 02:03:56

[TOC] ## 网站配置 网站配置信息,例如网站地址:{$Config.siteurl} > **$Config.siteurl** 站点http地址 **$Config.sitename** 站点名称 **$Config.sitefileurl** 附近访问地址前缀 **$Config.siteemail** 站点邮箱 **$Config.siteinfo** 网站简介 **$Config.sitekeywords** 网站关键字 **$Config.theme** 网站主题风格名称 `注意:在模板中可以 {$Config.xx} 方式,在php代码中可以用 $Config['xx'] 方式` ## 模块静态资源目录 > 这是一个模块的静态资源存放目录地址,例如Members模块,那么它的静态资源目录则是 http://您的网站地址/statics/extres/members/,也就等于{$model_extresdir}标签了 ## 栏目相关信息获取 7是指栏目ID,可以用使用变量$catid > 栏目名称:**{:getCategory(7,'catname')}** 栏目类型:**{:getCategory(7,'type')}** 栏目所属模型ID:**{:getCategory(7,'modelid')}** 父栏目ID:**{:getCategory(7,'parentid')}** 所有父栏目ID列表:**{:getCategory(7,'arrparentid')}** 是否存在子栏目:**{:getCategory(7,'child')}** 所有子栏目列表:**{:getCategory(7,'arrchildid')}** 栏目图片:**{:getCategory(7,'image')}** 栏目描述:**{:getCategory(7,'description')}** 栏目目录:**{:getCategory(7,'catdir')}** 栏目父目录:**{:getCategory(7,'parentdir')}** 栏目地址:**{:getCategory(7,'url')}** 栏目是否显示:**{:getCategory(7,'ismenu')}** 栏目拼音:**{:getCategory(7,'letter')}** ## 在栏目页中常用的变量 > 栏目ID:**{$catid}** ## 在内容页面常用的变量 > 信息ID:**{$id}** > 栏目ID:**{$catid}** ## JS全局变量 ~~~ <script type="text/javascript"> var GV = {     DIMAUB: "{$Config.siteurl}",     JS_ROOT: "{$Config.siteurl}statics/js/" }; </script> ~~~ ## 在内容页,进行点击数更新 ~~~ $(function(){ //点击 $.get("{$Config.siteurl}api.php?m=Hits&catid={$catid}&id={$id}", function (data) {     $("#hits").html(data.views); }, "json"); }); ~~~ ## 在内容页调用评论 ~~~ //评论,页面中,必须有包含id="ds-reset"的HTML节点,例如: <div id="ds-reset"></div> var commentsQuery = {     'catid': '{$catid}',     'id': '{$id}',     'size': 10 }; (function () {     var ds = document.createElement('script');     ds.type = 'text/javascript';     ds.async = true;     ds.src = GV.DIMAUB+'statics/js/comment/embed.js';     ds.charset = 'UTF-8';     (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(ds); })(); ~~~
';

模板制作

最后更新于:2022-04-01 02:03:54

**模板结构目录** ShuipFCMS的模板存放目录是在“shuipf/Template” 这个文件夹下! ![2015-08-05/55c22bf1ca18c](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-08-05_55c22bf1ca18c.png) 目录结构就像上面的! `注意:Template目录下,每一个文件夹都算一个主题!` > Default是默认主题,Default/Content 这个就是前台内容模板啦! ![2015-08-05/55c22c1577672](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-08-05_55c22c1577672.png) 结构是这样的! > **Category **这个目录是存放栏目频道页的模板(就是有子栏目,非终极栏目的栏目首页模板)。 **Index **这个目录是网站首页模板。 **List **这个目录是栏目列表模板(指终极栏目)。 **Public **是一些公共模板。 **Rss **是Rss显示模板。 **Show **是内容页模板。 **Tags **是Tags显示的相关模板。 **Page **是单页栏目模板。
';

插件开发

最后更新于:2022-04-01 02:03:52

插件的开发,首选是基于 `插件模块` 这个模块进行,所以,需要支持插件,还需要在线安装`插件模块`。
';

卸载程序制作

最后更新于:2022-04-01 02:03:50

这里介绍的是模块的卸载程序。 基本结构目录: ![2015-08-05/55c1984460230](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-08-05_55c1984460230.png) 比安装模块简单多拉~ `Special.sql`这个是数据库变更脚本,明明规范是和模块目录名相同。这个不是必要的,可以没有。 同样的,卸载也支持卸载脚本的方式,例如:`Uninstall/Uninstall.class.php` 创建这个文件后,卸载时,会自动调用。 Uninstall.class.php 主要代码如下: ~~~ namespace Search\Uninstall;//这里的Search也是和目录名一样 use Libs\System\UninstallBase; class Uninstall extends UninstallBase {     //卸载开始执行     public function run() {         return true;     }     //卸载完回调     public function end() {         return true;     } } ~~~ 到此就介绍完拉~
';

安装程序制作

最后更新于:2022-04-01 02:03:47

这里介绍的是模块开发好后的安装程序(通俗的讲,就是把你开发的程序,加入ShuipFCMS的模块管理,支持安装/卸载)。 基本的安装程序结构如下: ![2015-08-05/55c1976658f3d](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-08-05_55c1976658f3d.png) 解释: > Install 模块下的安装目录(注意大小写) Template 前台模板目录(注意:该目录下需要创建一个和当前模块一样的文件夹,然后才在下面放相应模板。)例如:Special模块,我们就要创建“Special\Install\Template\Special\”这个目录,然后才在里面放各个控制对应的模板。 Menu.php 这个后台菜单项,也是权限控制项。 Special.sql 这个数据库安装脚本,命名是当前模块名。如果没有数据库相关,可以不需要。 * * * * * 这就是最基本的安装程序。可以实现模块的安装。 这里我们介绍下Menu.php文件: ~~~ return array(     array(         //父菜单ID,NULL或者不写系统默认,0为顶级菜单         "parentid" => NULL,         //地址,[模块/]控制器/方法         "route" => "Search/Search/index",         //类型,1:权限认证+菜单,0:只作为菜单         "type" => 0,         //状态,1是显示,0不显示(需要参数的,建议不显示,例如编辑,删除等操作)         "status" => 1,         //名称         "name" => "搜索配置",         //备注         "remark" => "搜索配置!",         //子菜单列表         "child" => array(             array(                 "route" => "Search/Search/create",                 "type" => 1,                 "status" => 1,                 "name" => "重建索引",                 "child" => array(                      //这里是其它的子菜单                 )             ),             array(                 "route" => "Search/Search/searchot",                 "type" => 1,                 "status" => 1,                 "name" => "热门搜索",             ),         ),     ), ); ~~~ `如果您能开发模块,我相信您对上面的代码很了解它是干什么的吧~` > 同时系统还提供一个 D('Admin/Access')->isCompetence 方法,用于判断是否有权限! > 例如:D('Admin/Access')->isCompetence('Special/Index/index') 这个就是判断 Special模块下SpecialAction.class.php里的index方法是否有权限执行。 * * * * * 如果上面的安装方法已经满足你了,下面的更高级的用法,就可以不用看拉~ 模块安装是支持安装脚本的,也就是“`Special\Install\Install.class.php`” Install.class.php 文件,就是由开发者,自己来决定,要如何安装这个模块的一些流程,需要处理的东西。 安装脚本,必须实现两个方法,run 执行安装方法 end 安装完成回调方法。 一个例子: ~~~ namespace Search\Install;//这里的Search是你模块的目录名称,这点很重要 use Libs\System\InstallBase; class Install extends InstallBase { //安装前进行处理 public function run() { return true; } //基本安装结束后的回调 public function end() { return true; } } ~~~
';

配置文件

最后更新于:2022-04-01 02:03:45

每个模块目录里,都有一个Config.inc.php配置文件,这里讲解下这个配置文件如何使用: ~~~ return array(     //模块名称     'modulename' => '搜索',     //图标     'icon' => '模块图标http地址',     //模块简介     'introduce' => '模块简介',     //模块介绍地址     'address' => '',     //模块作者     'author' => '',     //作者地址     'authorsite' => '',     //作者邮箱     'authoremail' => '',     //版本号,请不要带除数字外的其他字符     'version' => '1.0.0',     //适配最低ShuipFCMS版本,     'adaptation' => '2.0.0',     //签名     'sign' => '模块签名,需要shuipfcms扩展中心唯一',     //依赖模块     'depend' => array(),     //行为注册     'tags' => array(         '行为标识' => array(             'title' => '行为名称',             'type' => 1,//行为类型,1控制器,2视图行为             '行为规则',         ),     ),     //缓存,格式:缓存key=>array('module','model','action')     'cache' => array(         '缓存KEY' => array(             'name' => '全站搜索配置',             'model' => '自定义模型',             'action' => '方法',         ),     ), ); ~~~ 上面的就是模块配置文件的基本格式了。
';