创建 DXPR Theme 子主题 (Drupal 11).

Learn DXPR ThemeEen subthema maken

DXPR Theme 通过设置面板更改颜色、字体、页眉、间距和布局,因此大多数网站连一行 CSS 都不需要写。子主题是为其余需求准备的:您自己的样式表、模板覆盖、额外的库,或随代码发布的调色板。子主题继承 DXPR Theme 的所有样式表和模板,拥有自己的设置,更新 DXPR Theme 不会影响它。

本指南适用于 Drupal 10.3 和 Drupal 11 上的 DXPR Theme 8.2。其使用的入门套件随主题一起提供,位于dxpr_theme/dxpr_theme_STARTERKIT;不使用 Drupal 核心的generate-theme命令,因为 DXPR Theme 自带入门套件和命令。

开始之前

添加 DXPR Theme 并启用其辅助模块(Drupal 只有在完成这一步后才会安装该主题):

composer require drupal/dxpr_theme
drush en dxpr_theme_helper

1. 从入门套件生成子主题

最快的方式是使用 DXPR Theme Helper 提供的 Drush 命令。在项目根目录运行它;它会验证机器名,将入门套件复制到themes/custom并为您重命名所有内容:

drush dxt:subtheme:create northwind_theme --theme-name="Northwind Theme"

不带参数时,该命令会询问这两个名称。不使用 Drush 时,请使用主题自带的脚本:进入web/themes/contrib/dxpr_theme,用chmod +x scripts/*将脚本设为可执行(只需执行一次),运行./scripts/create_subtheme.sh,并在提示时输入显示名称和机器名。该脚本只能在该文件夹中运行。

无论哪种方式,您都会得到web/themes/custom/northwind_theme,入门套件的文件和配置已重命名为您的机器名,info 和 schema 文件中的THEMETITLE占位符已被替换。

2. 启用子主题并保存一次设置

  1. 进入外观,为您的子主题选择安装并设为默认。
  2. 打开子主题的设置,不做任何更改,直接按保存配置。

首次保存会为新主题生成设置样式表。子主题从入门套件的默认设置开始,而不是从您在 DXPR Theme 中所做的设置开始。要沿用这些设置,请从 DXPR Theme 导出它们并导入子主题:

drush dxt:config:export --theme=dxpr_theme --file=theme.yml
drush dxt:config:import theme.yml --theme=northwind_theme

从此面板的操作与 DXPR Theme 完全一致:颜色、排版、页眉、页脚和间距都属于子主题。

保持子主题的区域与基础主题一致。入门套件声明了与 DXPR Theme 相同的 14 个区域,DXPR Theme Helper 在内容上的隐藏区域选项按名称引用它们。

3. 入门套件包含的内容

  • northwind_theme.info.yml:base theme: dxpr_theme、区域,以及一个加载您样式表的库 global-styling。注释掉的 libraries-override 块列出了您最可能关闭的 DXPR Theme 库,从 dxpr_theme/bootstrap-5 到 dxpr_theme/helper-classes。
  • css/dxpr_theme_subtheme.css:在主题自身样式表之后加载到每个页面。您的 CSS 写在这里。
  • templates/:除 README 外为空。要覆盖某个模板,请将其从 dxpr_theme/templates 复制到这里。
  • config/install 和 config/schema:已重命名为您的主题的默认设置及其架构。
  • color-settings.json:您自己命名的调色板,显示在配色方案列表中内置方案的旁边。
  • logo.svg、favicon.ico、screenshot.png:替换为您的文件。

4. 编写跟随设置的 CSS

DXPR Theme 将设置写入 CSS 变量:--dxt-color-*用于调色板,--dxt-setting-*用于排版、间距和布局,并将它们映射到 Bootstrap 的--bs-*变量。在样式表中使用这些变量而不是固定值,当有人更改颜色或字体时,您的 CSS 仍会跟随面板。

/* css/dxpr_theme_subtheme.css */
.card {
  border-radius: 1rem;
  border-color: color-mix(in srgb, var(--dxt-color-base) 20%, transparent);
}

.dxpr-theme-footer h2 {
  font-family: var(--dxt-setting-headings-font-face);
  color: var(--dxt-color-footertext);
}

基础色、强调色、文本、标题、链接、卡片和页脚都有对应的变量。完整列表在主题 README 的CSS 自定义属性(变量)参考下。

5. 覆盖模板和库

将要修改的模板从themes/contrib/dxpr_theme/templates复制到子主题的templates文件夹,保持文件名不变,编辑它,并清空缓存。Drupal 会优先使用子主题的副本。

要移除基础主题的某个样式表或脚本,请在 info 文件中取消注释libraries-override:行,以及要移除的库对应的行;它们已设为false。要添加自己的库,请在northwind_theme.libraries.yml中声明更多库,并在 info 文件的libraries下列出它们,就像入门套件为global-styling。

6. 在 DXPR Builder 中向编辑提供您的类

在子主题 info 文件的dxpr_builder_classes:下声明的类会出现在 DXPR Builder 的类选择器中,编辑无需输入类名即可应用您的深色横幅或玻璃面板。请在dxpr_theme_subtheme.css中设置该类的样式,作用范围限定为其适用的 DXPR Builder 元素。

7. 随主题发布调色板

在子主题根目录的color-settings.json中添加命名的方案。每个方案设置的键与面板使用的相同:base, basetext, link, accent1, accent2, text, headings, card, footer, header, pagetitle等。该方案会出现在设置表单的配色方案列表中,网站可以一键切换到品牌调色板。

8. 以后更新 DXPR Theme

  1. 用 Composer 更新基础主题:composer update drupal/dxpr_theme --with-dependencies。
  2. 运行数据库更新并清空缓存。
  3. 打开子主题的设置表单并再次保存,以便用所有新变量重新生成设置样式表。
  4. 阅读发行说明,了解模板或区域的变更,并将您覆盖过的模板与新版本对比。

让 AI 智能体为您完成主题设置

DXPR Theme 8.1.1 及更高版本附带智能体技能。在项目中运行drush dxt:setup-ai,您的编码智能体(Claude Code、Codex、Gemini CLI 或 Cursor)就会学习主题的设置及其含义。描述品牌,智能体就会通过面板写入的相同设置来设置颜色、排版、页眉布局和间距,供您在网站上检查。它还可以用drush dxt:subtheme:create。

DXPR Builder 技能为页面做同样的事,Drush Webmaster 为内容和视图做同样的事。查看智能体技能实战。

关于 DXPR Theme 子主题的常见问题

不需要。颜色、字体、页眉、页脚、间距和布局都是 DXPR Theme 面板中的设置。只有在需要自己的 CSS、模板覆盖、额外的库或随代码发布的调色板时,才需要子主题。

可以。在运行drush dxt:setup-ai后,智能体了解主题设置并根据简介更改它们,还可以用drush dxt:subtheme:create自行创建子主题。您只需在网站上查看结果。

与 DXPR Theme 8.2 相同:Drupal 10.3 及更高版本,以及 Drupal 11。入门套件的 info 文件也声明了更早的版本,但 DXPR Theme 8.2 依赖的模块需要 Drupal 10.3。

不会。Composer 只替换themes/contrib/dxpr_theme;您的子主题位于themes/custom。更新后保存一次子主题的设置表单,以便其样式表获取新变量。