Drupal相关视图列表

时间:2010-08-19 17:52:31

标签: drupal views

我需要列出广告公司的所有项目,其中包含按主题分组的图片和视频。 例如,在“绿色广告系列”下列出所有与该项目相关的项目,同时在每个项目下显示(使用网格)该特定项目的所有图片和视频。 我的方法是为每个列表创建一个不同的视图,但我不能在另一个视图中附加视图。

我为图片,项目和主题创建了一个内容类型。每个人互相引用。 (这部分正在运作)

1 个答案:

答案 0 :(得分:0)

我不会说这是最简单/最好的方法,但它应该有用......我假设你使用的是node_reference,cck和views模块。我认为你应该做两件事:

首先,您不应为主题创建新的content_type。最好创建分类“广告系列”并进行设置,以便您可以从“项目”内容类型中选择分类法。您可以使用它来过滤视图中的“主题”。

其次,这是使用node_reference模块加载节点的示例: 在我的例子中,假设有两种内容类型:event和eventsubscribers 一个事件引用了多个eventsubscribers。对于此示例,我将使用tpl.php来指示内容类型。有关详细信息,请查看:http://drupal.org/node/17565http://drupal.org/node/53464http://drupal.org/node/266817

  • 使用要过滤的主项目创建视图。在我的示例中,每个事件都附加了eventsubscribers,因此我在节点类型(事件)和节点发布(是)上创建视图过滤。

  • 将行样式设置为“node”。这将使您能够在主题图中创建node- [content-type] .tpl.php文件。在主题图中创建node- [content-type] .tpl.php文件(node-event.tpl.php)

  • 在tpl.php文件中,您可以使用(php)打印所有数据:print_r($node);这将为您提供所有字段。其中的字段是node_reference字段。

  • node_reference字段为您提供节点的id,因此使用node_load在变量中加载完整节点。例如:$picturenode = node_load($node->field_ref_subscriber[0]['nid'])。对于多张图片,请使用围绕它的foreach循环。

  • 在node_load之后,您将获得变量中node_reference的所有字段(您可以再次使用print_r查看数组的外观)。您可以使用此变量打印出图片。例如:print($picturenode->field_image[0]['view']);

在您的特定情况下,node_load将为您提供值而不是视图。因此,使用imagecache功能来主题化图片(不知道如何处理视频)。为了使它更容易一些,这里有一些示例代码:

<?php
// $Id: node.tpl.php,v 1.7 2007/08/07 08:39:36 goba Exp $
?>
  <div class="node<?php if ($sticky) { print " sticky"; } ?><?php if (!$status) { print " node-unpublished"; } ?>">
    <?php if (!$page) { ?>
        <h2 class="nodetitle"><a href="<?php print $node_url?>"><?php print $title?></a></h2>
    <?php }; ?>
    <div class="content"><?php print $node->content['body']['#value']; ?></div>
    <div class="subscribers"><?php //this will load all subscribers to the event
    foreach((array)$node->node_ref_subscribers as $subscriber){ 
        $subscriberdata = node_load($subscriber['nid']); //load the subscriber values in $subscriberdata
        print($subscriberdata->field_subscriber_body[0]['value'];); //print subscriber field
    }
    ?></div>
    <?php if ($links) { ?><div class="links">&raquo; <?php print $links?></div><?php }; ?>
  </div>
<?php
//print_r($node);
?>

此示例尚未经过测试,只是被视为您可以执行的操作的粗略版本。使用print_r查看节点中可用的数据(以及node_load之后的node_reference)。