ModStartCMS万能建站系统主题开发教程

主题开发教程

ModStart中的所有第三方统称为模块,模板主题也是一个模块,以 CmsTheme 开头,如 CmsThemeBlueCmsThemeGreen 等。

创建主题模块

使用 模块开发助手 可以快速的帮您创建模板主题模块。

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

如果您需要手动创建模板主题模块,请参照 CMS开发演示模板 。

主题模块结构

CmsThemeMyTest
├── Admin
│     ├── Controller
│     │     └── ConfigController.php             → 后台配置文件
│     └── routes.php
├── Asset                                        → 主题资源文件
│     ├── css
│     │     └── theme.css
│     └── js
│         └── theme.js
├── Core
│     └── ModuleServiceProvider.php              → 模块核心注册器
├── Docs                                         → 模块文档
│     ├── doc
│     │     └── Manual.md
│     ├── module
│     │     ├── content.md
│     │     ├── demo.md
│     │     ├── mobilePreview.md
│     │     └── preview.md
│     └── release
│         └── 1.0.0.md
├── Provider
│     └── ThemeSiteTemplateProvider.php         → 主题注册器
├── View                                        → 模块视图主目录
│     └── pc                                    → 自适应默认为PC
│         ├── cms
│         │     ├── list                        → 列表视图
│         │     │     ├── cases.blade.php
│         │     │     ├── default.blade.php
│         │     │     ├── job.blade.php
│         │     │     ├── news.blade.php
│         │     │     └── product.blade.php
│         │     ├── detail                      → 详情视图
│         │     │     ├── cases.blade.php
│         │     │     ├── default.blade.php
│         │     │     ├── job.blade.php
│         │     │     ├── news.blade.php
│         │     │     └── product.blade.php
│         │     ├── form                        → 表单视图
│         │     │     └── default.blade.php
│         │     ├── page                        → 单页视图
│         │     │     └── default.blade.php
│         │     ├── index.blade.php
│         ├── footer.blade.php
│         ├── frame.blade.php                   → 模板框架视图
│         └── header.blade.php
├── config.json                                 → 模块配置文件
└── demo_data.php                               → 演示数据初始化

视图文件优先级

主题的视图文件( .blade.php 结尾)可能出现在多个位置,系统在渲染视图的时候会按照以下优先级查找直到匹配成功:

  1. 启用的主题视图目录:如 module/CmsThemeMyTest/View
  2. 当前模块视图目录:如 module/Cms/View
  3. 系统视图目录:如 resources/views/theme/myTest
  4. 系统默认视图目录:如 resources/views/theme/default

举例说明:

当前系统启用了由CmsThemeMyTest主题模块提供的 myTest 主题。

Cms 模块的列表页面调用 $this->view('cms.list.news')返回视图文件,

系统会按照如下顺序进行视图文件的查找:

  • module/CmsThemeMyTest/View/pc/cms/list/news.blade.php
  • module/Cms/View/pc/cms/list/news.blade.php
  • resources/views/theme/myTest/pc/cms/list/news.blade.php
  • resources/views/theme/default/pc/cms/list/news.blade.php

视图数据实体

栏目Cat

{
  "id": 5,
  "created_at": "2021-11-02 20:53:18",
  "updated_at": "2021-12-19 10:03:07",
  "pid": 0,
  "sort": 0,
  "title": "新闻资讯",
  "url": "news",
  "modelId": 9,
  "listTemplate": "news.blade.php",
  "detailTemplate": "news.blade.php",
  "seoTitle": "11",
  "seoDescription": "22",
  "seoKeywords": "33",
  "icon": "",
  "cover": "",
  "subTitle": "为广大企业提供更加轻便、高效、经济的人力资源服务",
  "bannerBg": "",
  "pageTemplate": null,
  "formTemplate": null,
  "_model": {
    "id": 9,
    "created_at": "2021-11-02 20:42:42",
    "updated_at": "2021-12-19 10:03:07",
    "title": "新闻咨询",
    "name": "news",
    "detailTemplate": "news.blade.php",
    "listTemplate": "news.blade.php",
    "pageTemplate": null,
    "mode": 1,
    "formTemplate": null,
    "_customFields": []
  }
}

