tatter/themes

CodeIgniter 4 的轻量级主题管理器

v2.0.0-rc.2 2021-12-02 17:42 UTC

README

CodeIgniter 4 的轻量级主题管理器

Coverage Status

快速开始

  1. 使用 Composer 安装: > composer require tatter/themes
  2. 更新数据库: > php spark migrate -all
  3. 初始化数据库: > php spark db:seed "Tatter\Themes\Database\Seeds\ThemeSeeder"
  4. 将主题文件放在 public/assets/themes/default
  5. 将主题文件添加到你的页面中,例如: echo view('\Tatter\Themes\Views\css)

特性

为 CodeIgniter 4 提供方便的主题文件组织和显示

安装

通过 Composer 轻松安装以利用 CodeIgniter 4 的自动加载功能,并始终保持最新

  • > composer require tatter/themes

或者,通过下载源文件并添加到 app/Config/Autoload.php 中来手动安装。

文件下载并包含在自动加载中后,运行任何库迁移以确保数据库设置正确

  • > php spark migrate -all

您还需要使用默认主题来初始化数据库

  • > php spark db:seed "Tatter\Themes\Database\Seeds\ThemeSeeder"

依赖

Themes 严重依赖于以下库;请确保您熟悉它们的要求和安装过程。

如果您计划允许用户更改自己的主题,则还需要包含一个提供 codeigniter4/authentication-implementation 的身份验证库(无需其他配置)。

有关 CodeIgniter 身份验证的更多信息,请参阅 用户指南

用法

此库假设您已经拥有主题使用的资产文件(CSS 和 JavaScript)。

主题通过数据库管理,并使用过滤器为您应用程序配置。

管理主题

所有主题文件都放在与 Tatter\Assets 中的配置属性 $directory 相对的目录中(默认为 public/assets/),由主题的 path 定义。例如。

  • public/assets/themes/default/styles.css
  • public/assets/themes/default/script.js
  • public/assets/themes/dark/header.css
  • public/assets/themes/dark/fonts.css
  • public/assets/themes/perky/Perky.CSS

每个主题都是数据库 themes 表中的一个条目,具有以下属性

  • name:用于主题查找和显示的短唯一名称,例如 "Aquatic Journey"
  • path:从 Assets 目录到公开可用的主题文件的路径,例如 "themes/aquatic/"
  • description(可选):此主题功能的简要描述,主要用于允许用户选择,例如 "一个深色调和液体边界的蓝色主题"
  • dark:此主题是否为暗色(浅色文字,深色背景),例如true

您可以使用提供的模型(Tatter\Themes\Models\ThemeModel)创建新的主题或返回实体(Tatter\Themes\Entities\Theme)。库中包含ThemeSeeder,它将在public/assets/themes/default/为您创建一个初始的“默认”主题。还有themes:add Spark命令,通过CLI引导您加载主题。

选择主题

当前主题的确定方式如下

  1. 是否有已认证的用户?检查该用户的主题偏好Preferences
  2. 没有已认证的用户?检查Session中的主题偏好
  3. 以上都不是?检查Settings中的持久化主题
  4. 以上都不是?回退到配置文件:config('Preferences')->theme(默认值“默认”)

同样,您可以使用相应的函数设置当前主题(按优先级顺序)

  1. preference('theme', $themeName)(带有已认证用户)
  2. preference('theme', $themeName)(没有已认证用户)
  3. setting('Preferences.theme, $themeName)
  4. 创建或编辑app/Config/Preferences.php并添加:public $theme = 'theme_name';

为了协助方法1和2,此库提供了一个小模块来显示表单并处理用户输入。您可以使用表单视图将表单添加到现有页面

<div class="form">
	<?= view('Tatter\Themes\Views\form') ?>
</div>

...或将预配置的<select>字段添加到现有表单

<form name="user-settings" action="<?= site_url('users/settings') ?>" method="post">
	Display name:
	<input type="text" name="name">

	Page theme:
	<?= view('Tatter\Themes\Views\select') ?>

	<input type="submit" value="submit">
</form>

您可以将这些附加参数传递给视图

  • $class:应用于<select>字段的CSS类。默认:
  • $auto:表单是否应在选择字段更改时立即提交。默认:true
  • $selected:在选择字段中显示为当前选择的主题:默认:当前主题

应用主题

一旦您的文件就绪并且主题已在数据库中定义,您需要使用过滤器将主题应用于您的应用程序路由。此库在安装时为您激活了ThemesFilter(假设已启用模块发现,这是默认设置),别名为themes。在简单情况下,您将通过app/Config/Filters.php将过滤器应用于您的整个网站

    /**
     * List of filter aliases that are always
     * applied before and after every request.
     *
     * @var array
     */
    public $globals = [
        'before' => [
            // 'honeypot',
            // 'csrf',
            // 'invalidchars',
        ],
        'after' => [
            'themes',
        ],
    ];

对于更细致的使用,将过滤器传递到您的路由定义中app/Config/Routes.php

$routes->add('shop/(:segment)', 'ShopController::index', ['filter' => 'themes']);

ThemesFilter将默认应用当前主题,但您可以通过指定名称来指定主题或主题以使用它们

$routes->add('heroes/(:segment)', 'HeroController::$1', ['filter' => 'themes:Heroic']);

其他组件

CLI

此库包含两个CLI命令,themes:listthemes:add,以简化在数据库中处理主题的工作。

助手

当您应用ThemeFilter时,自动加载主题助手,但如果您需要手动加载它,请在控制器或启动配置中包含它:helper('themes')

这提供了一个助手函数来返回当前主题作为Theme实体

$theme = theme();
echo 'Current theme is ' . $theme->name . ': "' . $theme->description . '"';