tatter / themes
CodeIgniter 4 的轻量级主题管理器
资助包维护!
tattersoftware
paypal.me/tatter
Requires
- php: ^7.3 || ^8.0
- tatter/assets: ^3.0
- tatter/preferences: ^1.0
Requires (Dev)
- codeigniter4/codeigniter4: dev-develop
- tatter/imposter: ^1.0
- tatter/tools: ^1.15
This package is auto-updated.
Last update: 2024-09-18 13:37:04 UTC
README
CodeIgniter 4 的轻量级主题管理器
快速开始
- 使用 Composer 安装:
> composer require tatter/themes
- 更新数据库:
> php spark migrate -all
- 初始化数据库:
> php spark db:seed "Tatter\Themes\Database\Seeds\ThemeSeeder"
- 将主题文件放在 public/assets/themes/default
- 将主题文件添加到你的页面中,例如:
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
严重依赖于以下库;请确保您熟悉它们的要求和安装过程。
- Tatter\Assets 处理资产发现和 HTML 标签注入
- Tatter\Preferences 允许用户或会话特定的主题更改
- CodeIgniter\Settings (
Preferences
的依赖项)加载和存储主题首选项到持久存储
如果您计划允许用户更改自己的主题,则还需要包含一个提供 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引导您加载主题。
选择主题
当前主题的确定方式如下
- 是否有已认证的用户?检查该用户的主题偏好
Preferences
- 没有已认证的用户?检查Session中的主题偏好
- 以上都不是?检查
Settings
中的持久化主题 - 以上都不是?回退到配置文件:
config('Preferences')->theme
(默认值“默认”)
同样,您可以使用相应的函数设置当前主题(按优先级顺序)
preference('theme', $themeName)
(带有已认证用户)preference('theme', $themeName)
(没有已认证用户)setting('Preferences.theme, $themeName)
- 创建或编辑
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:list
和themes:add
,以简化在数据库中处理主题的工作。
助手
当您应用ThemeFilter
时,自动加载主题助手,但如果您需要手动加载它,请在控制器或启动配置中包含它:helper('themes')
。
这提供了一个助手函数来返回当前主题作为Theme
实体
$theme = theme(); echo 'Current theme is ' . $theme->name . ': "' . $theme->description . '"';