logo

额外区块类型 (EBT) - 全新的布局构建器体验❗

额外区块类型 (EBT) - 样式化、可定制的区块类型:幻灯片、标签页、卡片、手风琴等更多类型。内置背景、DOM Box、JavaScript 插件的设置。立即体验布局构建的未来。

演示 EBT 模块 下载 EBT 模块

❗额外段落类型 (EPT) - 全新的 Paragraphs 体验

额外段落类型 (EPT) - 类似的基于 Paragraph 的模块集合。

演示 EPT 模块 滚动

滚动

6.9 Drupal Views 主题化:创建带缩略图的 Owl Carousel 幻灯片。

17/10/2025, by Ivan

很多时候,Views 默认模板并不能满足我们的需求,因此我们可以通过 模板重写(override) 的方式自定义 Views 的输出效果。不幸的是,Views 本身并没有提供用于查找可用模板的 UI 界面,但我们可以根据模板命名规则(patterns)来自行重定义模板。

关于模板命名规则的更多内容,请参阅以下文章:

6.6. 在 Drupal 中使用模板:了解 Drupal 核心中的模板。

我们主要关注以下部分:

以下是可用于重写的模板名称格式:

视图名称(View Name)— foobar(机器名称)
显示格式(Display format)— unformatted(未格式化列表,可根据样式不同调整)
显示风格(Display Style)— fields
显示名称(Display Name)— page

对应的模板文件命名规则如下:

views-view--foobar--page.html.twig
views-view--page.html.twig
views-view--foobar.html.twig
views-view.html.twig
views-view-unformatted--foobar--page.html.twig
views-view-unformatted--page.html.twig
views-view-unformatted--foobar.html.twig
views-view-unformatted.html.twig
views-view-fields--foobar--page.html.twig
views-view-fields--page.html.twig
views-view-fields--foobar.html.twig
views-view-fields.html.twig

Owl Carousel 1.x 插件不支持为画廊显示缩略图(thumbnails)。因此我们将使用 Owl Carousel 2.x,它支持缩略图功能。

如果您不想自己编写模板重写、CSS 或 JavaScript 代码,可以直接使用以下模块:

这些模块允许您在无需编写 CSS 或 jQuery 代码的情况下快速配置幻灯片。

不过在本教程中,我们将练习如何通过重写 Views 模板并加载 jQuery 库来实现自定义幻灯片。

首先,下载并引入 Owl Carousel 2.x 库:

https://github.com/OwlCarousel2/OwlCarousel2

请注意,不要使用旧版 Owl Carousel 1.x

https://github.com/OwlFonk/OwlCarousel

1.x 版本不支持缩略图功能,如果使用它则必须编写额外代码。

将包含 owl.carousel.min.js 文件的 owl-carousel 文件夹复制到您的主题目录中。然后在主题的 .libraries.yml 文件中添加 CSS 和 JS 资源:

global-styling:
  version: 1.x
  css:
    theme:
      owl-carousel/owl.carousel.css: {}
      owl-carousel/owl.theme.css: {}    
      owl-carousel/owl.transitions.css: {}
      css/style.css: {}
      css/print.css: { media: print }
  js:
    js/custom.js: {}
    owl-carousel/owl.carousel.min.js: {}
  dependencies:
    - core/jquery

我并未将 JS 文件放入 /js/css 文件夹中,您可以根据需要调整。若移动了文件,请记得修改 CSS 文件中引用图片的路径(通常位于 images 文件夹中)。

提示:修改后请清除缓存以应用更改。

接下来,我们将创建一个新的 内容类型(Content Type),命名为 “Gallery(画廊)”,并为其添加一个 图片字段(Image Field)

然后,创建一个新的 View(视图),用于显示该内容类型中的图片字段。