настройка view c термином в аргументе при работе pathauto

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

Аватар пользователя Zigs Zigs 3 марта 2009 в 16:23

На сайте установлен pathauto для красивых ссылок. Нужно сделать отдельную view для отображения элементов отдельного термина. Вьюху создал, вот только непонятно, что указывать в типе аргумента. Url приходит типа:

http://site.ru/contenttype/category/elektronika

Вот elektronika есть алиас для термина от pathauto, при этом список аргументов вьюхи ничего не знает про pathauto, ну и естественно ничего не находится.
Как быть?

Комментарии

Аватар пользователя beerman beerman 3 марта 2009 в 17:26

в качестве аргумента views принимает значения ключей тех объектов, которые заданы в качестве аргумента.
т.е., если это selectlist, то не значения выпадающего списка подставляются в аргумент, а их ключи. так и с таксономией - tid подставляется.
если у вас жестко заданы элементы словаря, то можете для каждого прописать свой алиас.
иначе только ключи

Аватар пользователя Zigs Zigs 4 марта 2009 в 1:20

Совершенно отлично работает, если в качестве аргумента выступает TermID, т.е., как в идеале, ссылка с терминов имеет вид: taxonomy/term/TERMID, но это не красиво, поэтому подобной ссылке в PathAUto соответствует красивый алиас и аргументом, в этом случае будет являться транслитерация названия термина, а это уже совсем не ключевое значение.
Можно попробовать задавать Term Synonims, вьюха их обрабатывает как аргументы, но это уже ручная работа.
Не уверен, что я понятно объяснил ситуацию, но понимаю, что вьюха не понимает в качестве аргумента алиас, который генерит PathAuto.
Надо изыскивать другие пути дружбы этих модулей в этом контексте.

Аватар пользователя Zigs Zigs 5 марта 2009 в 18:44

Пытаюсь проблему решить следующим образом.
Как я уже писал у меня работает модуль pathauto и в таблице url_alias есть для терминов следующие записи:

scr                  dst
taxonomy/term/1     category/electronica
taxonomy/term/2     category/produkty
taxonomy/term/3     category/samolety

Сделал новую вьюху, и отображение типа Page. В качестве агрумента задал TermID, следовательно в качестве значений должны использоваться 1,2 или 3. Путь задал category/%. В качестве валидации параметра задал PHP Code и написал следующий код:

$alias = preg_replace('/^\/|\/+$/', '', request_uri());
$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), то вьюха нормально отфильтровывает записи.
Граждане, помогите, как заставить вьюфильтровать по алиасам?

Аватар пользователя каранёвы каранёвы 13 мая 2010 в 14:55

penexe wrote:
taxonomy/term/% и все

и все же, товарищи, прорыскал всё утро так и не нахожу ответа. можно ли сделать разные представления для разных словарей посредством аргументов? как можно заставить рабоать путь category/словарь/%?
как-то без taxonomy redirect и panels?

Mr Null wrote:
все несколько проще

<?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;
?>

а это куда? для чего?...

спасибо!.. Smile

Аватар пользователя penexe penexe 13 мая 2010 в 15:08

каранёвы wrote:
penexe wrote:
taxonomy/term/% и все

и все же, товарищи, прорыскал всё утро так и не нахожу ответа. можно ли сделать разные представления для разных словарей посредством аргументов? как можно заставить рабоать путь category/словарь/%?
как-то без taxonomy redirect и panels?

Mr Null wrote:
все несколько проще

<?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;
?>

а это куда? для чего?...

спасибо!.. :)


только если сделать то, что делает taxonomy_redirect, но через свой модуль

Аватар пользователя Zigs Zigs 6 марта 2009 в 12:52

Действительно. А я целый день голову ломал Smile
Может кто-нить объяснит как это работает? Мое решение кажется логичным, но к сожалению не работоспособным Smile

Аватар пользователя penexe penexe 6 марта 2009 в 15:08

"Zigs" wrote:
Действительно. А я целый день голову ломал Smile
Может кто-нить объяснит как это работает? Мое решение кажется логичным, но к сожалению не работоспособным :)

category/% будет работать в том случае если это реальный путь
приходит запрос, дру ищет такой путь в меню, если находит вызывает обработчик, если нет ищет по алиасам, если алиас есть вызывает обработчик для реального пути

у вас в category/% это реальный путь.
а category/electronica алиас для taxonomy/term/1, следовательно по пути category/electronica
вызовется реальный путь а онуже будет через вьюшку отображаться

както так

Аватар пользователя Mr Null Mr Null 15 ноября 2009 в 15:28

все несколько проще

<?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;
?>