# zhlcms2.3 **Repository Path**: juheli/zhlcms2.3 ## Basic Information - **Project Name**: zhlcms2.3 - **Description**: ZHLCMS基于ZHLPHP框架开发的内容管理系统,支持二次开发和扩展。 - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 1 - **Created**: 2024-01-30 - **Last Updated**: 2025-03-10 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ZHLCMS 2.3 =============== ## 简介 > ZHLCMS基于ZHLPHP框架开发的内容管理系统,支持二次开发和扩展。 > 想了解更多框架底层内容或者二次开发请先阅读[ZHLPHP说明文档](https://gitee.com/juheli/zhlphp)。 ## 使用说明 ### 一、安装 > * 只需要以下两步 #### 1、程序源文件下载并解压到web服务根目录下。 #### 2、数据安装 ##### 方式一:手动配置 > (1) 配置`config/database.php`文件 > (2) `.sql`文件导入到数据库(需要初始化导入`web_base.sql`, 需要查看示例导入`web_case.sql`) > (3) 如果不需要示例请手动删除示例文件 ##### 方式二:使用安装组件【推荐】 > 1、访问`{项目路径/域名}`后加`/install`进入,例如:`http://www.yj521.com/install` > 2、根据页面选择项‘操作类型’操作,如果是查看示例操作2、3步即可,如果是初始化操作2、3、4步 >* 开发者默认账号:`develop` >* 开发者默认密码:`develop`拼接上当前年月日(如:`develop20230317`) >* 开发者默认密钥:`zhl` >* 注意:初始化zhlcms时会删除示例所有相关文件以及数据库`web_base.sql`和`web_case.sql`文件。 ### 二、目录结构 ``` ├── app ------------------- 应用目录 │ ├── admin ------------- 管理后台业务逻辑模块 │ ├── web --------------- 网站前端业务逻辑模块 │ ├── c ----------------- 公共组件接口模块 ├── config ---------------- 应用配置文件目录 │ └── admin.php --------- 后台管理配置文件 │ └── config.php -------- 全局变量参数配置文件 │ └── database.php ------ 数据库配置文件 ├── extend ---------------- 第三方扩展类库 │ └── Function.php ------ 自定义函数扩展文件 ├── public ---------------- 静态资源存放目录(如css/js/image等,同时也支持入口文件存放) │ ├── admin ------------- 管理后台静态资源存放目录 │ ├── web --------------- 网站前端静态资源存放目录 │ ├── safeverify -------- 安全防御组件样式静态文件 │ └── uploads ----------- 文件上传目录(需要开启读写权限) ├── runtime --------------- 系统缓存/日志等目录(以及子级目录需要开启读写权限) │ └── backup ------------ 数据库备份文件存放目录 │ ├── db ---------------- 数据库日志存放目录 │ ├── error ------------- 系统错误日志存放目录 │ ├── logs -------------- 自定义打印日志存放目录 │ ├── temp -------------- 模版解析文件缓存目录 │ └── tpl --------------- 纯静态html缓存目录 ├── zhlphp ---------------- 框架核心文件目录 └── .htaccess ------------- Apache分布式配置文件示例 └── nginx.conf ------------ Nginx分布式配置文件示例 └── web.config ------------ ISS分布式配置文件示例 └── 404.html -------------- 404页面 └── index.php ------------- 应用程序框架入口文件 └── README.md ------------- 使用说明文档 ``` ### 三、运行 #### 1、运行条件 > __(1)、环境__ > (Apache / Nginx / ISS) + PHP + MYSQL > * php5.3及以上版本(推荐php7) > * mysql5及以上版本 > * php运行环境(如Apache、Nginx、ISS 三选一即可) > __(2)、扩展__ > >| __扩展名__ | __类型__ | __说明__ | >| ---------- | ----------- | -------- | >| openssl | 必须 | 框架内置加密函数必须开启 | >| pdo | 数据库需要 | 如果使用数据库pdo需要开启 | >| mysqli | 数据库需要 | 如果使用mysqli连接需要开启 | >| gd2 | 常用 | 如果用到文件上传需要开启 | >| curl | 常用 | 如果用到curl需要开启 | >| mbstring | 常用 | 如果用到mb_strlen()等需要开启 | >| 其他…… | 常用 | 根据业务需要自行开启需要的扩展 | > > __(3)、配置__ > 默认已经配置分布式文件,如果损坏或者丢失请按照以下格式进行还原。 > > 1、Apache服务 > * 网站根目录下配置“`.htaccess`”文件,编写内容: >``` > > RewriteEngine On > > #指定目录和文件不受影响 > RewriteCond %{REQUEST_URI} !(public|uploads|job) > RewriteCond %{REQUEST_URI} !(\.css|\.js|\.png|\.jpeg|\.jpg|\.gif|\.txt|\.zip|\.rar)$ [NC] > > # 确保请求路径不是一个文件名或目录 > RewriteCond %{REQUEST_FILENAME} !-f > RewriteCond %{REQUEST_FILENAME} !-d > > # 重定向所有请求到 index.php?zhlphpurl=PATHNAME > RewriteRule ^(.*)$ index.php?zhlphpurl=$1 [PT,L] > >``` > > 2、Nginx服务 > * 配置“`nginx.conf`”文件,在server { 里边配置以下代码: >``` >location / { > if (!-e $request_filename) { > rewrite ^/(.*)$ /index.php?zhlphpurl=$1 last; > } >} > >location ~ /\.ht { > deny all; >} >``` >使用phpstudy(小皮)时在网站根目录下配置“`nginx.htaccess`”文件,内容直接复制上边规则。 >注意:配置上边规则后需要重启Nginx。 > > 3、IIS服务 > * 配置“`web.config`”文件,编写内容: >``` > > > > > > > > > > > > > > > > > > >``` >* [扩展] 如果为了目录安全项目根目录可以指向自定义目录,注意入口index.php文件、分布式配置文件、install目录以及以下文件、job目录以及以下文件、404页面 需要放到自定义目录下(比如/public/目录下),详细参考[ZHLPHP说明文档](https://gitee.com/juheli/zhlphp)。 #### 2、访问 ##### (1)、访问形式 >浏览器应用或者能访问http协议的应用 >* 访问网站前端:`{网站根域名}` >* 访问管理后台:`{网站根域名}/job`,如:`http://yj521.com/job` >* 开发者后台管理:`{网站根域名}/admin_login/dev/zhl` >* 相关帐号: >1、示例站点会员帐号:`zhlcms` 默认密码:`123456` >2、后台管理员帐号:`admin` 默认密码:`123456` >3、开发者默认账号:`develop` 默认密码:`develop+当前日期年月日` >* 其他说明: >后台`job`目录可以自定义(根目录下的job文件夹名可以自定义) >开发者默认账号可自定义在`zhlphp\plug\service.php`文件`SYS_DEVELOPER`常量设置 >链接中`zhl`为开发者密钥,可自定义在`zhlphp\plug\service.php`文件`SYS_DEV_LOGIN_FLAG`常量设置 > ##### (2)、url组成和分析 >* {网站根域名}/web_about_index/mid/1/eid/2.html > - web:为功能模块名,框架配置默认模块为“web”时可以为空,如上边url可以:{网站根域名}/about_index/mid/1/eid/2.html > - about:为控制器 > - index:为方法名(index时可以为空),如:{网站根域名}/about/mid/1/eid/2.html > - mid/1/eid/2:为参数和对应的值,等于mid=1&eid=2。 >* 比如创建了admin模块,admin模块下创建了Admin_NewsController.php,里边方法是list,访问url为:{网站域名}/admin_news_list{伪静态后缀} #### 3、数据库配置文件 > 配置文件在 __/config/database.php__ ,可以手动配置,一般情况下不需要配置通过‘数据安装’方式配置数据库链接信息即可。 >``` >'mysql'=>array( > 'db_type' => 'mysql', --------------- 请勿改动 > 'db_link' => 'mysqli', -------------- 请勿改动 > 'db_host' => '127.0.0.1', ----------- 链接地址 > 'db_port' => 3306, ------------------ 链接端口号 > 'db_name' => 'zhl_cms2', ------------ 数据库名 > 'db_user' => 'root', ---------------- 链接帐号 > 'db_pwd' => '123456', -------------- 链接密码(无密码可为空) > 'db_fix' => 'zhl_', ---------------- 表前缀(可为空,根据实际表前缀设置) > 'db_char' => 'utf8', ---------------- 链接编码(默认) > ) >``` ### 四、功能应用 > 后台系统主要有五大核心功能和其他附属功能组成,五大核心功能分别是‘模型管理’,‘菜单管理’,‘文章管理’,‘权限管理’,‘系统设置’,(其他附属功能不做介绍,可以扩展其他模块,支持二开)。 #### 1、模型管理 > 模型可以理解为一个生产‘分区/频道/模块/子系统’的功能(简单理解就是创建不同的数据表),实际开发中根据业务需要可以通过模型创建出‘产品’,‘新闻’,‘会员’,‘订单’,‘表单’等等不同分区。模型管理除了开发者其他账号没有权限。 > > __(1)、添加、修改、删除模型__ > * 添加:比如添加一个新闻模型,‘模型编码’填写‘news’根据填写的‘模型编码’为名自动创建数据库相应的表,后续新闻内容就存在此相关的数据表中。 > * 修改:‘模型编码’添加时编写后不可修改,且不能和已有的重名。 > * 删除:删除模型时谨慎操作相应的数据表也会删除(存在的内容会丢失)。 > > __(2)、模型字段添加、修改、删除__ > * 添加:给模型添加自定义字段(创建的数据表添加列)。 > * 修改:当前模型已有的字段标识不能重复。 > * 删除:删除字段时谨慎操作相应的数据会丢失。 #### 2、菜单管理 > 菜单分为两种类型,分别是左侧菜单和顶部菜单,一般左侧菜单为前端网站的菜单,顶部菜单为后台内容管理菜单。 > __(1)、添加、修改、删除菜单__ > * 菜单会关联模型,多个菜单可以关联同一模型。 > * 菜单关联模型后访问链接会访问菜单关联模型的数据表内容。 > * 实际开发中根据业务需要操作菜单,菜单可以无限级嵌套。 > * 删除菜单时之前已关联的内容数据不会删除数据表中可以找回。 > > __(2)、菜单字段添加、修改、删除__ > * 根据业务需要给不同菜单分配不同的字段。 > * 删除字段时要注意该字段已有的内容/数据丢失。 #### 3、文章管理 > * 这里指的文章为所有模型下的所有‘分区’下的内容列表和内容详情。 > * 根据菜单路由定向到关联模型下的数据表的内容(模型关联菜单id的文章)。 > * 文章也可以互相关联成为上下级关系(菜单出设置上下级层级)。 > * 子级文章可以扩展列表(模型管理设置开启内容子级列表)。 > * 文章可以自由增删改查(修改和删除时注意数据备份)。 #### 4、权限管理 > * 该功能可以添加/修改/删除角色权限组,然后可以针对不同的角色权限组分配不同的权限。 > * 后台用户管理可以给每个用户分配不同的权限角色。 #### 5、系统设置 > __(1)、基础设置__ > * 系统基础配置和控制,包含了基础设置和开发者设置。 > > __(2)、数据管理__ > * 数据库数据在线备份和还原。 > > __(3)、静态管理__ > * 网站前端页面可以生成纯静态提高网站性能,可以手动创建、更新、删除纯静态文件。 > * 表单提交或者ajax时需要访问数据库通过传参数`still`值不为空、零、null即可跳过静态拦截。 > > __(4)、文件清理__ > * 系统临时文件和过期文件清理。 > * 安全清理:清理临时缓存的文件。 > * 深度清理:清理临时缓存和过期的文件(谨慎操作会导致历史数据还原时文件丢失)。 > > __(5)、SQL命令__ > * 【慎用】仅限开发者,编写sql直接操作数据库,类似数据库管理工具。 > > __(6)、其他功能__ > * 开发升级中…… #### 6、后台用户管理 > __(1)、添加/修改/删除用户__ > * 和文章管理一样,进行增删改查用户。 > > __(2)、分配权限__ > * 添加修改时给用户选择一个权限组(角色)。 #### 7、字段模版管理(当前功能开发升级中…) > * 文章详情下的子列表自定义的字段内容。 > * 这里子列表和文章与文章上下级关系关联类似,不同点是这里可以给后台管理者用户自己自定义。 ### 五、前端页面交互搭建 #### 1、模板目录结构 > * 前端模版文件存放在项目`app/web/views`目录下。 > 在后台‘系统管理’->‘基础配置’下可以配置模版存放目录,默认的是`web_pc`,一般情况下只有一个pc端或者响应式模版时只用‘电脑端模版’,如果实际开发中,网站两套模版或者PC和移动端模版是分开的,这时可以用到两套模版文件,及‘电脑端模版’和‘移动端模版’同时注意‘设置多模版’开关要开启,移动端访问的时候才会自动定向到移动端模版。 > * 注意系统中配置模版名称后,在`app/web/views`目录下需要手动创建对应的文件夹。 #### 2、模版文件创建 > * 在`app/web/views/web_pc`目录下创建后缀`.html`的文件则为模版文件,例如`index.html`、`news.html`等。 #### 3、模版引擎使用(标签规则) > * 在创建的模版文件里可以写指定标签也可以写原始php代码。 ##### (1)、文件引入 > 例如:`{include="footer.html"}` ##### (2)、输出变量 > 例如:`{$title}`,输出数组下的元素:`{$info['title']}`,也可以这样:`{$info.title}` ##### (3)、不输出到页面 > 例如:`{|$title}`,给变量赋值:`{|$title='1'}` 等 ##### (4)、函数使用 >可以使用php内置函数也可以使用自定义的函数,例如:`{fun date('Y-m-d')}`,默认是输出到页面,不输出到页面:`{|fun date('Y-m-d')}`,也可以进行赋值:`{|fun $nowDate = date('Y-m-d')}` ##### (5)、判断if else使用 > 例: >``` >{if($flag = 1)} >
if1
>{elseif( $flag = 2 )} >
if2
>{else if($flag=3)} >
if2
>{else} >
else
>{/if} >``` ##### (6)、数组遍历foreach > 例: >``` > {foreach $list as $v} > {$info['title']} 也可以这样 {$v.title} > {/foreach} >``` ##### (7)、sql使用 >* 根据实际情况,此方式可以获取所有相关信息,如果了解sql语句会更易于理解,如下示例: >``` >{sql select="a.id eid,name uname,title" from="article a" leftjoin="article_detail b,sysmenu c" >on="a.id:b.essay_id|a.id:b.aid,a.menu_id:c.id&a.id:c.id" >and.id="1" and.status="!2" or.level="1" or.fid="!0" gt.read="5" gt.click="6" between.time="5,1" between.age="5,35" >in.id="1,2,3" in.aid="1,2,3" like.name="%小明%" locate.name="小" group="age,code" having="count(*)>2" >order.id="desc" order.time="desc" limit="0,10" limit="10" page="$param['page']" val="v2"} >

