【发布时间】:2011-02-08 06:59:51
【问题描述】:
我正在使用 Drupal 6 和 Views 构建一系列图像库。一个视图创建一个全尺寸的幻灯片,另一个视图在主图像下方创建一个缩略图列表。这很好用,但是当画廊只有一张图片时,缩略图就没有必要了,而且看起来很奇怪。
有没有办法隐藏只包含一个结果的视图?
【问题讨论】:
标签: drupal drupal-6 drupal-views
我正在使用 Drupal 6 和 Views 构建一系列图像库。一个视图创建一个全尺寸的幻灯片,另一个视图在主图像下方创建一个缩略图列表。这很好用,但是当画廊只有一张图片时,缩略图就没有必要了,而且看起来很奇怪。
有没有办法隐藏只包含一个结果的视图?
【问题讨论】:
标签: drupal drupal-6 drupal-views
据我所知,没有 Views 设置可以完成您正在寻找的内容。但是,我想到了两种方法……jQuery 或一些自定义 PHP。
视图结果中的每一行都将分配一个views-row-N 类。因此,您可以使用 jQuery 脚本来查看是否有一个带有 views-row-2 类的 div(或用于每一行的任何其他容器元素)。如果没有,那么你只有一个结果。因此,现在您可以使用 jQuery 来隐藏具有 view-view-name 类的最外层 div(或其他容器元素,但我认为它始终是一个 div)。因此,如果视图被称为“thumbs”,它将是view-thumbs。该视图在技术上仍然存在,但您至少可以对用户隐藏它,这似乎是您的真正目标。
自定义 PHP 的目标是确定视图中有多少个结果,如果超过一个,则将其显示在页面上。有几种方法可以做到这一点,但我认为最直接的方法是覆盖 views-view.tpl.php 主题模板文件。如果您转到“编辑视图”页面,则每个显示器的 Basic Settings 窗格中都有一个 Theme: Information。如果单击它,它将为您提供该视图的主题模板列表,以及候选名称(Drupal 在对视图结果进行主题化时将查找的文件)。您需要通过复制文件并为其指定列表中的一个名称来用另一个文件(不要替换,只需覆盖)覆盖views-view.tpl.php 文件。该文件将用于显示整个视图结果。如果您打开文件,顶部会有一条注释说明可用的变量。其中之一是$rows 变量。您可以使用此变量来确定是否存在多行。如果没有,则不要打印任何内容。如果有,那么继续并让默认主题发生。因此,实际上您需要做的就是将默认模板文件中的所有内容包装在 if/else 块中...如果有 2 行或更多行,则执行已存在的所有内容,否则不执行任何操作。
附带说明...我一直发现 FireFox 与 FireBug、Devel module 和 Theme Developer module 的组合在处理此类事情时提供了巨大的帮助。
【讨论】:
devel_themer!不幸的是,当$rows 变成views-view.tpl.php 时,它是一个文本块而不是一个数组。我一直在使用网格显示样式,所以我尝试覆盖views-view-grid.tpl.php,但这也是一团糟。可能会切换到无序列表和 CSS 样式...
views_attach 模块,以及cck、imagecache 和lightbox。
我已在我的主题中添加了一个自定义 views-view.tpl.php - 我需要计数有几个原因。
我将第一行改为:
<div class="<?php print $classes; ?> result-count-<?php print count($view->result) ?>">
这有助于在您真正需要时进行造型。
【讨论】:
Unformatted 和 HTML list 视图样式使用 CSS 类标记查询的第一个和最后一个结果。如果您可以使用其中之一,那么它很简单:
.view-id-foobar .views-row-first.views-row-last {
display: none;
}
【讨论】: