Вывод связных нод в 6.x-ке

Главные вкладки

Аватар пользователя dven dven 1 сентября 2008 в 10:48

Возникла потребность в выводе блока со списком связных нод на странице материала.
Исходные данные: Drupal 6.4, Views 6.x-2.0-rc1,CCK 6.x-2.0-rc6 и статья http://drupal.org/node/289738
Создаю 2 типа материалов: продукт и видео о продукте. В продукте создаю поле cck, ссылающиеся на видео. Создаю пару видео, создаю продукт в котором привязываю к нему эти 2 видео.
Создаю view типа node, отображение блока, которое настраиваю согласно вышеуказанной статьи.
Ниже код экспорта моего view:

$view = new view;
$view->name = 'product_referer_video';
$view->description = 'Видео о продукте';
$view->tag = '';
$view->view_php = '';
$view->base_table = 'node';
$view->is_cacheable = FALSE;
$view->api_version = 2;
$view->disabled = FALSE; /* Edit this to true to make a default view disabled initially */
$handler = $view->new_display('default', 'По умолчанию', 'default');
$handler->override_option('relationships', array(
  'field_video_link_nid' => array(
    'label' => 'field_video_link_nid',
    'required' => 1,
    'id' => 'field_video_link_nid',
    'table' => 'node_data_field_video_link',
    'field' => 'field_video_link_nid',
    'override' => array(
      'button' => 'Override',
    ),
    'relationship' => 'none',
  ),
));
$handler->override_option('fields', array(
  'field_image_fid' => array(
    'label' => '',
    'link_to_node' => 0,
    'label_type' => 'none',
    'format' => 'product_th_linked',
    'multiple' => array(
      'group' => TRUE,
      'multiple_number' => '',
      'multiple_from' => '',
      'multiple_reversed' => FALSE,
    ),
    'exclude' => 0,
    'id' => 'field_image_fid',
    'table' => 'node_data_field_image',
    'field' => 'field_image_fid',
    'relationship' => 'none',
  ),
  'title' => array(
    'label' => '',
    'link_to_node' => 1,
    'exclude' => 0,
    'id' => 'title',
    'table' => 'node',
    'field' => 'title',
    'override' => array(
      'button' => 'Override',
    ),
    'relationship' => 'none',
  ),
));
$handler->override_option('sorts', array(
  'status' => array(
    'order' => 'ASC',
    'id' => 'status',
    'table' => 'node',
    'field' => 'status',
    'relationship' => 'none',
  ),
));
$handler->override_option('arguments', array(
  'null' => array(
    'default_action' => 'default',
    'style_plugin' => 'default_summary',
    'style_options' => array(),
    'wildcard' => 'all',
    'wildcard_substitution' => 'Все',
    'title' => '',
    'default_argument_type' => 'fixed',
    'default_argument' => '',
    'validate_type' => 'none',
    'validate_fail' => 'not found',
    'must_not_be' => 0,
    'id' => 'null',
    'table' => 'views',
    'field' => 'null',
    'override' => array(
      'button' => 'Override',
    ),
    'relationship' => 'none',
    'default_options_div_prefix' => '',
    'default_argument_user' => 0,
    'default_argument_fixed' => 'node',
    'default_argument_php' => '',
    'validate_argument_node_type' => array(
      'faq' => 0,
      'page' => 0,
      'product' => 0,
      'story' => 0,
      'video' => 0,
    ),
    'validate_argument_node_access' => 0,
    'validate_argument_nid_type' => 'nid',
    'validate_argument_vocabulary' => array(
      '1' => 0,
    ),
    'validate_argument_type' => 'tid',
    'validate_argument_php' => '',
  ),
  'nid' => array(
    'default_action' => 'default',
    'style_plugin' => 'default_summary',
    'style_options' => array(),
    'wildcard' => 'all',
    'wildcard_substitution' => 'Все',
    'title' => '',
    'default_argument_type' => 'node',
    'default_argument' => '',
    'validate_type' => 'none',
    'validate_fail' => 'not found',
    'break_phrase' => 0,
    'not' => 0,
    'id' => 'nid',
    'table' => 'node',
    'field' => 'nid',
    'override' => array(
      'button' => 'Override',
    ),
    'relationship' => 'none',
    'default_options_div_prefix' => '',
    'default_argument_user' => 0,
    'default_argument_fixed' => '',
    'default_argument_php' => '',
    'validate_argument_node_type' => array(
      'faq' => 0,
      'page' => 0,
      'product' => 0,
      'story' => 0,
      'video' => 0,
    ),
    'validate_argument_node_access' => 0,
    'validate_argument_nid_type' => 'nid',
    'validate_argument_vocabulary' => array(
      '1' => 0,
    ),
    'validate_argument_type' => 'tid',
    'validate_argument_php' => '',
  ),
));
$handler->override_option('filters', array(
  'status' => array(
    'operator' => '=',
    'value' => 1,
    'group' => '0',
    'exposed' => FALSE,
    'expose' => array(
      'operator' => '',
      'label' => 'Опубликовано',
      'use_operator' => FALSE,
      'identifier' => 'status',
      'remember' => FALSE,
      'single' => TRUE,
      'optional' => FALSE,
    ),
    'id' => 'status',
    'table' => 'node',
    'field' => 'status',
    'relationship' => 'none',
  ),
));
$handler->override_option('access', array(
  'type' => 'none',
  'role' => array(),
  'perm' => '',
));
$handler->override_option('title', 'Видео по теме');
$handler->override_option('use_more', 1);
$handler->override_option('style_options', array(
  'grouping' => '',
));
$handler = $view->new_display('block', 'Блок', 'block_1');
$handler->override_option('arguments', array(
  'null' => array(
    'default_action' => 'default',
    'style_plugin' => 'default_summary',
    'style_options' => array(),
    'wildcard' => 'all',
    'wildcard_substitution' => 'Все',
    'title' => '',
    'default_argument_type' => 'fixed',
    'default_argument' => '',
    'validate_type' => 'none',
    'validate_fail' => 'not found',
    'must_not_be' => 0,
    'id' => 'null',
    'table' => 'views',
    'field' => 'null',
    'override' => array(
      'button' => 'Override',
    ),
    'relationship' => 'none',
    'default_options_div_prefix' => '',
    'default_argument_user' => 0,
    'default_argument_fixed' => 'node',
    'default_argument_php' => '',
    'validate_argument_node_type' => array(
      'faq' => 0,
      'page' => 0,
      'product' => 0,
      'story' => 0,
      'video' => 0,
    ),
    'validate_argument_node_access' => 0,
    'validate_argument_nid_type' => 'nid',
    'validate_argument_vocabulary' => array(
      '1' => 0,
    ),
    'validate_argument_type' => 'tid',
    'validate_argument_php' => '',
  ),
  'nid' => array(
    'default_action' => 'default',
    'style_plugin' => 'default_summary',
    'style_options' => array(),
    'wildcard' => 'all',
    'wildcard_substitution' => 'Все',
    'title' => '',
    'default_argument_type' => 'node',
    'default_argument' => '',
    'validate_type' => 'none',
    'validate_fail' => 'not found',
    'break_phrase' => 0,
    'not' => 0,
    'id' => 'nid',
    'table' => 'node',
    'field' => 'nid',
    'override' => array(
      'button' => 'Use default',
    ),
    'relationship' => 'none',
    'default_options_div_prefix' => '',
    'default_argument_user' => 0,
    'default_argument_fixed' => '',
    'default_argument_php' => '',
    'validate_argument_node_type' => array(
      'faq' => 0,
      'page' => 0,
      'product' => 0,
      'story' => 0,
      'video' => 0,
    ),
    'validate_argument_node_access' => 0,
    'validate_argument_nid_type' => 'nid',
    'validate_argument_vocabulary' => array(
      '1' => 0,
    ),
    'validate_argument_type' => 'tid',
    'validate_argument_php' => '',
  ),
));

