Изменение шаблона блока в зависимости от принадлежности ноды к категории. [РЕШЕНО]

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

Аватар пользователя paurock paurock 6 марта 2009 в 14:56

Возникла задача, такого плана.
Нужно чтобы менялся внешний вид блока (sidebar) в зависимости от принадлежности материала к определенной категории словаря.
Т.е. , напр., страниц контакты - где блок меню выглядит одним образом. А на странице информация - другим, и т.п.
Как бы вы посоветовали сделать, без наименьших правок кода?

Комментарии

Аватар пользователя paurock paurock 7 марта 2009 в 15:48

Я нашел такое решение пока, но не работает почему-то...

1. Создавать несколько отдельных блоков
2. Через админку, вставлять код шаблона, в поле "Текст блока".
3. Поставить чекбокс в месте "Показать, если данный PHP-код возвращает TRUE (PHP-режим, только для экспертов)."
и вставить такой код:

<?php
  // This snippet returns TRUE if the node we are
  // currently viewing is tagged with a term which is
  // the 'desired_term' and we are not in edit mode (arg(2)).

  // put here the term ID you're interested in
  $desired_term = 1;

  if ( arg(0) == 'node' and is_numeric(arg(1)) and arg(2) == FALSE ) {
    $node = node_load(arg(1));
    return (bool) $node->[$desired_term];
  }
?>

Где $desired_term = 1; - это ID желаемого раздела (термина).

http://drupal.org/node/69076

Может, какие-то ещё есть решения?

Аватар пользователя paurock paurock 7 марта 2009 в 22:09

вот, работает, кода вместо того кода, вот этот:

<?php
$tid = 1; // Change this value to the correct Term ID.

if (arg(0) == 'node' && is_numeric(arg(1)) ) { // Check if we're viewing a node.
  $node = node_load(arg(1));
  return (bool) $node->taxonomy[$tid];
}
?>

Только показывает, если это нода, с меткой такого термина.

Аватар пользователя lexnevermind lexnevermind 17 сентября 2009 в 15:41

Получилось вот так:

<?php
$tid = 2; // Сюда вставить айдишник нужного термина

if (arg(0) == 'taxonomy' && arg(1) == 'term' && arg(2) == $tid) { // Нужный термин?
  return true; // Возвращаем true
}

if (arg(0) == 'node' && is_numeric(arg(1))) { // Нода?
  $node = node_load(arg(1)); // Загружаем нужную ноду в переменную
  return (bool) $node->taxonomy[$tid]; // Если нода принадлежит нужному термину, возвращаем true
}
?>

Блок выводится в листинге (скролле) термина и во всех нодах термина.

Аватар пользователя BorisVlasenko BorisVlasenko 28 сентября 2009 в 15:00

Спасибо именно то, что искал.
Надо на setegnom.com выложить.

А как модифицировать код, чтобы получить вывод блока не по термину, а по словарю?
Т.е. выводить блок, если есть любой термин из указанного словаря или на листинге любого из терминов этого словаря.

Аватар пользователя BorisVlasenko BorisVlasenko 23 октября 2009 в 23:26

Показывать блок на страницах определенного типа и показывать блок на листингах термина таксономии определенного словаря.
Получилось!!!


<?php
  $vid 
18// выбор словаря
  
$types = array('page_mdou' => 1); // выбор типа страницы
  
$match FALSE;

  if (

arg(0) == 'taxonomy' && arg(1) == 'term') { 
    
$terms explode (",",arg(2));
    foreach (
$terms as $term) {
      
$t taxonomy_get_term($term);
      if (
$t->vid) {  
        
$match TRUE;
        print 
$t->vid;
      }; 
    };
  };

  if (

arg(0) == 'node') { 
    
$nid arg(1);
    
$node node_load(array('nid' => $nid));
    
$type $node->type;
    if (isset(
$types[$type])) {
      
$match TRUE;
      print 
$type;
    };
  };
  return 
$match;
?>
Аватар пользователя каранёвы каранёвы 19 мая 2010 в 14:35

прошу извинить мои никакие знания php, подскажите, пожалуйста, как перечислить сразу несколько айди словарей? вот здесь:


<?php
$tid 
1// Change this value to the correct Term ID.
 
if (arg(0) == 'node' && is_numeric(arg(1)) ) { // Check if we're viewing a node.
  
$node node_load(arg(1));
  return (bool) 
$node->taxonomy[$tid];
}
?>
Аватар пользователя каранёвы каранёвы 22 мая 2010 в 21:02

<?php
if (in_array($tid,array(5,6,7))) {
if (
arg(0) == 'node' && is_numeric(arg(1)) ) {
  
$node node_load(arg(1));
  return (bool) 
$node->taxonomy[$tid];
}
}
?>

должно быть так вроде, вот только не работает( и выше код один раз сработал, возвращаю не работает((

подскажитЕ, пожалуйста, если нода относится к нескольким разным терминам из разных словарей? будет ли работать этот код:


<?php
$tid 
1// Change this value to the correct Term ID.
 
if (arg(0) == 'node' && is_numeric(arg(1)) ) { // Check if we're viewing a node.
  
$node node_load(arg(1));
  return (bool) 
$node->taxonomy[$tid];
}
?>

спасибо

Аватар пользователя morgusha morgusha 8 июля 2014 в 18:25

а как вообще сделать так что бы шаблон выводился только на определённых страницах ?
тоесть при создании пункта меню создаётся новая страница и как в базе или где то ещё это помечается чему принадлежит эта страница товару или категории ? как её обозначить каким то параметром ?

Аватар пользователя Sandy Big Boy Sandy Big Boy 9 июля 2014 в 2:22

"morgusha" wrote:
тоесть при создании пункта меню создаётся новая страница и как в базе или где то ещё это помечается чему принадлежит эта страница товару или категории ? как её обозначить каким то параметром ?

Вообще, ИМХО, обычно наоборот, сначала создается страница, а потом уже пункт меню (ссылка) на нее.