реализация таксономии
Прислано: cap
ср, 22/08/2007 - 13:11
Столкнулся с такой проблемой, что не пойму как правильно реализовать словари.
Есть такая структура:
Город
-Рубрика
--Подрубрика
--- Объект
если пихать все в один словарь,то получается что для каждого города надо повторять
-Рубрика
--Подрубрика
а есть ли другой способ при котором бы сохранялись все связи
- cap's blog
- Для комментирования войдите или зарегистрируйтесь
Нужно завести 2 словаря: один с городами, а другой с рубриками/подрубриками и отметить целевой тип материала в этих словарях. Теперь для каждого материала нужно выбрать город и рубрику/подрубрику.
- Для комментирования войдите или зарегистрируйтесь
я так пробовал, но при таком подходе при выборе города, не отображаются рубрики и подрубрики,а сразу ноды
- Для комментирования войдите или зарегистрируйтесь
мне необходимо реализовать такой вид:
сначала появляется страница с названиями городов, дальше при выборе города появляется страница с рубриками ,при выборе рубрики появляются подрубрики и уже при выборе подрубрики появляются ноды привязанные к выбранному городу
например как здесь http://www.irr.ru
заранее благодарен
- Для комментирования войдите или зарегистрируйтесь
Я делал так, как сказал mr. Gres. Только с выводом тут беда. Стандартом не обойтись. Пришлось писать свой модуль по выводу такого вида.
В основе этого модуля лежат ссылки "taxonomy/term/1,2"
- Для комментирования войдите или зарегистрируйтесь
добрый человек может поделишся таким замечательным модулем, если есть конечно такая возможность?
- Для комментирования войдите или зарегистрируйтесь
правильно реализовать словари
IMHO
1) Словарь - город, словарь - рубрики (по логике они не связанные свойства)
2) Необходимо реализовать выбор материала по рубрикам при отборе определенного города
Решение
1.1 Создать views с VIEW TYPE например teaser list
1.2 ARGUMENT -> term name / summary, sort ascending / %1
FILTERS vocabulary name -> города
EXPOSED FILTERS -> taxonomy: terms for -> рубрики
Результат: на странице views выбираем город, получаем группированные ссылки по рубрикам с количеством материалов к каждой, нажимаем на ссылку - получаем список teaser материалов.
P.S. special v.s. for модулям VIEWS
VIEWS_BONUS ( for SUMMARY)
Дело в том, что это у Вас сейчас два словаря, а когда из станет больше, придете к тому, что надо EXPOSED FILTERS использовать на второй странице + списки увеличатся будут не помещаться на странице - опять фильтр начнете использовать. Или у вас есть другие предложения ?
- Для комментирования войдите или зарегистрируйтесь
ок всем большое спасибо.
уже попробовал но пока ничего не получилось, видимо точно делаю что-то не так.
1.создал словарь города
в нем сейчас два города
- москва
- нижний новгород
2. создал страницу с городами
здесь у меня для примера две ссылки на города
ссылку на город беру из словаря,наведя на него курсор
3.создал вью с выше описанными параметрами и назначил его для страницы с городами
но при выборе города просто сразу вылазит конечная нода, а не сначала рубрики и все остальное
- Для комментирования войдите или зарегистрируйтесь
а кажется понял, ето придется этот вью для каждого города указывать?
- Для комментирования войдите или зарегистрируйтесь
Что бы не писать view для каждого города в Вашем случае поставьте во view- type -> BONUS: summary + full views,
в ARGUMENT поставить -> term ID -> ... -> %1 , а summary убрать :)
Сделали, а вот теперь представьте у Вас 200 городов, спрасите у себя как пользователь будет их отбирать ? Через меню или через фильтр удобней ?
- Для комментирования войдите или зарегистрируйтесь
на счет выбора города, может я что-то не понял,но я писал что хочу как здесь http://www.irr.ru/changeRegion,,,34.html
и считаю что это удобней список или чтото другое.
что-то пока ничего у меня не получается, с друпалом начал разбираться совсем недавно, думаю мне надо в этом views поковыряться хорошенько,потому что мне кажется делаю чтото не так.
- Для комментирования войдите или зарегистрируйтесь
как здесь http://www.irr.ru/changeRegion,,,34.html
1) В прикрепленном файле импорт для views (материал advertise )
2) Импорт на странице admin/build/views/import
3) В filter ( порядок важен, если поменяете последовательность фильтров то внесите изменение в Argument Handling Code)
у меня второй после материала, выбрать свой Taxonomy: Terms for ...
4) Поменяйте vid в поле Argument Handling Code:
Вам надо только зайти на страницу admin/content/taxonomy навести курсор на пересечение столбца operation строки названия category "Города" ( заменить там где 1 level - число '7' ), "Рубрика" ( заменить там где 2 level - число '8' )
;
5) использовать при вызове страницы ad (сокращение от advertise )
P.S. совершенно IMHO мерзкий подход, на время кодировки поставил "дворник" на монитор.
$view = new stdClass(); $view->name = 'ad'; $view->description = 'ad'; $view->access = array ( ); $view->view_args_php = 'if(empty($args[0])) { unset($view->filter[1]); $view->filter[2][\'value\'] = array(0 => \'7\'); // "7" this is VID 1 LEVEL ! $view->filter[2][\'operator\'] = \'OR\'; } else { $result = db_query("SELECT vid, name FROM {term_data} t WHERE t.tid = \'%s\'", $args[0]); while($terms = db_fetch_array($result)) { $vids[] = $terms[\'vid\']; $names[] = $terms[\'name\']; break; } if($vids[0] == \'7\') { $view->filter[1][\'value\'] = array(0 => $names[0]); // "$names[0]" this is TERM->NAME $view->filter[1][\'operator\'] = \'OR\'; $view->filter[2][\'value\'] = array(0 => \'8\'); // "8" this is VID 2 LEVEL ! $view->filter[2][\'operator\'] = \'OR\'; $view->page_title .= \' - \'.$names[0]; unset($args[0]); } else { unset($view->filter[1]); unset($view->filter[2]); $view->page_title .= \' - \'.$names[0]; } } $view->is_cacheable = 0; $view->query = \'\'; views_sanitize_view($view); return $args; '; $view->page = TRUE; $view->page_title = 'ad'; $view->page_header = ''; $view->page_header_format = '1'; $view->page_footer = ''; $view->page_footer_format = '1'; $view->page_empty = ''; $view->page_empty_format = '1'; $view->page_type = 'teaser'; $view->url = 'ad'; $view->use_pager = TRUE; $view->nodes_per_page = '10'; $view->sort = array ( ); $view->argument = array ( array ( 'type' => 'taxid', 'argdefault' => '4', 'title' => '%1', 'options' => '', 'wildcard' => '', 'wildcard_substitution' => '', ), ); $view->field = array ( ); $view->filter = array ( array ( 'tablename' => 'node', 'field' => 'type', 'operator' => 'OR', 'options' => '', 'value' => array ( 0 => 'advertise', ), ), array ( 'tablename' => 'term_node_7', 'field' => 'tid', 'operator' => 'NOR', 'options' => '', 'value' => array ( ), ), array ( 'tablename' => 'term_data', 'field' => 'vid', 'operator' => 'OR', 'options' => '', 'value' => array ( 0 => '7', ), ), ); $view->exposed_filter = array ( ); $view->requires = array(node, term_node_7, term_data); $views[$view->name] = $view;
- Для комментирования войдите или зарегистрируйтесь
большое спасибо за советы,а на счет "P.S. совершенно IMHO мерзкий подход,",
хотелось бы ваше решение посмотреть,может оно мне подойдет.
- Для комментирования войдите или зарегистрируйтесь
вопщем не стал возиться с вьюс и написал свой модуль,если комуто такой надо пишите
ps. единственно что на данный момент он не совершенен ,но я его сейчас буду оптимизировать и причесывать
- Для комментирования войдите или зарегистрируйтесь
О ! Спасибо, что хоть предупредили - будем знать как в будущем на Ваши вопросы реагировать :)
- Для комментирования войдите или зарегистрируйтесь
да? что-то тут не совсем понял в каком смысле)
- Для комментирования войдите или зарегистрируйтесь
А что понимать модуль выложите пожалуйста, чтобы страждущие могли использовать, для Вас же старались, а вы чем ответите ?
- Для комментирования войдите или зарегистрируйтесь
выкладываю, но как и говорил он еще очень сырой и кривой,но кому надо сможет из него сделать конфетку.
пожалуйста не жалко.
когда будет готова моя доделанная версия то выложу и ее
- Для комментирования войдите или зарегистрируйтесь
Вот и спасибо, а тот тут вопросы с группировкой таксаномии чуть ли не каждый день появляется, кстати и отладить помогут :)
- Для комментирования войдите или зарегистрируйтесь
Кто-нибудь смотрел модуль? У меня точно такая-же задача возникла..
В принципе, taxonomy_menu отлично справляется с задачей - выводит дерево и соответсвующие ноды. Вот бы еще город пользователя как-то запомнить..
А такой вариант не пройдет - использовать для категорий taxonomy_menu, основанный на wiews с аргументом "Город"?
- Для комментирования войдите или зарегистрируйтесь
Пробую решить с помощью ml_directory ( http://www.drupal.ru/node/11729 ).
- Для комментирования войдите или зарегистрируйтесь




Комментарии