mercator/wn-themeupdater-plugin

Winter CMS 主题更新插件

0.0.2-beta 2021-05-11 05:02 UTC

This package is auto-updated.

Last update: 2024-09-11 15:03:46 UTC


README

这是一个支持主题半自动更新的 WinterCMS 插件。

为了本插件,术语 主主题 指的是将用于一个或多个网站的主题模板。此模板主题位于 WinterCMS 的主题目录中。

请注意,使用 composer 安装的主题不会更新。如果您想将主主题重新安装为最新版本,请使用

composer require <<package name>>

代替。

术语 子主题 指的是 WinterCMS 用于显示网站内容的主题。主题再次位于 WinterCMS 的主题目录中。

安装

使用 Composer 通过执行以下命令安装插件

composer require mercator/wn-themeupdater-plugin

Artisan 命令

php artisan theme:copy master child

命令 php artisan theme:copy master child 会复制主题 master 并将其命名为 child。完成后,它将执行位于 master 主题中的脚本 themekeeping/install.php,允许修改创建的 child 主题。请参阅示例,了解一组预定义命令。

php artisan theme:update master child

命令 php artisan theme:update master child 使用 master 主题更新 child 主题中定义的部分。它是通过调用位于 child 主题中的脚本 themekeeping/install.php 来实现的。请参阅示例,了解一组预定义命令。

为自动更新准备您的主题

在主主题中,创建一个名为 themekeeping 的目录(主题维护)。此目录必须包含以下文件之一或两者

  • install.php,在克隆主主题后作为 Artisan copy 命令的一部分调用。
  • update.php,在从主主题更新子主题时作为 Artisan copy 调用。请注意,此文件最初(一次)从主主题复制到子主题。子主题中的 update.php 将被调用。

命令

$updater->backup(location)

location 的子主题备份到临时位置。 location 可以是一个单独的文件或目录。《location》是相对于客户端根目录的,例如,$updater->backup("asssts")备份资产目录。

$updater->restore(location)

location 中指定的目录或文件恢复到子主题。同样,location 是相对于客户端根目录的,例如,$updater->backup("asssts")备份资产目录。

$updater->remove(location)

从子主题中删除文件或目录。

$updater->replace(location)

在删除子主题中的文件或目录后,使用主主题替换子主题中的文件或目录。

$updater->mastercopy(from, to )

从主主题(from)复制文件或目录到子主题(to)。现有文件将被覆盖。

$updater->childcopy(from, to )

在子主题中本地复制文件或目录。现有文件将被覆盖。例如,如果主主题在 assets 中有一个需要用户适配的配置文件,您可以按以下方式复制

childcopy("assets/config.yaml.temaplate", "assets/config.yaml")

当然,您可以在 install.phpupdate.php 中使用任何其他 PHP 命令。以下两个函数在此上下文中可能很有用

$updater->master_path()

返回主根目录的完全限定名称。

$updater->child_path()

返回子根目录的完全限定名称。

file_exists_child(location)

如果文件或目录存在于子主题中,则返回 true。否则返回 false。

file_exists_master(location)

如果文件或目录存在于主主题中,则返回 true。否则返回 false。

示例

如果您的主题遵循典型的实现,您通常只想更新资源和 theme.yaml。那么 update.php 可能如下所示

<?php
$updater->replace("assets");
$updater->replace("theme.yaml");

要更新,请在控制台中调用以下命令

php artisan theme:copy master child

如果您想从主主题更新布局,但保留现有的 default.htm,请先备份并在之后恢复

<?php
$updater->backup("layouts/default.htm");
$updater->replace("layouts");
$updater->restore("layouts/default.htm");
$updater->replace("assets");
$updater->replace("theme.yaml");

如果您需要调用特定的函数 yourFunction 来配置在复制后的主题,您的 install.php 可能如下所示

<?php
$res = yourFunction($updater->child_path()); // call yourFunction and pass child path

再一次

要使一切运行起来

  • 创建一个主主题(或使用 composer 安装它)
  • 创建 themekeeping/install.php
  • 创建 themekeeping/update.php
  • 将您的主题上传到 GitHub(如果您愿意,也可以上传到 composer)
  • 在您希望使用的主网站上安装主主题(通过 GitHub 或 composer),例如,让我们称它为 mymaster
  • 通过运行 artisan theme:copy mymaster mychid 创建您在网站中想要使用的子主题(这将从一个名为 mymaster 的主主题创建一个名为 mychild 的主题)
  • 每次您更新主主题时,请下载您正在运行的每个网站上的主题
  • 在每台机器上运行 artisan theme:update mymaster mychild,您就完成了