Возникла потребность в выводе блока со списком связных нод на странице материала.
Исходные данные: 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->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 генерится неправильный, но можут я просто что-то упустил...
Заранее благодарен за ответ
Комментарии
Объясните проще как должно быть, я чета с ходу не вьехал
Что именно было непонятно? По моему все разъяснено более чем.
Если я правильно понял нужно сделать аналог модуля nodereferrer для 5ой версии, те банально реализовать двустороннюю связь. Очень популярный тут вопрос.
Необходимо добавить к вьюшке аргумент для поля node reference в виде nid текущей ноды (ноды продукта) и встроить вид удобным способом в материал типа продукт. Насчет отношений (relationships) никогда ими не пользовался, возможно с ними по другому
В догонку
http://www.drupal.ru/node/18279
http://www.drupal.ru/node/17734
http://www.drupal.ru/node/17028
Насколько я понял, вы имеете ввиду немного другой тип связи, на моем примере это: Видео->Товар. Те я должен привязывать видео к товару. В таком случае - Ваш совет работает
Но мне нужно другое, я хочу при создании продукта выбирать видео, а не наоборот. Понятно, что при этом список заголовков привязанных видео и так будет отображаться. Но мне хотелось оформить это в виде блока с помощью view, а не сниппетов. Хотя я уже склоняюсь к Вашему варианту, но интересно, почему рецепт из статьи на drupal.org не дает нужного результата.