Drupal 7 termpath在哪里?

时间:2010-08-26 18:20:32

标签: drupal drupal-7

使用Drupal 6中的pathauto和token模块允许你使用如下模式创建url别名:[termpath-raw] / [title-raw]。

然而,在Drupal 7中情况并非如此。我知道D7仍处于alpha状态,但测试版看起来很快就会出现在这里,它比D6 IMO好得多。

此功能尚不可用吗?

5 个答案:

答案 0 :(得分:3)

在Drupal 7中,单词 path 意味着一些非常具体的东西,显然与 termpath 所指的东西不同,并且它看起来不像是尚未采取行动取代[*path]令牌(虽然这是一个已知问题):BIKESHED: Token for a term or menu item's entire tree/hierarchy

看起来它似乎不会成为核心,并且将继续作为contrib Token的一部分,甚至#D7CX承诺的项目都要到最终版本才能完成他们的Drupal 7端口,这可能接近于今年年底。

答案 1 :(得分:1)

令牌模块共同维护者在这里。这里有更多的工作,因为分类标记不是很简单。它们现在是字段,我们还没有为D7字段编写令牌支持。这是我们必须完成的事情。

答案 2 :(得分:1)

我几个月来一直在解决这个问题,我终于找到了一个似乎有效的解决方案:

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

简而言之,我创建了一个自定义模块,它暴露了一些额外的令牌(可以在页面标题或pathauto等模块中使用)。在代码隐藏中,令牌被节点或分类术语的完整层次分类法路径所取代(有针对URL的标记和针对页面标题的其他标记)。

实际的实现可以在链接页面的讨论中找到。

我希望这可以帮助一些人实现自己的目标。

答案 3 :(得分:0)

您可以将taxonomy_entity_index模块与the issue queue中的补丁一起使用。唯一真正糟糕的是你必须使用Drush命令在工作站点上构建索引或以某种方式重新导入当前站点的内容。

答案 4 :(得分: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;
}

然后将这个“[node:taxonomy_path] / [node:title]”添加到你的pathauto模式中。