Skip to content

设计样式#

在 XF2 中,我们引入了一种全新的构建和编辑样式的方式,称为“设计模式”。设计模式是一组 CLI 工具集合,允许您直接在文件系统中修改样式内的特定模板。它还会输出关于样式属性的各种元数据和信息,这对版本控制和团队协作非常有用。

启用设计模式#

启用设计模式的第一步是在 config.php 中进行配置:

src/config.php
$config['designer']['enabled'] = true;

您还可以选择为设计模式文件指定不同的文件系统路径。以下代码展示了默认位置。若要更改路径,请将以下内容添加到 config.php 并修改相应路径:

src/config.php
$config['designer']['basePath'] = 'src/styles';

为样式启用设计模式#

每个样式需要单独启用设计模式。通过 CLI 工具,指定样式的 ID 并选择一个“设计模式 ID”即可启用:

终端
php cmd.php xf-designer:enable [style_id] [designer_mode_id]

designer_mode_id 是后续与设计模式相关命令中使用的标识符。启用后,当前样式的已修改组件将被导出到 [basePath]/[designer_mode_id] 目录。

如果目标目录已存在,系统会询问是覆盖目录中的内容,还是用目录内容覆盖当前样式。

为样式禁用设计模式#

禁用设计模式只需运行以下 CLI 命令:

终端
php cmd.php xf-designer:disable [designer_mode_id]

默认会保留文件系统中的设计模式输出副本。若需清除数据,可使用 --clear 选项:

终端
php cmd.php xf-designer:disable [designer_mode_id] --clear

输出内容与位置#

需注意:XF 中的样式仅包含该样式中被修改的部分。因此,设计模式只会输出该样式中被修改的内容,父样式中修改的模板和样式属性不会被输出。

模板#

模板将输出到 [basePath]/[designer_mode_id]/templates 目录。该目录下可能包含按类型(如 admin、email、public)分类的子目录。

模板以 HTML 格式输出,可直接在文件系统中编辑。文件系统的修改会在页面加载模板时自动导入并编译。同理,删除文件系统中的模板可还原修改(如果之前被修改过)。

样式属性与分组#

样式属性和分组分别输出到 [basePath]/[designer_mode_id]/style_properties[basePath]/[designer_mode_id]/style_property_groups 目录。它们以 JSON 格式导出,便于通过版本控制系统跟踪变更。

不建议直接修改这些文件,因为它们的变更不会像模板那样自动导入。

修改特定模板#

需注意:样式仅包含其内部修改的组件。启用设计模式后,文件系统也只会包含该样式中被修改的组件,无法输出每个模板和样式属性的完整生效版本。

要在样式中标记模板为已修改,可通过 Admin CP 按常规方式编辑。如果设计模式已启用,Admin CP 中修改的模板和样式属性会自动写入文件系统。但更便捷的方式是使用 CLI 命令“触碰”模板:

终端
php cmd.php xf-designer:touch-template [designer_mode_id] [模板类型:模板标题]

只要指定模板存在于父样式或主样式中,它就会被复制到当前样式并输出到文件系统。之后可直接在文件系统中修改模板。

若要创建完全自定义的模板(在样式树中不存在于其他任何样式),可使用 --custom 选项:

终端
php cmd.php xf-designer:touch-template [designer_mode_id] [模板类型:模板标题] --custom

其他实用命令#

以下是与设计模式相关的其他实用命令:

从数据库导出#

启用设计模式时此命令通常自动运行。如需用数据库当前内容覆盖文件系统副本,可运行:

终端
php cmd.php xf-designer:export [designer_mode_id]

也可仅导出特定类型,例如 xf-designer:export-templates

从文件系统导入#

此命令会用文件系统内容覆盖样式的数据库副本:

终端
php cmd.php xf-designer:import [designer_mode_id]

也可仅导入特定类型,例如 xf-designer:import-templates

同步模板#

此命令类似于导入模板,但不会覆盖全部内容,仅当元数据变更时导入并重新编译模板,同时更新版本号:

终端
php cmd.php xf-designer:sync-templates [designer_mode_id]

还原模板#

此命令用于还原模板,即从当前样式中删除自定义版本:

终端
php cmd.php xf-designer:revert-template [designer_mode_id] [模板类型:模板标题]

从文件系统删除模板也会触发还原操作。