Отбор нод по таксономии во views

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

Аватар пользователя PC_M@niac PC_M@niac 17 мая 2011 в 16:46

У нас есть:

  • Ноды типа А и В
  • Словарь таксономии С с привязкой к типам А и Б
  • В к нодам А и В в обязательном порядке прикреплён 1 термин из С

Нужна вьюха, которая, получая nid ноды типа А выведет список всех нод типа В, у которых указанный термин из словаря С, такой-же, как и у ноды А с указанным nid

Эта вьюха используется для заполнения выпадающего списка в редакторе ноды типа А.

Для чего это надо:
При редактировании ноды А юзер указывает термин таксономии посредством стандартного виджета (выпадающего списка) и во втором виджете (тоже выпадающий список) должен выбрать ноду В. Ограничение в том что для выбора должны быть доступны только ноды В у которых термин таксономии совпадает с тем, что указан для А.

Если подошёл не с той стороны, пните в нужном направлении.

Комментарии

Аватар пользователя PC_M@niac PC_M@niac 19 мая 2011 в 14:07

Попытался заюзать Conditional Fields, но он не воспринимает в качестве управляющих полей таксономию.

Есть вопрос по полю CCK Node - там как параметр вьюхе можно передавать %nid. А какие ещё параметры можно передать? В доке не нашёл.

Аватар пользователя PC_M@niac PC_M@niac 23 мая 2011 в 22:44

Нашёл пример "от обратного", но не могу придумать как переделать.

Если добавить аргумент "Таксономия: ID термина" и выбрать "Предоставить аргумент по/PHP код" и написать код:

if(arg(0) == 'node' && is_numeric(arg(1)) && !arg(2)) {
  $node = node_load(arg(1));
  $terms = taxonomy_node_get_terms_by_vocabulary($node, 3);
  if($term = array_shift($terms)) {
    return $term->tid;
  }
}

То работает отбор по термину таксономии. Но как этот самый термин получить из ноды?

Аватар пользователя PC_M@niac PC_M@niac 25 мая 2011 в 22:28

Разобрался с отбором по аргументам, но он почему-то не работает на страницах редактирования.
У меня получился код:

if(arg(0) == 'node' && is_numeric(arg(1)) && arg(2) == 'edit') {
  $node = node_load(arg(1));
  $terms = taxonomy_node_get_terms_by_vocabulary($node, 1);
  if($term = array_shift($terms)) {
    return $term->tid;
  }
}

Получается для на УРЛе /node/nid/edit отбор идёт по nid.
При проверке вьюхи всё работает как надо, но на странице правки ноды выпадающий список показывается пустым.

Кто с этим сталкивался? Как cck_node передаёт вьюхе агрумент? Как его получить во вьюхе через php?