Вопрос по отображению материалов, имеющих такой же родительский термин таксономии, что и открытый материал.

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

Аватар пользователя sysdimon sysdimon 13 сентября 2012 в 14:41

Добрый день!

Начал изучать Друпал на конкретном примере, возникли два вопроса.

Условия.
Есть сайт с каталогом коттеджей в Московской области.
1. Создан словарь таксономии, определяющий местоположение объекта, вида:

-Восток
--Щелковское шоссе
--Рязанское шоссе
--Носовихинское шоссе
--Новорязанское шоссе
--Егорьевское шоссе
--Горьковское шоссе
-Север
--Ярославское шоссе
--Дмитровское шоссе
--Рогачевское шоссе
--Осташковское шоссе
--Алтуфьевское шоссе

2. Создан тип материала с полями:
Местоположение(ссылка на термин из словаря)
Стоимость (числовое значение).

Вопросы.

Средствами Views необходимо создать:

1. Блок, в котором будут выводиться объекты, находящиеся в том же районе (то есть, материалы с таким же родительским термином), что и открытый объект. То есть, когда открыт объект, находящийся на Рязанском шоссе, в блоке должны быть выведены объекты, находящиеся на Щелковском, Носовихинском и тд. шоссе из региона Восток.

2. Блок, в котором будут выводиться объекты, находящиеся в том же ценовом диапазоне(то есть, в диапазоне +-10000 от значения поля Стоимость открытого объекта), то есть, если открыт объект стоимостью 50000, в блоке должны выводиться объекты со стоимостью от 40000 до 60000.

Гугление что-то не дало мне результатов.
Заранее благодарю за участие и прошу прощения, если уже обсуждалось - не нашел, честно.

Комментарии

Аватар пользователя Koreychenko Koreychenko 13 сентября 2012 в 16:07

Я бы сделал так. Создаете вьюс с аргументами термин таксономии и цена в интервале +-100000.

Сохраняете.

В блок вставляете следующую конструкцию.

<?php
if ((arg(0)=='node') && (is_numeric(arg(1)))) {
$node=node_load(arg(1));
print views_embed_view('our_views','default', $node->field_catalog, $node->field_price);
}
?>

Последние 2 значения в функции - это аргументы. Они написаны не правильно, просто для вашего понимания. Чтобы понять что у вас где лежит можно вывести var_dump($node); в шаблоне node.tpl.php

Аватар пользователя sysdimon sysdimon 14 сентября 2012 в 11:21

"Koreychenko" wrote:

Спасибо за ответ.
Я прошу прощения, но мне непонятно, как конкретно задавать условия соответствия родительскому термину и числовому диапазону.

Да. И неясно, если в условии уже прописано, что открыта нода, зачем ее опять загружать в переменную $node?

Аватар пользователя sysdimon sysdimon 20 сентября 2012 в 14:59

Я так понял и в первом и во втором случае необходимо создавать контекстные фильтры. Ну, я и создаю, только ничего не работает.

1. Для отображения объектов в том же районе создаю контекстный фильтр по термину таксономии с глубиной, задаю глубину "-1", беру термин из URL. Результат - выводятся объекты только с таким же термином, глубина "-1" почему-то не срабатывает так, как написано в аннотации.

2. Для отображения объектов в том же ценовом диапазоне создаю контекстный фильтр по цене, аргумент беру из $node->field_price. Только вот незадача - контекстный фильтр берет одно конкретное значение, а как задать диапазон - не могу понять.

Ребят, подскажите, что да как, пожалуйста.

Аватар пользователя sysdimon sysdimon 21 сентября 2012 в 11:53

Решил с первым вопросом.

Решение:

Создал контекстный фильтр по термину таксономии с глубиной, задал глубину 1, задал значение по умолчанию PHP-код следующего содержания:
if (arg(0)=='node' && is_numeric(arg(1))){
$node = node_load(arg(1));}
$par_term = array_shift(taxonomy_get_parents($node->field_place['und'][0]['taxonomy_term']->tid));
return $par_term->tid;

Ну и заработало...