На сайте установлен pathauto для красивых ссылок. Нужно сделать отдельную view для отображения элементов отдельного термина. Вьюху создал, вот только непонятно, что указывать в типе аргумента. Url приходит типа:
http://site.ru/contenttype/category/elektronika
Вот elektronika есть алиас для термина от pathauto, при этом список аргументов вьюхи ничего не знает про pathauto, ну и естественно ничего не находится.
Как быть?
Комментарии
в качестве аргумента views принимает значения ключей тех объектов, которые заданы в качестве аргумента.
т.е., если это selectlist, то не значения выпадающего списка подставляются в аргумент, а их ключи. так и с таксономией - tid подставляется.
если у вас жестко заданы элементы словаря, то можете для каждого прописать свой алиас.
иначе только ключи
Совершенно отлично работает, если в качестве аргумента выступает TermID, т.е., как в идеале, ссылка с терминов имеет вид: taxonomy/term/TERMID, но это не красиво, поэтому подобной ссылке в PathAUto соответствует красивый алиас и аргументом, в этом случае будет являться транслитерация названия термина, а это уже совсем не ключевое значение.
Можно попробовать задавать Term Synonims, вьюха их обрабатывает как аргументы, но это уже ручная работа.
Не уверен, что я понятно объяснил ситуацию, но понимаю, что вьюха не понимает в качестве аргумента алиас, который генерит PathAuto.
Надо изыскивать другие пути дружбы этих модулей в этом контексте.
Я делаю аргумент taxonomy/term/%/%
И динамически заменяю
taxonomy/term/TERMID/product на electronika/product
Пытаюсь проблему решить следующим образом.
Как я уже писал у меня работает модуль pathauto и в таблице url_alias есть для терминов следующие записи:
taxonomy/term/1 category/electronica
taxonomy/term/2 category/produkty
taxonomy/term/3 category/samolety
Сделал новую вьюху, и отображение типа Page. В качестве агрумента задал TermID, следовательно в качестве значений должны использоваться 1,2 или 3. Путь задал category/%. В качестве валидации параметра задал PHP Code и написал следующий код:
$url = drupal_lookup_path('source', $alias);
if ($url != false):
list($taxonomy, $term, $termID) = split('[/]', $url);
$handler->argument = $termID;
endif;
return TRUE;
Собственно суть кода проста: взять uri, найти по нему сорс и вытащить из него последний аргумент, который и будет тем самым TermID, который нужно подставить в качестве значения аргумента. Этот код замечательно работает в любом месте, но только не в валидации параметра. Почему... непонятно.
К тому же, если в непосредственно в урл поставить ID (например, category/2), то вьюха нормально отфильтровывает записи.
Граждане, помогите, как заставить вьюфильтровать по алиасам?
taxonomy/term/% и все
и все же, товарищи, прорыскал всё утро так и не нахожу ответа. можно ли сделать разные представления для разных словарей посредством аргументов? как можно заставить рабоать путь category/словарь/%?
как-то без taxonomy redirect и panels?
а это куда? для чего?...
спасибо!..
только если сделать то, что делает taxonomy_redirect, но через свой модуль
Действительно. А я целый день голову ломал
Может кто-нить объяснит как это работает? Мое решение кажется логичным, но к сожалению не работоспособным
category/% будет работать в том случае если это реальный путь
приходит запрос, дру ищет такой путь в меню, если находит вызывает обработчик, если нет ищет по алиасам, если алиас есть вызывает обработчик для реального пути
у вас в category/% это реальный путь.
а category/electronica алиас для taxonomy/term/1, следовательно по пути category/electronica
вызовется реальный путь а онуже будет через вьюшку отображаться
както так
Ну примерно так я и думал, спасибо большое за внятное разъяснение.
Вам стотыщпицот
все несколько проще
<?php
$alias = "category/".$argument;
$url = drupal_lookup_path('source', $alias);
if ($url != false):
list($taxonomy, $term, $termID) = split('[/]', $url);
$handler->argument = $termID;
endif;
return TRUE;
?>
Для семерки такое тоже актуально. Спасибо, пригодилось.