В итоге на странице товара мне благополучно выводится блок с 2 позициями, обе из которых - таже нода, на которой выводится блок.
Может кто уже решал данную проблему? Мне кажется что нужно логику модуля nodereference править, тк запрос для view генерится неправильный, но можут я просто что-то упустил...
Заранее благодарен за ответ Smile

Комментарии

Аватар пользователя dven dven 1 сентября 2008 в 15:23

dfaker wrote:
Объясните проще как должно быть, я чета с ходу не вьехал

Что именно было непонятно? По моему все разъяснено более чем.

Аватар пользователя dfaker dfaker 1 сентября 2008 в 17:15

Если я правильно понял нужно сделать аналог модуля nodereferrer для 5ой версии, те банально реализовать двустороннюю связь. Очень популярный тут вопрос.
Необходимо добавить к вьюшке аргумент для поля node reference в виде nid текущей ноды (ноды продукта) и встроить вид удобным способом в материал типа продукт. Насчет отношений (relationships) никогда ими не пользовался, возможно с ними по другому

В догонку
http://www.drupal.ru/node/18279
http://www.drupal.ru/node/17734
http://www.drupal.ru/node/17028

Аватар пользователя dven dven 1 сентября 2008 в 19:13

Насколько я понял, вы имеете ввиду немного другой тип связи, на моем примере это: Видео->Товар. Те я должен привязывать видео к товару. В таком случае - Ваш совет работает Smile
Но мне нужно другое, я хочу при создании продукта выбирать видео, а не наоборот. Понятно, что при этом список заголовков привязанных видео и так будет отображаться. Но мне хотелось оформить это в виде блока с помощью view, а не сниппетов. Хотя я уже склоняюсь к Вашему варианту, но интересно, почему рецепт из статьи на drupal.org не дает нужного результата.