Возникла задача, такого плана.
Нужно чтобы менялся внешний вид блока (sidebar) в зависимости от принадлежности материала к определенной категории словаря.
Т.е. , напр., страниц контакты - где блок меню выглядит одним образом. А на странице информация - другим, и т.п.
Как бы вы посоветовали сделать, без наименьших правок кода?
Комментарии
Я нашел такое решение пока, но не работает почему-то...
1. Создавать несколько отдельных блоков
2. Через админку, вставлять код шаблона, в поле "Текст блока".
3. Поставить чекбокс в месте "Показать, если данный PHP-код возвращает TRUE (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
Может, какие-то ещё есть решения?
вот, работает, кода вместо того кода, вот этот:
$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];
}
?>
Только показывает, если это нода, с меткой такого термина.
А как добавить в условие и сам листинг термина???
Что такое "листинг термина"?
Если имеете в виду страницу taxonomy/term/%id%, то в блоке меняете $desired_term = 1; на $desired_term = arg(2);
Да, под листингом термина имелся в виду скролл анонсов нод термина.
Не получилось
А можете привести код?
Получилось вот так:
$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
}
?>
Блок выводится в листинге (скролле) термина и во всех нодах термина.
Спасибо именно то, что искал.
Надо на setegnom.com выложить.
А как модифицировать код, чтобы получить вывод блока не по термину, а по словарю?
Т.е. выводить блок, если есть любой термин из указанного словаря или на листинге любого из терминов этого словаря.
Показывать блок на страницах определенного типа и показывать блок на листингах термина таксономии определенного словаря.
Получилось!!!
<?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;
?>
прошу извинить мои никакие знания 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];
}
?>
<?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];
}
?>
спасибо
а как вообще сделать так что бы шаблон выводился только на определённых страницах ?
тоесть при создании пункта меню создаётся новая страница и как в базе или где то ещё это помечается чему принадлежит эта страница товару или категории ? как её обозначить каким то параметром ?
Вообще, ИМХО, обычно наоборот, сначала создается страница, а потом уже пункт меню (ссылка) на нее.