Не могу избавиться от родителя подтермов в таксономии

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

Аватар пользователя locker locker 16 апреля 2011 в 20:10

Есть словарь стран типа:
Египет
- Каир
- Александрия

Я хочу при заходе в страну вывести блок с ссылками на города. Во вьюсе делаю аргумент Taxonomy: Term ID (with depth) со значением Provide default argument - Taxonomy Term ID from URL и DEPTH - 1, но на странице Египет он мне выводит:

Каир
Александрия
Египет
Египет

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

Египет
Египет
Египет

Вопрос - почему и как это победить?

Комментарии

Аватар пользователя VasyOK VasyOK 17 апреля 2011 в 2:19

Запасной вариант.

Модуль taxonomy treemenu (D6) может создать блок для конкретного родительского термина. Ну а дальше сниппетом выводить блок когда пользователь открывает страницу термина.

Точнее не скажу.

Аватар пользователя AI AI 17 апреля 2011 в 8:20

Аргументы оставить в покое, они делают свое дело.
Вариант: Во вьюхе добавить в поле "заголовок" поле типа Global: Text area и толкать туда php код по перехвату и выводу всего того, что нужно.

Вы столкнулись с любимой (и почему-то трудно решаемой) задачей Друпала - "каталог". Когда нужно сделать вывод родителей, а при переходе на конкретного родителя сделать отображение всех его дочерних элементов. Одно из решений ищите здесь: http://druit.ru/blogs/views/18 - решение не мое, но мне оно нравится. К слову сказать, после значительных доработок на одном из проектов в нужную мне сторону, от указанного кода у меня осталась не более 30%. Оптимизация и расширение функционала, понимаете ли...
В общем пилите, Шура, пилите (С).

Аватар пользователя locker locker 18 апреля 2011 в 14:51

Покопался. Сделал такой сниппет:


<?php
$tid 
arg(2);
$vid 1;

if (

is_numeric($tid)) {
  
$terms taxonomy_get_children($tid$vid);
  if (!empty(
$terms)) {
    foreach (
$terms as $tid => $term) {
     
      
$item l($term->nametaxonomy_term_path($term));
      
$output .= $item.'<br />';
    }
    return 
$output;
  }
}
?>

Даже вроде запросы к БД не понадобилось делать. Кстати такой вопрос - если нет запроса к БД и используются только встроенные функции - можно считать такой сниппет безопасным?

Аватар пользователя locker locker 18 апреля 2011 в 18:53

Ну где то читал, что все сниппеты небезопасны особенно с прямыми запросами к бд. А встроенные функции - там все оптимизировано уже.

Аватар пользователя locker locker 18 апреля 2011 в 19:44

Встроенные функции заточены как с точки зрения безопасности, так и с точки зрения оптимизации запроса. А кривые мои руки могут таких запросов наделать, что потом запаришься искать, почему сайт падает Smile

Аватар пользователя VasyOK VasyOK 18 апреля 2011 в 21:05

Делайте бекапы и не парьтесь. Пользователь volocuga сказал, что Drupal трудно убить если не лезть в базу данных. Запрос, это не лезете, это извлекаете.