将另一个节点显示(如预告片,完整节点)添加到Drupal

时间:2010-02-11 23:31:54

标签: drupal drupal-6

我希望有两个不同的节点预告片显示,具体取决于它在网站上的位置。

单独更改块的.tpl是不够的,因为我需要显示一个单独的图像缓存图像。

是否有方法可以添加其他显示类型?或者更改节点显示类型接收的字段(即:显示图像缓存图像)?

4 个答案:

答案 0 :(得分:5)

对于Drupal 7用户

在Drupal 7中,可以通过实现hook_entity_info_alter()

轻松添加自定义节点视图模式
/**
* Implements hook_entity_info_alter().
*/
function MYMODULE_entity_info_alter(&$entity_info) {
  $entity_info['node']['view modes']['another_teaser'] = array(
    'label' => t('Another teaser'),
    'custom settings' => TRUE,
  );
} 

这会将一个名为“Another teaser”的新视图模式添加到您的视图模式列表中,您可以像任何其他视图模式(如默认 Teaser )一样进行配置

See: Drupal 7 custom node view modes (Juha Niemi, Mearra)

或者您可以使用模块Display Suite,但最初可能会有点压倒性。

答案 1 :(得分:3)

正如其他人所指出的那样,你有点不清楚你在做什么,但听起来你使用节点视图来创建一个块,然后使用块模板来标记块的内容。这种块的关键内容将由节点模板生成。默认节点模板determines its markup based on a $teaser variable设置为TRUE或FALSE。 $ teaser的值基于视图中的完整节点/预告片区别。这显然是一个布尔变量,所以没有第三个选项。所以你的具体问题的答案是否定的,你不能这样做。

也就是说,可以 根据template_preprocess_node或$等上下文指标在arg()中引入您自己的变量,从而实现3个(或更多)不同显示的目标view-> name,然后在您自己的节点模板中使用这些变量(或者更可能是node type template)来控制输出标记。然后,您可以通过调用imagecache主题函数来应用不同的图像缓存预设,例如:

<?php print theme('imagecache', 'thumbnail', $node->field_image[0]['filepath']); ?>

如果这对你来说是全新的,那就要学到很多东西,希望不要过于苛刻。

答案 2 :(得分:2)

这可能不是最优雅的解决方案,但我认为您可以通过结合使用CCKViews来实现这一目标。

  • 使用CCK向您的内容类型添加其他字段,其中包含您的替代预告文字。
  • 然后,使用“视图”创建要在其中显示替代预告片的节点列表。在视图中添加新的预告片字段,添加一些格式,然后就完成了。

如果您有复杂的格式需求,可以try this trick并编写特定的.tpl.php文件来呈现视图。

答案 3 :(得分:0)

这些称为构建模式。您必须实现hook_content_build_modes,它将由CCK调用。有关示例,请参见CCK。