Переопределение вывода taxonomy используя views и контекст.

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

Аватар пользователя kirasnejnaia kirasnejnaia 18 апреля 2013 в 23:57

Ситуация. Есть конкретный тип ноды. Каждая нода имеет по одному термину таксономии из 3 разных словарей. Создано 3 меню, каждое на основе этих словарей.
При клике на пункты открывается список нод имеющих данный термин, и к каждой ноде добавляется название этого словаря. 3 словаря – 3 варианта отображения.
Пользуя views, переопределяю вывод нод.
Можно по «Имеет идентификатор термина таксономии», но тогда переопределяться вывод всех нод по всем терминам на сайте. А это не гуд.
Можно использовать «/taxonomy/term/%» и контекст «по конкретному словарю», но тогда, будет выводиться список только первый созданный views, а все остальные, созданные аналогичным методом, но по другим словарям отражаться не будут.
При этом в предпросмотре views выводятся прекрасно все варианты.
Подскажите, как решить этот момент?

Комментарии

Аватар пользователя sg85 sg85 19 апреля 2013 в 3:14

"kirasnejnaia" wrote:
Можно использовать «/taxonomy/term/%» и контекст «по конкретному словарю», но тогда, будет выводиться список только первый созданный views, а все остальные, созданные аналогичным методом, но по другим словарям отражаться не будут

<?php
function my_module_views_pre_view(&$view, &$display_id, &$args){
  if(
$view->name == 'my_view'){
    if(
is_numeric($args[0])){//проверяем действительно ли аргумент(у нас он один, тот что %) является числом
      
$term taxonomy_term_load($args[0]);

      switch(

$term->vid){
        case 
1$display_id 'display1';break;
        case 
3$display_id 'somedisplay';break;
        default: 
$display_id 'default_display';
      }
      
//если у Вас окажется словарь, на который нет своего дисплея, то будет выведен default_display, машинные имена дисплеев и ид словарей подставляйте свои.

      

$view->set_display($display_id);
    }
  }
}
//my_module - имя Вашего модуля и my_view - машинное имя Вашей вьюхи, указанное при её создании, подставляем свои значения
?>