Выбор материалов

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

Аватар пользователя retuam retuam 20 декабря 2009 в 2:35

Есть такая задача, не знаю как решить.
1. Есть материалы "Страна" и "Курорт".
2. "Курорт" ссылается (node_reference) на "Страну".
Вопрос в том, что надо отобразить все материалы типа "Курорт", которые ссылаются на материал типа "Страна", на который ссылается открытая нода "Курорта".
Например: Есть страна "Болгария", к которой привязаны два курорта "Банско" и "Балчик", необходимо вывести заголовки этих двух курортов на нодах "Балчик" и "Банско".

Комментарии

Аватар пользователя retuam retuam 20 декабря 2009 в 20:40

Бьюсь уже целый день, пока остановился на решении с помощью SQL запроса к базе данных.

Крутил следующие варианты:
1. Display "Node Content" и Attachment во Views.
2. Модуль Associated Nodes так же не решил мою проблему.
3. Варианта передачи в качестве аргумента Views значение CCK поля node_reference (Курорта->Страна), я не нашел.
4. Посольку я не категоризировал "Страны" и "Курорты", то решения типа http://www.drupal.ru/taxonomy/term/1890 мне, увы, не подходит.
5. До вчерашнего дня использовал совершенно примитивный вариант - запихнул все "Страны" и "Курорты" в меню, так же достаточно динамично, если учесть, что каждой ноде можно задавать родителя и прописывать меню, но обратной дороги у меня нет, перелопатить 800 материалов можно, но не хочется, кст., если node_reference вида "один к одному" - вариант отличный.
6. Можно так же всем материалам типа "Курорт" проставить ссылки на аналогичные материалы с помощью node_reference, т.е. завязат все "Курорты" страны между собой, но это еще дольше чем п.5. Lol

В итоге я остановился на том, что решил сделать выборку из базы с помощью SQL запроса и вывести в блоке. Осталось теперь написать правильный запрос. :(((

Аватар пользователя retuam retuam 21 декабря 2009 в 1:08

<?php
$result = db_query("Собственный SQL запрос, который выбирает необходимые мне данные / в слое абстрации друпала = %d", $node->nid);

$items = array();
while ($row = db_fetch_object($result)) {
$items[] = l($row->title, "node/".$row->nid);
}

$output = theme('item_list', $items);

print $output;
?>
Решил не размещать в PHP-фильтр, а вставил код в page-resort.tpl.php, созданный для курортов по URL, пользуя сниппет http://www.drupal.ru/node/36403.
Теперь осталось с помощью CSS настроить как угодно и можно пользоваться. Проблема в незначительном увеличении времени загрузки страницы, но этим приходится жертвовать.