web-dev-qa-db-ja.com

URLに%20なしでURLエイリアスを生成する方法は?

URLエイリアスの生成に使用されているカスタムフィールドがあります。

私たちが発見した1つの問題は、ページを「URLエイリアスの自動生成」に設定し、URLパターンを「[node:field_custom_url] "、" %20 "スペースがあるべき場所。

以下を実行しましたが、何も機能しないようです。他に何を設定する必要があるかを確認するために支援が必要でした。理想的には、スペースは「-" の代わりに "%20"。 何かご意見は?

現在の設定(admin/config/search/path/settings):

  • パスパターン= "[node:field-custom-url]"([node:field_custom_url]を試しましたが、機能しませんでした)
  • 新しいエイリアスを作成します。古いエイリアスを削除します。 =有効
  • 区切り文字= "-"
  • エイリアスを作成する前に文字変換=有効
  • 文字列を文字と数字に減らす
3
sf_admin819

フィールドトークンがpathauto_clean_token_values内の条件を満たしていません。具体的には、トークン名に予約済みのワードurl]が含まれているためです。

関数 pathauto_clean_token_values を参照してください:

function pathauto_clean_token_values(&$replacements, $data = array(), $options = array()) {
  foreach ($replacements as $token => $value) {
    // Only clean non-path tokens.
    if (!preg_match('/(path|alias|url|url-brief)\]$/', $token)) {
      // Convert language object into language code before pathauto_cleanstring().
      if (isset($options['language']->language)) {
        $options['langcode'] = $options['language']->language;
      }
      $replacements[$token] = pathauto_cleanstring($value, $options);
    }
  }
}

以下を検索するpreg_matchがあります。

  • path]
  • alias]
  • url]
  • url-brief]

トークン名に含まれている場合、[node:field_custom_url]トークンは3番目のパターンurl]に失敗します。そのため、スペースがセパレーターで置き換えられることはありません。上記のリストで終わらないようにフィールドマシン名を変更する必要があります。

1
Beebee

私が最初に間違って書いたことが証明されました、@ Beebeeに感謝します。

pathautoモジュールのコードを読みました。モジュールは、スペースを定義されたセパレータで置き換えた後、トークンの置き換えを実装します。したがって、構成による手掛かりはありません。モジュールの設計上の不具合だと思います。

pathautoモジュールは、トークン名がパターン/(path|alias|url|url-brief)\]$/と一致しない場合にのみ、URLをクリーンアップします。 function pathauto_clean_token_values()にあります。明らかに、モジュール作成者はURLエイリアスが2度クリーンになるのを防ぎたいと考えています。フィールド名はcustom_urlなので、チェックからエスケープされます。

前に述べたように、フィールド名を変更するか、独自のモジュールを作成することで、これを修正できます。


カスタムモジュールの作成方法を知っている場合。目的のために hook_pathauto_alias_alter を実装することをお勧めします。

/**
 * Implements hook_pathauto_alias_alter().
 */
function mymodule_pathauto_alias_alter(&$alias, array &$context) {
  $separator = variable_get('pathauto_separator', '-');
  $alias = preg_replace('/\s+/', $separator, $alias);
}
3
Jimmy Ko

文字変換 モジュールを見てください。それに関するいくつかの詳細(プロジェクトページから、それにいくつかの太字のマークアップが追加されています):

一方向の文字変換(ローマ字表記)を提供し、アップロード中に不要な文字を置き換えることによりファイル名をクリーンアップします。

一般的には、Unicodeテキストを受け取り、それをUS-ASCII文字(全世界で表示可能なアクセントなしの文字)で表現しようとします。これは、他の書記体系でテキストによって表現された発音をローマ字に変換することを試みます。

ただし、URLの文字変換を使用するかどうか( Pathauto 2.x を使用する場合)は、個人的な好みの問題です。 ...

3
Pierre.Vriens