2010-08-19 4 views
0

Мне нужно перечислить все проекты рекламной компании с их фотографиями и видеороликами, сгруппированными по предмету. Например, список под «Зелеными кампаниями», все проекты, связанные с этим, и в то же время в каждом проекте показывают (используя сетку) все изображения и видеороликов этого конкретного проекта. Мой подход состоял в том, чтобы сделать другой вид для каждого списка, но я не могу прикрепить представление в другом представлении.Drupal Список связанных видов

Я создал тип контента для изображений, проектов и предметов. Каждый из них ссылается друг на друга. (эта часть работает)

ответ

0

Я не скажу, что это самый простой/лучший метод, но он должен работать ... Я предполагаю, что вы используете модули node_reference, cck и views. Я думаю, вы должны сделать 2 вещи:

Во-первых, вы не должны создавать новый content_type для объектов. Лучше создать таксономию «кампании» и настроить ее, чтобы вы могли выбрать таксономический элемент из типа контента «проекты». Вы можете использовать это, чтобы отфильтровать «предметы» в ваших взглядах.

Во-вторых, вот пример загрузки узла с помощью модуля node_reference: В моем примере, скажем, есть 2 типа контента: события и eventsubscribers событие имеет ссылку на несколько eventsubscribers. В этом примере я буду использовать тип содержимого, используя tpl.php. Для получения дополнительной информации посмотрите на: http://drupal.org/node/17565, http://drupal.org/node/53464 и http://drupal.org/node/266817

  • Создать представление с основным элементом, который необходимо отфильтровать. В моем примере каждое событие имеет прикрепленные к нему подписчики событий, поэтому я создаю фильтрацию вида по типу узла (событие) и опубликованному узлу (да).

  • Установить стиль строки на «узел». Это даст вам возможность сделать файл node- [content-type] .tpl.php на вашей тематической карте. Создайте файл node- [content-type] .tpl.php на вашей карте темы (node-event.tpl.php)

  • В файле tpl.php вы можете распечатать все данные, используя (php): print_r($node); даст вам все поля. Среди этих полей будет поле node_reference.

  • Поле node_reference дает идентификатор от узлов, поэтому используйте 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_reference после node_load).