内容ContentSimple

{
  "id": 102,
  "created_at": "2021-12-20 10:54:03",
  "updated_at": "2021-12-20 10:54:03",
  "catId": 5,
  "modelId": 9,
  "alias": null,
  "title": "2020整体橱柜十大品牌排行榜",
  "summary": "这是2020年评选出来的橱柜十大品牌排行榜,小编对这个排行没有意见,只是仁者见仁,智者见智,排行自有一定的道理,至于其中有什么",
  "cover": "vendor/image/news-3.jpg",
  "postTime": "2021-01-01 00:00:20",
  "wordCount": null,
  "viewCount": null,
  "status": 1,
  "commentCount": null,
  "likeCount": null,
  "isRecommend": 1,
  "isTop": null,
  "tags": [],
  "author": null,
  "source": null,
  "seoTitle": null,
  "seoDescription": null,
  "seoKeywords": null,
  "_url": "/a/102",
  "_day": "2021-01-01"
}

内容Content

{
  "id": 102,
  "created_at": "2021-12-20 10:54:03",
  "updated_at": "2021-12-20 10:54:03",
  "catId": 5,
  "modelId": 9,
  "alias": null,
  "title": "2020整体橱柜十大品牌排行榜",
  "summary": "这是2020年评选出来的橱柜十大品牌排行榜,小编对这个排行没有意见,只是仁者见仁,智者见智,排行自有一定的道理,至于其中有什么",
  "cover": "vendor/image/news-3.jpg",
  "postTime": "2021-01-01 00:00:20",
  "wordCount": null,
  "viewCount": null,
  "status": 1,
  "commentCount": null,
  "likeCount": null,
  "isRecommend": 1,
  "isTop": null,
  "tags": null,
  "author": null,
  "source": null,
  "seoTitle": null,
  "seoDescription": null,
  "seoKeywords": null,
  "_tags": [],
  "_data": {
    "id": 102,
    "created_at": "2021-12-20 10:54:03",
    "updated_at": "2021-12-20 10:54:03",
    "content": "<p>橱柜生产企业也由94年的20多家发展到现在的3000多家,规模企业100多家,行业前50家销售额占全行业的30%以上。也因此在橱柜行业内涌现出一批优秀的企业和品牌。</p>\n<p>但是关于中国橱柜十大品牌评选的版本却有很多,但是不管是由谁提出的什么版本,关键是要用重要数据说话。以品牌知名度、质量标准、产品研发、生产能力、销售规模、品牌口碑、可持续发展能力等方面综合来评定才有足够说服力。质量标量是一个知名品牌的生命力,产品研发、生产能力、销售规模、可持续发展能力是一个知名品牌的发展力,品牌知名度、品牌口碑是一个知名品牌的影响力。</p>\n<p>2018年从品牌知名度、质量标准、产品研发、生产能力、销售规模、品牌口碑、可持续发展能力等方面综合评定出的中国橱柜十大品牌名单榜中榜上,皮阿诺排列其中,但是,如果单纯以橱柜终端实际网点,实际销售额来评估,皮阿诺凭借700家终端专卖店和售后服务中心可以位列十大橱柜品牌之首,而在新近由腾讯举办的网友“十大橱柜品牌评选”活动中,皮阿诺更是以高票位居三甲。</p>"
  }

模型Model

{
  "id": 9,
  "created_at": "2021-11-02 20:42:42",
  "updated_at": "2021-12-19 10:03:07",
  "title": "新闻咨询",
  "name": "news",
  "detailTemplate": "news.blade.php",
  "listTemplate": "news.blade.php",
  "pageTemplate": null,
  "mode": 1,
  "formTemplate": null,
  "_customFields": [
    {
      "id": 19,
      "created_at": "2021-12-19 15:48:57",
      "updated_at": "2021-12-19 15:48:57",
      "modelId": 20,
      "sort": 1,
      "title": "手机",
      "name": "phone",
      "fieldType": "text",
      "fieldData": [],
      "isRequired": 0,
      "isSearch": 0,
      "isList": 0,
      "placeholder": null,
      "listTemplate": null,
      "showTemplate": null,
      "maxLength": 100
    },
    {
      "id": 20,
      "created_at": "2021-12-19 15:48:57",
      "updated_at": "2021-12-19 15:48:57",
      "modelId": 20,
      "sort": 2,
      "title": "姓名",
      "name": "name",
      "fieldType": "text",
      "fieldData": [],
      "isRequired": 0,
      "isSearch": 0,
      "isList": 0,
      "placeholder": null,
      "listTemplate": null,
      "showTemplate": null,
      "maxLength": 100
    }
  ]
}

列表视图

内置变量 cat

当前栏目信息,数据结构结构参考 栏目Cat

内置变量 catChildren

当前栏目的子栏目,为栏目Cat数组,数据结构参考 栏目Cat

内置变量 catRoot

当前栏目的根级栏目视图,数据结构结构参考 栏目Cat

内置变量 catRootChildren

当前栏目的根级栏目视图子栏目,为栏目Cat数组,数据结构参考 栏目Cat

内置变量 catChain

当前栏目从根栏目到当前栏目的链路,为栏目Cat数组,数据结构参考 栏目Cat

内置变量 records

当前栏目数据列表,为ContentSimple数组,数据结构参考 ContentSimple

内置变量 pageHtml

当前列表分页HTML数据

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

详情视图

内置变量 record

当前显示内容,数据结构参考 内容Content

内置变量 cat

当前栏目信息,数据结构结构参考 栏目Cat

内置变量 catRoot

当前栏目的根级栏目视图,数据结构结构参考 栏目Cat

内置变量 catRootChildren

当前栏目的根级栏目视图子栏目,为栏目Cat数组,数据结构参考 栏目Cat

内置变量 catChain

当前栏目从根栏目到当前栏目的链路,为Cat数组,数据结构参考 Cat

内置变量 model

当前显示内容的模型,数据结构参考 模型Model

单页视图

内置变量 record

当前显示内容,数据结构参考 内容Content

内置变量 cat

当前栏目信息,数据结构结构参考 栏目Cat

内置变量 catRoot

当前栏目的根级栏目视图,数据结构结构参考 栏目Cat

内置变量 catRootChildren

当前栏目的根级栏目视图子栏目,为栏目Cat数组,数据结构参考 栏目Cat

内置变量 catChain

当前栏目从根栏目到当前栏目的链路,为栏目Cat数组,数据结构参考 栏目Cat

表单视图

内置变量 cat

当前栏目信息,数据结构结构参考 栏目Cat

内置变量 catRoot

当前栏目的根级栏目视图,数据结构结构参考 栏目Cat

内置变量 catRootChildren

当前栏目的根级栏目视图子栏目,为栏目Cat数组,数据结构参考 栏目Cat

内置变量 catChain

当前栏目从根栏目到当前栏目的链路,为Cat数组,数据结构参考 Cat

内置变量 model

当前显示内容的模型,数据结构参考 模型Model

CMS操作方法

栏目内容 MCms::paginateCatByUrl

根据栏目URL获取列表

\MCms::paginateCatByUrl($catUrl, $page = 1, $pageSize = 10, $option = [])

栏目内容 MCms::paginateCat

根据栏目ID获取列表

\MCms::paginateCat($catId, $page = 1, $pageSize = 10, $option = [])

栏目最近内容 MCms::latestCat

根据栏目ID获取最近记录

\MCms::latestCat($catId, $limit = 10)

栏目上一条内容 MCms::prevOne

获取上一条记录

\MCms::prevOne($catId, $recordId)

栏目下一条内容 MCms::nextOne

获取下一条记录

\MCms::nextOne($catId, $recordId)

友情链接 MPartner::all

按照位置获取所有友情链接数据

\MPartner::all($position = 'home');

导航 MNav:all

按照位置获取所有导航数据

\MNav::all($position = 'home');

轮播 MBanner:all

按照位置获取所有轮播数据

\MPartner::all($position = 'home')

演示数据

一个优秀的模板需要携带完整的演示数据,这样可以方便快捷的让用户快速的看到主题最终效果。

演示数据开启

CMS集成了演示数据初始化填充功能,只需要简单的配置即可完成。

在对应的模板设置页面(如 功能设置 → 模板设置 → CMS开发测试模板),用户点击初始化演示数据,勾选需要初始化的数据,即可完成数据填充。

演示1

演示2

演示数据参考配置

数据参考配置位于模块根目录下的,如 module/CmsThemeMyTest/demo_data.php

<?php
return [
    'tables' => [
        'banner' => [
            'where' => [
                'position' => 'home',
            ],
            'records' => [
                [
                    'type' => \Module\Banner\Type\BannerType::IMAGE,
                    'image' => 'vendor/CmsThemeMyTest/image/banner-1.jpg',
                ],
                // ...
            ]
        ],
        'news' => [
            'records' => [
                [
                    'title' => '演示新闻标题',
                    'cover' => 'vendor/CmsThemeMyTest/image/news-1.jpg',
                    'summary' => '演示新闻描述',
                    '_data' => [
                        'content' => '<p>演示新闻内容</p>',
                    ]
                ],
                // ...
            ]
        ],
        'product' => [
            'records' => [
                [
                    'title' => '演示产品',
                    'cover' => 'vendor/CmsThemeMyTest/image/product-1.jpg',
                ],
                // ...
            ]
        ],
        'cases' => [
            'records' => [
                [
                    'title' => '演示案例',
                    'cover' => 'vendor/CmsThemeMyTest/image/cases-1.jpg',
                ],
                // ...
            ]
        ],
        'job' => [
            'records' => [
                [
                    'title' => '演示招聘',
                    '_data' => [
                        'content' => '<p>演示招聘说明</p>',
                    ]
                ]
            ]
        ],
        'nav' => [
            'where' => [
                'position' => 'head',
            ],
            'records' => [
                [
                    'name' => '产品',
                    'link' => modstart_web_url('product'),
                ],
                // ...
            ],
        ],
        'info' => [
            'records' => [
                'Cms_HomeInfoImage' => 'vendor/CmsThemeMyTest/image/about.jpg',
                'Cms_HomeInfoTitle' => '演示公司名称',
                'Cms_HomeInfoContent' => '<p>演示公司介绍。</p>',
            ]
        ],
    ],
];
本作品采用 《CC 协议》,转载必须注明作者和本文链接
ModStart开源
0 人点赞
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!
ModStart开源
未填写
文章
99
粉丝
41
喜欢
141
收藏
169
排名:320
访问:3.0 万
私信
所有博文
博客标签
cms
1
ModStart
1
ModStartCMS
1
社区赞助商
成为赞助商

深圳SEO优化公司恩施关键词排名推荐海西关键词排名包年推广推荐醴陵至尊标王哪家好三亚网站seo优化宣城至尊标王公司防城港网站定制推荐上饶网站改版公司遂宁企业网站改版兴安盟百度seo价格青岛关键词按天扣费多少钱烟台网站设计模板多少钱天门建站价格张掖seo排名固原网站seo优化哪家好临汾seo排名报价南昌网站设计公司海南百搜标王多少钱霍邱建设网站推荐光明模板网站建设哪家好邵阳网站优化按天计费多少钱抚顺外贸网站设计公司怀化网页制作开封网站优化按天计费铁岭网站定制推荐雅安阿里店铺运营宝安百度竞价价格霍邱网站优化排名报价大运网站开发多少钱海南SEO按天收费营口网站优化按天计费推荐歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化