Все привет!
Имею словарь: bomond, в нем термины, moda, sobytiya, tendencii, zvezdy (шаблон словаря: [term:vocabulary]/[term:root]/[term:name] )
bomond/moda/sobytiya taxonomy/term/6
bomond/moda/tendencii taxonomy/term/5
bomond/zvezdy taxonomy/term/3
Шаблон для статьи: ( [node:title] )
kollekciya-chanel-osen-zima-2011-2012 node/1
kollekciya-dolce-gabbana-osen-zima-2011-2012 node/2
Подскажите как сделать так чтобы чтобы статьи (ноды) открывались вместе с ЧПУ словаря и термина, к примеру так:
bomond/moda/sobytiya/kollekciya-dolce-gabbana-osen-zima-2011-2012
Комментарии
Подпишусь, вчера не добрался до этого. Если сегодня найду быстрее чем ответят, напишу.
готовое решение вряд ли существует (хотя не настаиваю - и послушаю других докладчиков на этот счет)
хотя бы потому, что у ноды может быть несколько словарей - по какому из них в таком случае стоить алиас, и как регламентировать выбор словаря для построения?
посоветую расковырять модуль token_example из examples - и, взяв его за основу, создать необходимый токен, который использовать в pathauto
В 6 по самому главному(по весу)словарю формировался алиас.
У меня словарь с вложенностью - 1 уровень. Т.е. если присваивается термин 1 уровня, нужно найти и родителя, чтобы адрес был таким раздел/подраздел/тайтл
В общем такой на данный момент расклад:
1 Скачиваем и устанавливает Custom Tokens
2 Создал токен для главного термина (словарь articles):
Token name - taxo_term, Token type - Материал[needs: node]
PHP replacement
<?php
$temp_node = $data['node'];
if(isset($temp_node->field_articles["ru"][0]["tid"])) {
$term_depth=db_query("SELECT parent FROM {taxonomy_term_hierarchy} WHERE tid = :tid_s", array(':tid_s'=>$temp_node->field_articles["ru"][0]["tid"]));
foreach ($term_depth as $row) {$term_depth=$row->parent;}
if($term_depth>0){
$sql=(db_query("SELECT alias FROM {url_alias} WHERE source=:term LIMIT 1",array(':term'=> 'taxonomy/term/'.$term_depth)));
foreach ($sql as $row) {$return=$row->alias;}
}else
{
$sql=db_query("SELECT alias FROM {url_alias} WHERE source=:term LIMIT 1",array(':term'=> 'taxonomy/term/'.$temp_node->field_articles["ru"][0]["tid"]));
foreach ($sql as $row) {$return=$row->alias;}
}
}else {
$return = "articles"; }if($return=='')$return = "articles";
return $return;
?>
3 Создал токен для подтермина:
Token name - taxo_term_next, Token type - Материал[needs: node]
PHP replacement
<?php
$temp_node = $data['node'];
if(isset($temp_node->field_articles["ru"][0]["tid"])) {
$term_depth=db_query("SELECT parent FROM {taxonomy_term_hierarchy} WHERE tid = :tid_s", array(':tid_s'=>$temp_node->field_articles["ru"][0]["tid"]));
foreach ($term_depth as $row) {$term_depth=$row->parent;}
if($term_depth>0){
$sql=db_query("SELECT alias FROM {url_alias} WHERE source=:term LIMIT 1",array(':term'=> 'taxonomy/term/'.$temp_node->field_articles["ru"][0]["tid"]));
foreach ($sql as $row) {$return=$row->alias;}
}else
{
$return = "";
}
}else {
$return = ""; }return $return;
?>
UP:( убрал один "ручной" запрос, + поправил баг, который появился после изменения чпу для подтермина (вариант выше работал если подтермин имел адрес term-name, а не parent-term-name/term-name))
В п.2 тоже можно убрать "ручной" запрос.
+ $temp_alias=explode("/",drupal_get_path_alias("taxonomy/term/".$temp_node->field_articles["ru"][0]["tid"]));
- foreach ($sql as $row) {$return=$row->alias;}
+ if(isset($temp_alias[1]))$return=$temp_alias[1]; else $return=$temp_alias[0];
4 В настройках адреса (сбросить кэш) - [node:taxo-term]/[node:taxo-term-next]/[node:title]
Если че напарил, извиняйте, ткните носом.
Интересуют и другие варианты, если кто что знает, пишите.