如何自定义Drupal Views的组并为每个组包含自定义HTML?

时间:2012-11-15 03:48:49

标签: drupal drupal-6 drupal-views

我有6种自定义内容类型和一个按节点类型显示6种类型和组结果的视图。

示例:自定义内容类型是计算机,汽车,食品等。视图按这些类型对节点进行分组:

[exposed filters here]

Computers
 - HP P6500
 - Leveno HQ3112

Cars
 - Ford F150
 - GM Silverado

Food
 - Apple
 - Banana

如何以任意方式对组进行排序?即食品,汽车,电脑。另外,如何为每个组和自定义HTML指定自定义标题?我希望每个组标题旁边都有一张图片,标题上有自定义颜色等。我尝试使用viewfield,views_field_view和viewreference模块完成此操作,并为每种内容类型创建单独的子视图,并使用主视图向他们展示所有内容,但我遇到了暴露的过滤器和分页工作的问题。我可能会以错误的方式解决这个问题。任何建议将不胜感激!

2 个答案:

答案 0 :(得分:1)

我正在使用Views 3.x和Drupal 7,所以我不确定这是否完全适用。但我想提及它,因为我遇到了完全相同的问题(问题的排序部分)。

为了以任意方式对组进行排序,我提出的最快的解决方案是使用Global:PHP排序(在Views UI中)。如果食物,汽车和计算机是内容类型,那么这样的东西应该有用......

switch ($row1->type) {
  case 'food':
    return -1;
    break;
  case 'computers':
    return 1;
    break;
  case 'cars':
    if ($row2->type == 'computers') {
      return -1;
    }
    elseif ($row2->type == 'food') {
      return 1;
    }
    else {
      return 0;
    }
    break;
  default:
    return 0;
  break;
}

我还使用了Views Grouping Row Limit模块,它可以更好地控制组。 使用该模块,您可以通过模板和CSS(组的唯一ID)修改组输出,这将允许您为该组名添加图像。

对于重命名组标题,你可以使用jQuery,但我最终使用了一个视图钩子,hook_views_post_render:

function MODULE_views_post_render(&$view, &$output, &$cache) {
  $output = str_replace('<h3>Original Title</h3>', '<h3>' . t('New Title') . '</h3>', $output);
}

希望有所帮助。

答案 1 :(得分:0)

为了完全控制视图输出,我建议您尝试查看modules / views / theme文件夹中的视图模板。不要直接编辑它们,而是将它们复制到主题文件夹并在那里进行编辑。 (你需要清除缓存,以便drupal拿起你的副本)。

要找出你应该编辑的模板,一个非常好的工具是http://drupal.org/project/devel_themer

对于较小的更改,可以更容易地使用主题挂钩,但如果您想进行大量更改,则可以直接在模板上工作。