Я не скажу, что это самый простой/лучший метод, но он должен работать ... Я предполагаю, что вы используете модули 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">» <?php print $links?></div><?php }; ?>
</div>
<?php
//print_r($node);
?>
Этот пример не был проверен, и только следует рассматривать как грубый вариант того, что вы могли бы сделать. Используйте print_r, чтобы просмотреть данные, доступные в узле (и node_reference после node_load).