Аргументы Drupal Views должны показывать как синонимы, так и родные братья. - PullRequest
2 голосов
/ 22 февраля 2011

Я работаю с Drupal Views, который фильтрует наш контент на основе географии и показывает новости из определенного муниципалитета.

Наша таксономия является иерархической:

  • Регионы - Муниципалитеты из региона --- города от муниципалитета

Например:

  • Регион А (регион) - Муниципалитет X (муниципалитет) --- Город 1 --- Город 2 - Муниципалитет Y (муниципалитет) --- Город 3 --- Город 4 - Муниципалитет Z (муниципалитет) --- Город 5 --- Город 6

Мы помечаем наши узлы названиями городов, и, используя наш термин таксономии в качестве аргумента, мы можем легко перечислить все истории из любого муниципалитета.

Теперь мы хотели бы добавить новую функцию в наше представление: также перечислять новости из соседнего муниципалитета. Муниципалитет Y - это Neghbour of Municipality Z, и мы добавили это отношение к термину таксономии.

Так что теперь мы можем показать все истории из Y, выбрав аргумент «Глубина таксономии». Мы также можем показать все истории, используя аргумент таксономических терминов.

Но как показать все узлы как Y, так и его родного Z с представлениями?

1 Ответ

0 голосов
/ 09 сентября 2011

Вы должны изменить валидатор аргумента views на код PHP. Затем в поле валидатора вы сможете динамически изменять аргумент. Таким образом, имея информацию, вы можете получить все связанные термины.

  • установить действие , которое будет выполняться, если аргумент отсутствует для «отображения пустого текста»;
  • в опциях валидатора, установите валидатор на "PHP Code";
  • в коде:
    • получить информацию, используя arg (1) ;
    • используйте taxonomy_get_related ($ tid) , чтобы получить соответствующие термины;
    • построить строку с синтаксисом "tid + related_tid + related_tid + related_tid" для возврата в качестве аргумента;
    • переопределить $ handler-> аргумент как встроенную строку;
  • наконец, установите Разрешить несколько терминов для аргумента как True

Вот пример кода для вставки в форму проверки кода php:

$tid = arg(1);
$result = strval($tid);
$related = taxonomy_get_related($tid);
foreach($related as $i){
  if (intval($i)>0){
    $result.="+".$i;
  }
}
$handler->argument = $result;
return $result;
...