# CMS主题教程

# 快速创建主题

# 安装模块开发助手

模块开发助手可以极大效率的提高模块开发效率,在后台安装 模块开发助手 (opens new window)

# 创建主题模块

使用 模块开发助手 (opens new window) 可以快速的创建主题主题模块。

通过 系统管理 → 模块开发助手 → 新建CMS主题模块 可以完成主题模块的快速创建。

# 完成主题模块代码开发

第二步会根据填写的主题模块基本信息完成模块的创建,并且生成一些示例代码,通过修改和完善模块代码,完成模块的功能开发

模块示例代码

主题模块的开发请参照 CmsThemeDemo (opens new window),该示例中涵盖了主题模块开发的示例。

开发示例程序会不断更新,请随时查看最新的开发示例程序。

# 模板开发语法

主题使用了 blade 语法,具体语法可参照 视图开发

# 模板信息

# 站点基本信息

适用范围:任意页面

// 网站名称
{{ modstart_config('siteName') }}
// 网站Logo
{{ modstart_config('siteLogo') }}
// 网站副标题
{{ modstart_config('siteSlogan') }}
// 网站域名
{{ modstart_config('siteDomain') }}
// 网站关键词
{{ modstart_config('siteKeywords') }}
// 网站描述
{{ modstart_config('siteDescription') }}
// 备案编号
{{ modstart_config('siteBeian') }}
// 网站ICO
{{ modstart_config('siteFavIco') }}
// 网站主色调
{{ modstart_config('sitePrimaryColor') }}
// 网站主题
{{ modstart_config('siteTemplate') }}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

# CMS基本信息

适用范围:任意页面

// 企业名称
{{ modstart_config('Cms_CompanyName') }}
// 企业邮箱
{{ modstart_config('Cms_ContactEmail') }}
// 企业电话
{{ modstart_config('Cms_ContactPhone') }}
// 企业地址
{{ modstart_config('Cms_ContactAddress') }}
// 企业传真
{{ modstart_config('Cms_ContactFax') }}
// 联系人
{{ modstart_config('Cms_ContactContactPerson') }}
// 企业联系QQ
{{ modstart_config('Cms_ContactQQ') }}
// 企业介绍标题
{{ modstart_config('Cms_HomeInfoTitle') }}
// 企业介绍图片
{{ modstart_config('Cms_HomeInfoImage') }}
// 企业介绍说明
{{ modstart_config('Cms_HomeInfoContent') }}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

# 导航

# 轮播图片

# 友情链接

# 站点地图

# 当前栏目

适用范围:在列表页或详情页使用

# 可用变量

变量 说明
$cat['id'] 栏目ID
$cat['pid'] 父级栏目ID
$cat['title'] 栏目标题
$cat['url'] 栏目URL
$cat['modelId'] 栏目模型ID
$cat['seoTitle'] SEO标题
$cat['seoDescription'] SEO描述
$cat['seoKeywords'] SEO关键词
$cat['icon'] 栏目图标
$cat['cover'] 栏目封面
$cat['subTitle'] 栏目子标题
$cat['bannerBg'] 栏目Banner背景
$cat['_model'] 栏目模型
$cat['_model']['title'] 栏目模型名称
$cat['_model']['name'] 栏目模型标识

# 指定栏目

适用范围:任意页面

// 根据栏目ID获取栏目信息
<?php $cat = MCms::getCat(1); ?>
// 根据栏目URL获取栏目信息
<?php $cat = MCms::getCatByUrl('news'); ?>
1
2
3
4

# 可用变量

变量 说明
$cat['id'] 栏目ID
$cat['pid'] 父级栏目ID
$cat['title'] 栏目标题
$cat['url'] 栏目URL
$cat['modelId'] 栏目模型ID
$cat['seoTitle'] SEO标题
$cat['seoDescription'] SEO描述
$cat['seoKeywords'] SEO关键词
$cat['icon'] 栏目图标
$cat['cover'] 栏目封面
$cat['subTitle'] 栏目子标题
$cat['bannerBg'] 栏目Banner背景
$cat['_model'] 栏目模型
$cat['_model']['title'] 栏目模型名称
$cat['_model']['name'] 栏目模型标识

# 内容列表

适用范围:列表页

循环输入内容列表

