1

Drupal 6 で pathauto および token モジュールを使用すると、[termpath-raw]/[title-raw] のようなパターンを使用して URL エイリアスを作成できました。

ただし、これは Drupal 7 には当てはまりません。D7 はまだアルファ版であることは理解していますが、ベータ版は間もなくリリースされるようで、D6 IMO よりもはるかに優れています。

この機能はまだ利用できませんか?

4

5 に答える 5

3

Drupal 7 では、パスという単語は非常に具体的なものを意味し、明らかにtermpathが参照するものとは異なるものであり、トークンを置き換えるためのアクションは[*path]まだ行われていないようです (既知の問題ですが): BIKESHED : 用語またはメニュー項目のツリー/階層全体のトークン

また、それはコアにはなりそうになく、contrib Token の一部のままであり、#D7CX が約束したプロジェクトでさえ、最終リリースまで Drupal 7 への移植を完了する必要があります。年。

于 2010-08-26T19:53:54.310 に答える
1

私はこの問題について数ヶ月間頭を悩ませてきましたが、ついにうまくいくと思われる解決策を見つけました:

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

要するに、いくつかの追加のトークン (ページ タイトルやパスオートなどのモジュールで使用できる) を公開するカスタム モジュールを作成しました。コード ビハインドでは、トークンはノードまたは分類用語の完全な階層分類パスに置き換えられます (URL を対象とするトークンと、ページ タイトルを対象とするトークンがあります)。

実際の実装は、リンクされたページの議論で見つけることができます。

これが、独自の実装で一部の人々に役立つことを願っています。

于 2011-09-23T07:45:31.430 に答える
1

トークン モジュールの共同メンテナはこちら。タクソノミー トークンはそれほど単純ではないため、ここではさらに多くのことが行われています。それらはフィールドになりましたが、D7 フィールドのトークン サポートはまだ作成していません。しかし、それは私たちが成し遂げなければならないことです。

于 2010-09-23T00:16:46.860 に答える
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 パターンに追加します。

于 2012-12-05T13:22:42.810 に答える
0

問題キューからのパッチでtaxonomy_entity_indexモジュールを使用できます。本当に悪いことは、Drush コマンドを使用して作業中のサイトにインデックスを作成するか、何らかの方法で現在のサイトのコンテンツを再インポートする必要があることです。

于 2012-09-28T13:26:25.590 に答える