2010-08-26 61 views
1

在Drupal 6中使用pathauto和token模塊可以使用如下模式創建url別名:[termpath-raw]/[title-raw]。Drupal 7 termpath在哪裏?

但是,在Drupal 7中情況並非如此。我知道D7仍然處於alpha版本,但測試版本很快就會在這裏發佈,並且它比D6 IMO更好。

此功能尚未推出?

回答

3

在Drupal 7的,字路徑意味着什麼很具體,很明顯的東西比什麼TERMPATH將引用不同,它看起來並不像有更換[*path]令牌,只是還沒有采取任何已行動(雖然這是一個已知問題):BIKESHED: Token for a term or menu item's entire tree/hierarchy

它看起來並不會成爲核心,並將保留一部分的貢獻令牌,甚至#D7CX承諾的項目,直到最終發佈完成他們的Drupal 7端口,這可能是接近年底。

+0

很酷,謝謝Mark! – Booski 2010-08-26 19:59:09

1

令牌模塊共同維護者在這裏。這裏有更多的工作,因爲分類標記不是很簡單。他們現在是字段,而且我們還沒有爲D7字段寫入令牌支持。這是我們必須完成的事情。

1

我已經打破了我腦袋一下這個問題了好幾個月,現在我終於發現,似乎工作的解決方案:

http://drupal.org/node/741914#comment-5025862

總之,我創建了一個公開的幾個自定義模塊額外的令牌(可以在頁面標題或pathauto等模塊中使用)。在代碼隱藏中,令牌由節點或分類術語的完整分層分類路徑(有針對url的令牌和針對頁面標題的其他令牌)替換。

實際的實現可以在鏈接頁面的討論中找到。

我希望這可能會幫助一些人自己的實現。

0

您可以使用帶the issue queue補丁的taxonomy_entity_index模塊。唯一非常糟糕的是,您必須使用Drush命令在工作網站上構建索引,或以某種方式重新導入當前網站的內容。

0

我不記得在哪個沙箱項目中我發現了這個,但它是完美的解決方案。

taxonomy_path_token.info

name = Taxonomy Path Token 
description = Taxonomy path token creates a path of parent taxonomy terms of a node 
package = Token 
core = 7.x 

dependencies[] = token 

taxonomy_path_token.module

<?php 

/** 
* Implements hook_tokens(). 
*/ 
function taxonomy_path_token_tokens($type, $tokens, array $data = array(), array $options = array()) { 
    $replacements = array(); 

    if (!empty($tokens['taxonomy_path']) && !empty($data['node'])) { 
    if(!empty($options['sanitize'])) { 
     $sanitize = $options['sanitize']; 
    } else { 
     $sanitize = FALSE; 
    } 

    $node = $data['node']; 
    $replacements[$tokens['taxonomy_path']] = $sanitize ? check_plain(taxonomy_path_token_get_parents($node)) : taxonomy_path_token_get_parents($node); 
    } 

    if ($type == 'array' && !empty($data['array'])) { 
    $array = $data['array']; 

    foreach ($tokens as $name => $original) { 
     switch ($name) { 
     case 'join-path-except-first': 
      module_load_include('inc', 'pathauto'); 
      $values = array(); 
      foreach (element_children($array) as $key) { 
      $value = is_array($array[$key]) ? render($array[$key]) : (string) $array[$key]; 
      $value = pathauto_cleanstring($value); 
      $values[] = $value; 
      } 
        array_shift($values); 
      $replacements[$original] = implode('/', $values); 
      break; 
     } 
    } 
    } 

    return $replacements; 
} 

/** 
* Implements hook_token_info(). 
*/ 
function taxonomy_path_token_token_info() { 
    $info['tokens']['node']['taxonomy_path'] = array(
    'name' => t('taxonomy_path'), 
    'description' => t('Custom taxonomy_path token.'), 
); 

    $info['tokens']['array']['join-path-except-first'] = array(
    'name' => t('Joined path'), 
    'description' => t('The array values each cleaned by Pathauto and then joined with the slash into a string that resembles an URL.'), 
); 

    return $info; 
} 

function taxonomy_path_token_get_parents($node) { 
    module_load_include('inc','pathauto','pathauto'); 

    if(!empty($node->field_tags)){ 
     $tid = current($node->field_tags); 
     $tid = $tid[0]['tid']; 
    } 
    else{ 
    return ''; 
    } 

    $parents = taxonomy_get_parents_all($tid); 
    $paths = array(); 

    foreach ($parents as $parent) { 
    $paths[] = pathauto_cleanstring($parent->name); 
    } 

    $paths = array_reverse($paths); 
    array_shift($paths); 
    $pathauto = implode('/', $paths); 

    return $pathauto; 
} 

那麼這個 「[節點:taxonomy_path]/[節點:標題]」 添加到您的pathauto模式。