petercoles/themes

Laravel 的意见型主题管理器

0.2.1 2016-10-04 19:52 UTC

This package is auto-updated.

Last update: 2024-09-17 19:15:57 UTC


README

SensioLabsInsight Scrutinizer Code Quality Code Coverage Build Status License

介绍

这绝对不是为 Laravel 提供的唯一主题管理包(见下文)。每个都有自己的方法。这个包的独特之处在于它的无编码方法。相反,您只需安装它,设置配置规则,然后包将使用这些规则来确定要使用哪个主题。

您可能还想考虑的其他 Laravel 主题包

安装

在命令行运行

composer require petercoles/themes

然后,将服务提供者添加到 config/app.php 文件中的 providers 条目

    'providers' => [
        // ...
        PeterColes\Themes\ThemesServiceProvider::class,
        // ...
    ],

配置

使用以下命令从命令行发布配置文件

php artisan vendor:publish

或者,如果您只想发布此包

php artisan vendor:publish --provider="PeterColes\Themes\ThemesServiceProvider"

生成的主题配置文件只有一个默认设置,将不会触及您的站点。要开始控制使用的主题,请参阅下一节 ...

创建您的主题

默认情况下,此包将继续在 Laravel 的默认位置使用您的视图和资源。要开始使用基于上下文的替代方案覆盖这些默认值,请首先在 Laravel 资源文件夹同一级别创建一个主题文件夹。在其内部创建一个或多个主题的文件夹。

例如

.
|-- app
|-- ...
|-- resources
|-- storage
|-- themes
    |-- myFirstTheme
    |-- mySecondTheme
|--vendor

在每个主题中放置您的配置、资产和视图文件。例如

.
|-- themes
    |-- myFirstTheme
        |-- config
        |-- resources
            |-- assets
                |-- img
                |-- js
                |-- sass
            |-- views

配置文件

配置文件将被自动检测和加载。它们将 完全替换 正常配置文件夹中相同名称的任何文件,而不是覆盖个别设置。

资产

没有自动管理资产。建议使用 Elixir,但可以使用任何类似的构建系统来处理、准备并将它们放置在您站点的公共文件夹中。为了避免冲突,建议将它们放置在与主题文件夹名称相同的子文件夹中,例如

.
|-- public
    |-- myFirstTheme
        |-- img
        |-- js
        |-- sass

这样做的话,那么主题资产() 和 secure_theme_assets() 辅助函数可用于将资产的链接插入到视图中。例如,以下将自动检测正在使用的主题,并将指向适当的脚本文件

theme_assets('app.js') // will generate "http://www.example.com/theme-name/app.js" 

视图

视图将自动检测。如果您的路由、控制器或另一个视图需要存在于您的主题中的视图,则将使用该版本,否则它将按正常视图层次结构查找视图,如果没有在那里找到,则抛出正常异常。所以如果当前主题是 "foo",则 view('pages.about') 首先查找 themes/foo/views/pages/about.blade.php,如果没有找到,则查找 resources/views/pages/about.blade.php

...还有一件事

还有一个辅助函数 themes_path(),用于构建主题文件夹的文件路径,并且像 Laravel 中的其他路径辅助函数一样,将路径添加到任何接收到的字符串参数之前。

为主题选择设置规则

要控制主题的选择,您可以将规则添加到主题配置文件。这些规则遵循与 Laravel 验证规则相同的语法。包将依次处理每套规则,如果找到匹配项,则将主题设置为给定的值。例如,主题配置

<?php
return [
    [
        'match' => 'subdomain:admin',
        'theme' => 'adminV1'
    ],
    [
        'theme' => 'siteV2'
    ]

];

将导致任何具有 "admin" 子域的路由使用名为 "adminV1" 的模板。所有其他路由将使用模板 "siteV2"。

在单个匹配状态中,甚至正常情况下,也可以使用多个标准,每个标准由管道 ("|") 分隔。例如

[
    'match' => 'domain:www.client.com|dates:2016-02-14',
    'theme' => 'valentines'
],

匹配器从配置文件的最顶部开始工作,并且第一个满足所有匹配标准的集是获胜的主题。

如果没有为某个主题提供匹配标准,则视为匹配成功(见最后一个示例中倒数第二个示例的默认值)。

空白字符会自动从匹配语句中删除,因此您可以随意布局它们...

[
    'match' => '
        domain: www.anotherclient.com |
        dates: 2016-12-14, 2016-12-26
    ',
    'theme' => 'xmas'
],

目前支持的匹配器包括

日期

规则必须至少接收一个日期,并将服务器时间与该日期进行匹配。如果收到第二个日期,如上面的示例所示,则将其视为一个包含日期范围的边界。日期必须使用国际格式。这可能会在以后的版本中变得更加灵活。

域名

如果完全合格域名(FQDN)与提供的域名完全相同,则规则将匹配,因此子域或顶级域(TLD)的更改将导致匹配失败。如果您在开发、测试和生产环境中使用不同的域名,您可能希望在一个匹配组中包含多个域名规则。请注意,这种行为在未来的版本中可能会变得更加友好。

环境

规则将匹配给定的参数与Laravel的APP_ENV全局变量的值。这通常用作辅助标准,以防止开发中的主题泄露到生产环境中。

HTTP方案

允许HTTP路由接收与HTTPS路由不同的主题。规则以http或https作为其参数。

子域

此规则允许仅匹配子域。

URL段

规则目前接收单个参数,并将其与路由的第一个段进行比较。这也是那些计划进行扩展和更多灵活性的一种,因此请谨慎使用。

路线图

计划添加更多匹配器,包括

  • 国家
  • 语言
  • 查询参数

一些现有的匹配器将进行重新设计,以使其更加友好。建议您不要将项目绑定到dev-master,而是针对特定的分支。重大更改将在(目前尚不存在的)更改日志中清楚地说明,并且该包将使用语义版本控制,因此针对"^0.1"或"^0"等标签不会使您面临API更改的风险。

贡献

欢迎贡献和建议。代码应放置在功能分支上,并包含测试。