Как реализовать

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

Аватар пользователя xlcq xlcq 3 марта 2007 в 11:33

Подскажите пожалуйста каким образом можно реализовать функционал, примерно как на сайте http://www.astravel.ru/.
А именно, слева меню со странами (это понятно как сделать :)), нажимаем на страну (например Китай) и справа появляеться несколько блоков-меню (Полезная информация, Туры и т.д.) где находиться ссылки на информацию по выбранной стране. См. http://www.astravel.ru/china.phtml.

Комментарии

Аватар пользователя xlcq xlcq 3 марта 2007 в 14:02

Вроде направление понял - нужно использовать Taxonomy и Views. Причем во View нужно использовать аргументы, чтобы ограничить отбор данных, например только по какому-нибудь термину из словаря. Но я никак не могу сообразить каким образом эти аргументы работают.

Есть 2 словаря:
-Country
--Китай taxonomy/term/1
--Россия taxonomy/term/2

-Topic
--Визы taxonomy/term/5
--Туры taxonomy/term/6
--Полезная информация taxonomy/term/7

Есть несколько статей котрые относяться к терминам Китай-Визы и к Россия-Визы.

Сделал View (блок) у которого в фильтрах указал отбирать только те Node, у которых Taxonomy: Term Is one of Topic:Визы.

Добавил во View аргумент Taxonomy: Term ID.

Есть меню:
-Китай - ссылается на taxonomy/term/1/all
-Россия - ссылается на taxonomy/term/2/all

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

Подскажите пожалуйста, что я делаю не так и каким образом заставить работать аргументы у View?

Аватар пользователя romandor romandor 3 марта 2007 в 14:55

1. Если сложнее но правильнее:
читайте в сторону адргументы для views
http://drupal.org/node/109604

2. Если проще и мало терминов терминов
создайте фильтры для всех комбинаций терминов и выводите блоки на нужных страницах

ну и лучше используйте два словаря, один для географии, второй по тематике

Аватар пользователя xlcq xlcq 3 марта 2007 в 14:56

Фильтры для каждого из терминов (стран) не подходит так как их пользователи системы могут добавлять сами.
Насчет докумнетации по view все прочитал, а аргументы все равно не работают Sad
У кого реально имеется практика с этим вопросом, отзовитесь!!!

Аватар пользователя Natalie Natalie 3 марта 2007 в 17:43

Я похожу штуку делала через CCK nodereference. См. последние комменты в этой теме
http://www.drupal.ru/node/2943
Наверняка можно изменить под термины и блоки.
---
---
All content management systems suck, Drupal just happens to suck less. -- Boris Mann at DrupalCON Amsterdam, August 2005.

Аватар пользователя xlcq xlcq 3 марта 2007 в 19:40

А кто-нибудь знает где можно реально почитать про аргументы во view с реальным примером или how to. Сам пока ничего не нашел Sad

Аватар пользователя Natalie Natalie 3 марта 2007 в 19:58

На drupal.org есть доки. Сама в них путаюсь.
А мой пример не подошел?
---
---
All content management systems suck, Drupal just happens to suck less. -- Boris Mann at DrupalCON Amsterdam, August 2005.

Аватар пользователя xlcq xlcq 4 марта 2007 в 14:05

Natalie, еще раз перечитал все комменты по твоей ссылке и сделать все-таки получилось Smile
Просто в нужно было вставить $args[0] = arg(2); и тогда при URL /taxonomy/term/2/all отбираются все статьи, которые отнсяться к темину с ID 2.
Не понятно почему это нигде не написано в документации к Drupal.

За помощь - спасибо :)!!!

Аватар пользователя Dan Dan 4 марта 2007 в 15:06

А при чём здесь views? По ссылке /taxonomy/term/2/all и так находятся все статьи, которые привязаны к термину 2 (и ниже).

Аватар пользователя xlcq xlcq 4 марта 2007 в 19:22

А при помощи view создается новый блок, в котором отображаются все материалы,относящиейся к определенной категории (например визы) + к выбранному термину (/taxonomy/term/2/). Т.е. один и тотже view возвращает различные результаты в зависимости от того какой пункт меню выбран.

Аватар пользователя xlcq xlcq 4 марта 2007 в 21:40

Проблема открылась заново Sad

Аргументы View настроены таким образом, что отбираются истории по выбранной категории см. приложенный файл.

Ситуация следущая:
При вызове URL http://host/country/2 данные из View возвращаются как надо. Но если я вызываю URL http://host/country/2/52 то View не возращает данных вообще. Не могу понять почему так происходит.
У кого-нибудь есть идеи?

Аватар пользователя xlcq xlcq 5 марта 2007 в 19:21

Похоже все-таки разобрался с этими View и аргументами. Сейчас опишу выводы, которые я сделал, если они не верные, интересно было бы услышать правильную версию:

1. Аргументы во View хорошая штука Smile
2. Когда View отображается в виде блока и идет вызов страницы через URL alias, то аргменты нужно считывать как будто вызов был без URL alias. Т.е. если есть alias
country/2 <-> taxonomy/term/2
То при вызове http://host/country/2 считать ID можно только из arg(2).

Этот момент меня поверг наповал. Странно - получается тогда URL aliases нужны только для визуального отображения.

3. Чтобы реализовать функциональность как я писал выше (отображение связанных тем) пришлось в поле Argument Code для моего View вставить следующий код:

if (arg(0) == 'taxonomy' && is_numeric(arg(2))) {
        $args[0] = arg(2);
} elseif (arg(0) == 'node' && is_numeric(arg(1))) {
        $nid =  arg(1);
        $result = db_query("select td.tid from node n
          left join term_node tn
          on n.nid = tn.nid
          left join term_data td
          on tn.tid = td.tid
          where n.nid = $nid and td.vid = 1"
);
        if ($result && db_num_rows($result)) {
                if ($obj = db_fetch_object($result)) {
                        $args[0] = $obj->tid;
                }
        }
}

Данный код анализирует какой URL был вызван дает в качестве аргумента к View различные значения. Минусом являеться то, что нужно знать значения поля vid, чтобы отбирать нужные категории.

Я новичок в Drupal, и некоторые моменты мне кажутся не логичными. Особенно касательно URL aliases. Может все-таки можно заставить Drupal реально видеть аргументы?

Аватар пользователя jason32 jason32 5 марта 2007 в 20:27

А кто нибудь сталкивался с сортировкой взависимости от аргумента? То есть, я привязал к категории View , по ссылке ..../node/253 берет все ноды из категории номер 253 и применяет к ним вид, всё нормально, хочется чтобы по ссылке node/253/date всё сортировалось по дате, а /node/253/comment - по кол-ву коментариев, например, или ещё по чему, неважно. Кто нибудь такое пробовал и как такое реализовать?

Аватар пользователя xlcq xlcq 5 марта 2007 в 21:47

После того как разобрался с аргментами могу сказать, что по моему можно. В коде аргмуентов нужно вытащить парметр сортировки и при помощи View API попробовать динамически установить сортировку.

Аватар пользователя jason32 jason32 6 марта 2007 в 18:50

ок , поясню поподробнее. По ссылке ... /node/253 данные вытаскиваются по аргументу - я пробовал установить несколько сортировок, но все они идут в том порядке, в котором установишь, то есть нельзя в зависимости от аргумента изменять порядок сортировок, а надо именно это. Можно ткнуть непосредственно, не вижу такого в упор, да и в английском не ахти...