@foreach($records as $record)
    <a href="{{$record['_url']}}">{{$record['title']}}</a>
@endforeach
1
2
3

# 可用变量

# 分页条

适用范围:列表页

输入分页条

<?php $pageHtml ?>
1

当前列表分页HTML数据


<div class="pages">
    <a href="?page=1">1</a>
    <span>2</span>
    <a href="?page=1">3</a>
</div>
1
2
3
4
5
6

如果使用系统完整分页条,则以上样式名称在输出的HTML代码中都带,可以直接使用对应名称在自己的css中定义具体样式即可。

# 可用变量

变量 说明
$page 当前页数
$pageSize 分页大小
$pageNextUrl 下一页URL
$pagePrevUrl 上一页URL

# 内容详情

适用范围:内容页

标题:{{ $record['title'] }}
内容:{{ $record['content'] }}
1
2

# 可用变量

# 指定内容

适用范围:任意页面

// 根据ID获取内容
<?php $record = \MCms::getContent(1); ?>
1
2

# 可用变量

# 留言本

适用范围:所有页面

<form action="{{ modstart_web_url('cms/form/submit',['cat'=>7]) }}" 
    method="post" data-ajax-form>
    手机:<input type="text" name="phone" >
    姓名:<input type="text" name="name" >
    内容:<input type="text" name="content" >
    <button type="submit">提交</button>
</form>
1
2
3
4
5
6
7

留言本使用了通用模型 id = 7 的内容模型,如过手动调整过内容模型,请自行修改代码。

# 表单详情

适用范围:表单页

@foreach($cat['_model']['_customFields'] as $customField)
    @if($customField['fieldType']=='text')
        <!-- 文本字段 -->
        <div>
            {{$customField['title']}}
            :
            <input class="form" type="text" name="{{$customField['name']}}" />
        </div>
    @else
        <!-- 其他字段 -->
    @endif
@endforeach
1
2
3
4
5
6
7
8
9
10
11
12

具体可参照 通用表单模板 (opens new window)

# 可用变量

变量 说明
$customField['modelId'] 模型ID
$customField['title'] 字段名
$customField['name'] 字段
$customField['fieldType'] 字段类型
$customField['fieldData'] 字段数据
$customField['isRequired'] 必填
$customField['placeholder'] 输入提示

# 用户

适用范围:所有页面

@if(\Module\Member\Auth\MemberUser::isLogin())
    欢迎,{{$_memberUser['username']}}
@else
    请登录
@endif
1
2
3
4
5

# 可用变量

变量 说明
$_memberUserId 用户ID,可以判断该变量是否为空来判断用户是否登录
$_memberUser['id'] 用户ID
$_memberUser['username'] 用户名
$_memberUser['avatar'] 头像

# 可用地址

地址 说明
/login 登录页面
/register 注册页面
/member 用户中心

更多使用可参考 Member (opens new window)

# 字段显示

适用范围:任意页面

# 单行文本、多行文本、单选按钮、下拉选择、日期、日期时间、文件、视频、音频

{{ $record['_data']['xxx'] }}
1

# 标签显示

@foreach($record['_tag'] as $tag)
    {{ $tag }}
@endforeach
1
2
3

# 多选按钮

@foreach($record['_data']['xxx'] as $item)
    {{ $item }}
@endforeach
1
2
3

# 图片

<img src="{{ $record['_data']['xxx'] }}" />
1

# 多图

@foreach($record['_data']['xxx'] as $item)
    <img src="{{ $item }}" />
@endforeach
1
2
3

# 富文本

<?php $record['_data']['xxx'] ?>
1

# 手机主题

主题默认主题为响应式主题。

电脑端主题默认路径为 module/Xxx/View/pc/cms/ 中,如需要启用独立的手机端,只需要将所有视图文件按照该相同的结构放置在 module/Xxx/View/m/cms/ 中即可。

# API接口

新窗口查看接口文档 (opens new window)

# CMS操作方法

# 获取内容 getContent

根据内容ID获取单条内容信息

<?php $record = \MCms::getContent($recordId); ?>
1

可用变量

# 列表 listContentByCatUrl

根据栏目URL获取内容列表(不包含副表字段),包含子栏目

<?php $records = \MCms::listContentByCatUrl($catUrl, $page = 1, $pageSize = 10, $option = []); ?>
1

