# 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)、访客统计插件
>* 直接在页面`