# 系统主题 主题模块是特殊的功能模块,所有功能基础请参考 [普通模块开发](/manual/module.html)。 ## 主题模块开发教程 模板主题是一个模块,以 `CmsTheme` 或者 `BlogTheme` 开头,如 `CmsThemeBlue`、`CmsThemeGreen`、`BlogThemeXxx` 等。 ## 主题模块结构 ``` 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 → 演示数据初始化 ``` 系统默认主题为 `default` 可以通过 `modstart_config('siteTemplate')` 获取系统当前主题。 - 系统视图根目录:`resources/views/theme/` - 主题模块的视图根目录通常位于:`module/Xxx/View/` ## 如何开发主题模块 第一步,实现一个主题模块提供者 ```php 如,Xxx 模块中调用了 `$this->view('news.list')` 来渲染视图,如果需要重新覆盖这个页面,复制当前页面视图文件(通常位于 `module/Xxx/View/pc/news/list.blade.php`)放到 `module/MyTestTheme/View/pc/news/list.blade.php` 重新开发样式,如果用户启用的 MyTestTheme 模块主题,系统将会使用已开发的新样式,未覆盖的页面将会使用老的样式。 ## 视图渲染查找顺序 主题的视图文件( `.blade.php` 结尾)可能出现在多个位置,系统在渲染视图的时候会按照以下优先级查找直到匹配成功: 1. 启用主题自定义视图目录:如 `resources/views/theme/<主题>` 2. 当前主题主题模块视图目录:如 `module/<主题模块>/View`(这里假设主题模块的主题根目录为 `module/<主题模块>/View` ) 3. 系统默认视图目录:如 `resources/views/theme/default` 3. 当前模块视图目录:如 `module/Xxx/View` > 举例说明: > 当前系统启用 myTest 主题模块,主题根目录位于 `module/MyTest/View`,在 Xxx 模块中调用 `$this->view('test.list.news')` > 系统会按照如下顺序进行视图文件的查找,优先使用第一个匹配到的文件: > > 1. `resources/views/theme/myTest/pc/test/list/news.blade.php` > 2. `module/MyTest/View/test/list/news.blade.php` > 3. `resources/views/theme/default/pc/test/list/news.blade.php` > 4. `module/Xxx/View/pc/test/list/news.blade.php` ## 自适应的设备视图 ModStart的View根据访问设备的不同,会启用不同的视图文件,具体逻辑可参照 `\ModStart\Core\View\ResponsiveViewTrait` 中的逻辑。 - PC端使用 `pc/` 中的视图 - 手机端使用 `m/` 中的视图 - 当手机端视图不存在时,会自动降级使用 `pc/` 中的视图 ## 定义一个视图例子 ```php @extends($_viewFrame) @section('pageTitleMain')我的视图标题@endsection @section('bodyContent')
演示新闻内容
', ] ], // ... ] ], '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' => '演示招聘说明
', ] ] ] ], 'nav' => [ 'where' => [ 'position' => 'head', ], 'records' => [ [ 'name' => '产品', 'link' => modstart_web_url('product'), ], // ... ], ], 'info' => [ 'records' => [ 'Cms_HomeInfoImage' => 'vendor/CmsThemeMyTest/image/about.jpg', 'Cms_HomeInfoTitle' => '演示公司名称', 'Cms_HomeInfoContent' => '演示公司介绍。
', ] ], ], ]; ```