可用变量

# 列表 listContentByCat

根据栏目ID获取内容列表(不包含副表字段),包含子栏目

<?php $records = \MCms::listContentByCat($catId, $page = 1, $pageSize = 10, $option = []); ?>
1

可用变量

# 列表 pageContentByCat

根据栏目ID获取内容列表(不包含副表字段),包含子栏目

<?php $paginateData = \MCms::pageContentByCat($catId, $page = 1, $pageSize = 10, $option = []) ?>
<?php $records = $paginateData['records']; ?>
<?php $total = $paginateData['total']; ?>
1
2
3

基本属性变量

变量 说明
$total 总页数

内容记录变量

# 列表 pageContentByCatUrl

根据栏目URL获取内容列表(不包含副表字段),包含子栏目

<?php $paginateData = \MCms::pageContentByCatUrl($catUrl, $page = 1, $pageSize = 10, $option = []); ?>
<?php $records = $paginateData['records']; ?>
<?php $total = $paginateData['total']; ?>
1
2
3

基本属性变量

变量 说明
$total 总页数

内容记录变量

# 列表 pageContentWithDataByCat

根据栏目ID获取内容列表(包含副表字段),不包含子栏目

<?php $paginateData = \MCms::pageContentWithDataByCat($catId, $page = 1, $pageSize = 10, $option = []); ?>
<?php $records = $paginateData['records']; ?>
<?php $total = $paginateData['total']; ?>
1
2
3

基本属性变量

变量 说明
$total 总页数

内容记录变量

# 列表 pageContentWithDataByCatUrl

根据栏目URL获取内容列表(包含副表字段),不包含子栏目

<?php $paginateData = \MCms::pageContentWithDataByCatUrl($catUrl, $page = 1, $pageSize = 10, $option = []); ?>
<?php $records = $paginateData['records']; ?>
<?php $total = $paginateData['total']; ?>
1
2
3

基本属性变量

变量 说明
$total 总页数

内容记录变量

# 列表 pageContentWithDataByCats

根据多个栏目ID获取内容列表(包含副表字段),不包含子栏目,多个栏目必须为相同的模型

<?php $paginateData = \MCms::pageContentWithDataByCats($catIds, $page = 1, $pageSize = 10, $option = []); ?>
<?php $records = $paginateData['records']; ?>
<?php $total = $paginateData['total']; ?>
1
2
3

基本属性变量

变量 说明
$total 总页数

内容记录变量

# 列表 pageContentWithDataByCatsUrl

根据多个栏目URL获取列表(包含副表字段),不包含子栏目,多个栏目必须为相同的模型

<?php $paginateData = \MCms::pageContentWithDataByCatsUrl($catUrls, $page = 1, $pageSize = 10, $option = []); ?>
<?php $records = $paginateData['records']; ?>
<?php $total = $paginateData['total']; ?>
1
2
3

基本属性变量

变量 说明
$total 总页数

内容记录变量

# 列表 latestContentByCat

根据栏目ID获取最新内容列表(不包含副表字段),包含子目录,

<?php $records = \MCms::latestContentByCat($catId, $limit = 10); ?>
1

可用变量

# 列表条件检索

列表带查询条件时,需要自定义 $option 参数,对所有列表获取方法均适用

// 精确匹配
$option = [
    'where' => [
        'title' => '阿里巴巴',
        'source' => '网络',
    ],
];
// 复杂匹配
$option = [
    'whereOperate'=>[
        // 模糊匹配
        ['title','like','%阿里巴巴%'],
        // 范围
        ['postTime','>=','2021-01-01 00:00:00'],
    ]
];
// 自定义排序
$option = [
    'order'=>[
        ['id','desc']
    ]
];
// 列表默认按照以下排序
$option = [
    'order'=>[
        ['isTop', 'desc'],
        ['isRecommend', 'desc'],
        ['postTime', 'desc'],
    ]
];
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30

# 栏目上一条内容 prevContent

获取上一条记录

<?php $record = \MCms::prevContent($catId, $recordId); ?>
1

可用变量

# 栏目下一条内容 nextContent

获取下一条记录

<?php $record = \MCms::nextContent($catId, $recordId); ?>
1

可用变量

Last Updated: 39 minutes ago