{$v2.id}

>

{$v2['title']}

>{/sql} >
{$v2.pages}
>``` >* 必须以{sql开头,以{/sql}结束,注意特殊符号含义:‘|’意思为‘或者’,‘&’为‘并且’,‘!’为‘非’。 >* 以下针对{sql}标签里边的属性介绍: > >| 属性名称 | 备注说明 | >| ------- | -------- | >| select | 需要查询的字段 | >| from | 需要查询的主表 | >| join | 需要关联的表,默认是leftjoin关联模式 | >| leftjoin | 需要关联的表,以左边表为主进行关联 | >| rightjoin | 需要关联的表,以右边表为主进行关联 | >| on | 表关联之间的字段关系 | >| and | 查询条件‘并且’,可以指定多个字段 | >| or | 查询条件‘或者’,可以指定多个字段 | >| gt | 查询条件‘大于’,可以指定多个字段 | >| gts | 查询条件‘大于等于’,可以指定多个字段 | >| lt | 查询条件‘小于’,可以指定多个字段 | >| lts | 查询条件‘小于等于’,可以指定多个字段 | >| between | 查询条件‘范围’,可以指定多个字段 | >| in | 查询条件‘存在’,可以指定多个字段 | >| notin | 查询条件‘不存在’,可以指定多个字段 | >| like | 查询条件‘模糊查询’ 可以指定多个字段 | >| locate | 查询条件‘存在某字符’ 可以指定多个字段 | >| group | 根据某字段分组,可以指定多个字段 | >| having | 使用聚合函数统计 | >| order | 排序,可以指定多个字段 | >| limit | 获取条数 | >| page | 当前页码数,一般直接用变量$page | >| val | 输出的变量名称 | >* 输出分页是‘$’+val属性值+.pages,列如:`{$v2.$pages}`,pagesArr可以单个输出 首页、上一页、数字页、下一页、尾页,列如: `{$v2.pagesArr.f}`、 `{$v2.pagesArr.p}`、 `{$v2.pagesArr.s}`、 `{$v2.pagesArr.n}`、 `{$v2.pagesArr.l}`。 #### 4、常用标签 > * 自定义常量和变量时不要和以下常量/变量重名,重名则值会被覆盖。 ##### (1)、常用常量 >| 常量名称 | 备注说明 | >| ------- | -------- | >| {SYS_HOST} | 网站域名 | >| {SYS_URL} | 当前访问的URL | >| {SYS_URL_FIX} | 伪静态/静态后缀 | >| {SYS_PATH} | 项目根目录 | >| {V_CSSJS} | css、js版本缓存 | >| {OSS_HOST} | oss文件域名 | ##### (2)、页面SEO中TDK > >| 固定变量 | 备注说明 | >| ------- | -------- | >| {$seo_title} | 页面中title | >| {$seo_key} | 页面中keywords | >| {$seo_desc} | 页面中description | ##### (3)、固定变量 > >| 固定变量 | 备注说明 | >| ------- | -------- | >| {$mid} | 当前菜单ID | >| {$eid} | 当前文章ID | >| {$page} | 当前分页页码 | >| {$tmplUrl} | 当前页面模版名 | >| {$menuInfo} | 当前导航信息 | >| {$mids} | 当前导航栏目所有父级ID | >| {$menuFidList} | 当前导航栏目所有父级信息 | >| {$essayInfo} | 当前文章信息 | >| {$sys_js_count} | 网站访客统计插件 | >| {$zhlcms} | 基类对象 | > * 注意:数组下的某个元素有两种方式,比如文章id `$essayInfo.id`或者`$essayInfo['id']`。 ##### (4)、当前菜单相关信息 {$menuInfo} >| 固定变量 | 备注说明 | >| ------- | -------- | >| {$menuInfo} | 当前菜单信息(数组) | >| {$menuInfo.id} | 当前菜单ID(等同于$mid) | >| {$menuInfo.url} | 当前菜单URL | >| {$menuInfo.menuname} | 当前菜单名称 | >| {$menuInfo. …} | 其他字段详细查看zhl_sysmenu数据表 | ##### (5)、当前文章信息 {$essayInfo} >| 固定变量 | 备注说明 | >| ------- | -------- | >| {$essayInfo} | 当前文章信息(数组) | >| {$essayInfo.id} | 当前文章ID(等同于$eid) | >| {$essayInfo.url} | 当前文章URL | >| {$essayInfo.title} | 当前文章标题 | >| {$essayInfo.createdate} | 当前文章创建时间 | >| {$essayInfo. …} | 其他字段详细查看当前菜单关联的模型下的字段 | ##### (6)、获取菜单导航列表 >* `$zhlcms::menuList()`获取所有导航,通过foreach遍历出每个导航信息,menuList()可以传参(默认开启且左侧导航),列如获取一级且启用的导航:`$zhlcms::menuList(array('status'=>'1','fid'=>'0'))` 。 >* 以下示例获取所有且开启的导航(后台左侧菜单)导航树的方式包含上下级: >``` >{foreach $zhlcms::menuList() as $v} > {$v.menuname} >{/foreach} >``` >* 判断当前页面所属哪个菜单导航,且给当前导航或者父级导航加样式,比如: >``` >{if(in_array($v['id'], $mids))} > 属于当前菜单或者父级菜单 >{else} > 不属于当前导航也不属于前导航的父级 >{/if} >``` > * 例如获取所有导航,给当前页面导航或者父级导航添加样式: >``` >{foreach $zhlcms::menuList() as $v} > {$v.menuname} >{/foreach} >``` > > ##### (7)、获取指定导航下子导航列表 >* `$zhlcms::menuFinds()`获取所有导航,通过foreach遍历出每个菜单信息,menuFinds()必须传参,传参只能是整型,可以是变量,列如:`$zhlcms::menuFinds(8)`,`$zhlcms::menuFinds($mid)`。 >* 以下获取当前导航下的所有子导航: >``` >{foreach $zhlcms::menuFinds($mid) as $v} > {$v.id} - {$v.menuname} >{/foreach} >``` >* 以下获取导航ID为8下的所有子导航: >``` >{foreach $zhlcms::menuFinds(8) as $v} > {$v.id} - {$v.menuname} >{/foreach} >``` >* 也可以这样: >``` >{|$nowMid=8} >{foreach $zhlcms::menuFinds($nowMid) as $v} > {$v.id} - {$v.menuname} >{/foreach} ##### (8)、获取面包屑导航列表 >* `$zhlcms::menuCrumb()`获取包屑导航,通过foreach遍历出每个菜单信息,menuCrumb()必须传参,传参只能是整型,可以是变量,列如:`$zhlcms::menuCrumb(8)`,`$zhlcms::menuCrumb($mid)`。 >* 以下获取当前导航下的面包屑导航: >``` >{foreach $zhlcms::menuCrumb($mid) as $v} > {$v.menuname} > >{/foreach} >``` >列如以上输出在页面格式:`首页 > 新闻中心 > 公司信息` ##### (9)、获取单个菜单详情 >* 获取指定的菜单详情例如:`{|$menu = $zhlcms::menuInfo(8)}`,输出菜单名称:`{$menu['menuname']}` , 也可以这样:`{$menu.menuname}`。 >* 注意获取当前页面导航详情直接用`{$menuInfo}`,输出菜单名称:`{$menuInfo['menuname']}`等。 ##### (10)、获取文章(主表-单表)信息 >* 获取文章信息(只获取主表不获取副表信息),列如获取模型编码(表名)为article且文章ID为7的文章信息 `{|$info=$zhlcms::essayInfo('article',7)}`,essayInfo必须传两个参数,文章所属模型编码(表名)和文章id。列如输出文章标题:`{$info['title']}` 或者`{$info.title}` >* 注意获取当前文章详情直接用`{$essayInfo}`,输出文章标题:`{$essayInfo['title']}`或者`{$essayInfo.title}` 等。 ##### (11)、获取文章(主表+副表)信息 >* 和上边一样,不同点是方法加s,获取的内容关联了主表+副表所有信息,列如获取模型编码(表名)为article且文章ID为7的文章所有信息 `{|$info=$zhlcms::essayInfos('article',7)}`,essayInfo必须传两个参数,文章所属模型编码(表名)和文章id。列如输出文章标题:`{$info['title']}` 或者`{$info.title}` >* 注意获取当前文章详情直接用`{$essayInfo}`,输出文章标题:`{$essayInfo['title']}`或者`{$essayInfo.title}` 等。 ##### (12)、获取文章上一篇信息 >* 列如获取当前导航下当前文章上一篇文章信息:`{|$essayInfo = $zhlcms::prevInfo('article',$mid,$eid)}`,prevInfo必须传三个参数,第一个是模型编码(表名),第二个是导航ID,为空则不限制导航,第三个为指定当前文章ID。输出信息同上。 ##### (13)、获取文章下一篇信息 >* `{|$essayInfo = $zhlcms::nextInfo('article',$mid,$eid)}` ##### (14)、获取文章列表(主表-单表) >* 列如获取模型编码(表名)为article且导航ID为8的文章列表主表信息`$zhlcms::essayList('article', 8)`,通过foreach遍历出每条文章信息: >``` >{foreach $zhlcms::essayList('article', 8) as $v} > {$v.title} > >{/foreach} >``` >* essayList 所需传参的参数: > >| 参数 | 是否必传 | 备注说明 | >| ------- | -------- | -------- | >| 第1个参数 | Y | 指定模型(模型编码/表名)| >| 第2个参数 | N | 导航ID | >| 第3个参数 | N | 获取条数 | >| 第4个参数 | N | where条件数组 | >| 第5个参数 | N | 排序字段 | >| 第6个参数 | N | 获取的字段 | >| 第7个参数 | N | 分组的字段 | ##### (15)、获取文章列表(主表+副表) >* 列如获取模型编码(表名)为article且导航ID为8的文章列表主表+副表所有信息`$zhlcms::essayLists('article', 8)`,通过foreach遍历出每条文章信息: >``` >{foreach $zhlcms::essayLists('article', 8) as $v} > {$v.title} > >{/foreach} >``` >* essayList 所需传参的同上。 ##### (16)、获取文章列表分页(主表) >* 列如获取模型编码(表名)为article且导航ID为8的文章分页列表主表信息`$zhlcms::pageList('article', 8, $page)`,通过foreach遍历出每条文章信息: >``` >{foreach $zhlcms::pageList('article', 8, $page) as $v2} > {$v2.title} > >{/foreach} >``` >* 输出分页信息,`{$v2.$pages}`,pagesArr可以单个输出 首页、上一页、数字页、下一页、尾页,列如: `{$v2.pagesArr.f}`、 `{$v2.pagesArr.p}`、 `{$v2.pagesArr.s}`、 `{$v2.pagesArr.n}`、 `{$v2.pagesArr.l}`。 >* pageList 所需传参的参数: > >| 参数 | 是否必传 | 备注说明 | >| ------- | -------- | -------- | >| 第1个参数 | Y | 指定模型(模型编码/表名)| >| 第2个参数 | N | 导航ID,可以为0,0不限制所属导航 | >| 第3个参数 | Y | 当前页码 | >| 第4个参数 | N | 获取条数 | >| 第5个参数 | N | where条件数组(包含模糊查询范围查询等) | >| 第6个参数 | N | 排序字段 | >| 第7个参数 | N | 获取的字段 | >| 第8个参数 | N | 分组的字段 | ##### (17)、获取文章列表分页(主表+副表) >* 列如获取模型编码(表名)为article且导航ID为8的文章分页列表主表信息`$zhlcms::pageLists('article', 8, $page)`,通过foreach遍历出每条文章信息: >``` >{foreach $zhlcms::pageLists('article', 8, $page) as $v3} > {$v3.title} > >{/foreach} >``` >* 输出分页信息以及pageLists 所需传参的参数同上。 #### 5、组件使用 ##### (1)、访客统计插件 >* 直接在页面``标签前: >* 1、使用模版引擎时`{$sys_js_count}` >* 2、直接php标签`````` ##### (2)、文件上传插件 >* 可以使用现有扩展`plugFileReaderBase64`详细查看后台文件上传组件的使用(引用js和编写上传方法) >* 可以使用自定义扩展自行引入 ##### (3)、表单提交 > * 提交地址:/base_msg > * 必传参数:mould、menu_id (模型名称、菜单ID) > * 可传参数:daycount (一天内可提交的次数) > * 其他参数:用户自定义的其他参数 ### 六、进阶 #### 1、二次开发 > __(1)、后台管理新建自定义文章管理页面__ > * 新建菜单时‘管理模式’设置为‘新开’,根据‘管理模版’填写的为名创建控制器等编写业务逻辑以及自定义模版等。 > __(2)、其他__ > * 二次开发时或者了解更多请阅读[ZHLPHP说明文档](https://gitee.com/juheli/zhlphp)。 ### 七、版权信息 >* [越加网](https://www.yj521.com)©版权所有 >* 个人/组织/企业不得用于商业活动,仅限个人研究和学习。 >* 获得商业版权请联系`610652724@qq.com` --- --------- END --------- --- ---