关于lavarel:ModStartCMS万能建站系统主题开发教程

62次阅读

共计 7238 个字符,预计需要花费 19 分钟才能阅读完成。

主题开发教程

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 开发测试模板),用户点击初始化演示数据,勾选须要初始化的数据,即可实现数据填充。

演示数据参考配置

数据参考配置位于模块根目录下的,如 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>',
            ]
        ],
    ],
];

正文完
 0