乐趣区

关于php:ModStart开发者文档CMS主题教程

主题开发教程

模板主题是一个模块,以 CmsTheme 结尾,如 CmsThemeBlueCmsThemeGreen 等。

主题模块构造

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                               → 演示数据初始化

视图数据实体

栏目 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 操作方法

列表 listCatByUrl

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

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

返回数据结构

[
    {
        "id": 1,
        "title": "xxx",
        // ...
    },
    // ...
]

列表 listCat

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

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

返回数据结构

[
    {
        "id": 1,
        "title": "xxx",
        // ...
    },
    // ...
]

列表 pageCat

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

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

返回数据结构

{
    "total": 10,
    "records": [
        {
            "id": 1,
            "title": "xxx",
            // ...
        },
        // ...
    ]
}

列表 pageCatByUrl

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

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

返回数据结构

{
    "total": 10,
    "records": [
        {
            "id": 1,
            "title": "xxx",
            // ...
        },
        // ...
    ]
}

列表 pageCatWithData

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

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

返回数据结构

{
    "total": 10,
    "records": [
        {
            "id": 1,
            "title": "xxx",
            // ...
        },
        // ...
    ]
}

列表 pageCatWithDataByUrl

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

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

返回数据结构

{
    "total": 10,
    "records": [
        {
            "id": 1,
            "title": "xxx",
            // ...
        },
        // ...
    ]
}

列表 pageCatsWithData

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

\MCms::pageCatsWithData($catIds, $page = 1, $pageSize = 10, $option = [])

返回数据结构

{
    "total": 10,
    "records": [
        {
            "id": 1,
            "title": "xxx",
            // ...
        },
        // ...
    ]
}

列表 pageCatWithDataByUrl

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

\MCms::pageCatsWithDataByUrl($catUrls, $page = 1, $pageSize = 10, $option = [])

返回数据结构

{
    "total": 10,
    "records": [
        {
            "id": 1,
            "title": "xxx",
            // ...
        },
        // ...
    ]
}

列表 latestCat

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

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

返回数据结构

[
    {
        "id": 1,
        "title": "xxx",
        // ...
    },
    // ...
]

列表条件检索

列表带查问条件时,须要自定义 $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'],
    ]
];

栏目上一条内容 prevOne

获取上一条记录

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

栏目下一条内容 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>',
            ]
        ],
    ],
];

罕用问题

页面题目、关键词、形容调用

@section('pageTitle')页面题目 @endsection
@section('pageKeywords')页面关键词 @endsection
@section('pageDescription')页面关键词 @endsection
退出移动版