Drupalが多言語ビューページをリダイレクトしないようにするにはどうすればよいですか?


8

私が持っているビューつまり、私は言語ごとに異なるURLを必要とする多言語ウェブサイト内のページを:

  • es:mysite / apartamentos。
  • en:mysite / appartments。
  • fr:mysite / appartements。
  • ru:mysite / arendu。

各言語(mysite / appartmentsですが、私のサイトのデフォルト言語はスペイン語です)のURLエイリアスを作成したので、のスペイン語エイリアスなどappartmentsですapartamentos。これらのエイリアスはを使用して作成しましたconfiguration >> Search and Metadata >> URL aliases >> add alias

結果をフィルター処理するためにビューにクエリパラメーターを渡さなければならないので、私のURLはmysite / en / appartments / p / location_field / 2のようになり、次のようなアクションを手動で配置するフォームができます。

echo "/".$language."/".$translated_page

翻訳されたページがアパルタメント、アパート、アパート、アレンドゥである場合、アクションURLを作成します:

/ es / apartamentos、/ fr / appartements、/ en / appartmentsおよび/ ru / arendu

私の問題は、このフォームが送信されると、Drupalが私に

mysite / es / appartments / p / location_field / 2

の代わりに

mysite / es / apartamentos / p / location_field / 2

すべての言語で同じことが起こります。残りの部分は問題なく見え、(URLを使用して生成された)パンくずも正しく見えます(Inicio >> Apartamentos Costa Dorada、スペイン語)。

言語スイッチを使用すると、正しい翻訳されたページにリダイレクトされますが、クエリパラメータはありmysite/es/appartments/p/location_field/2ません(それからに送信されますmysite/es/apartamentos)。

この問題の原因がわからないので、クエリパラメータがエイリアスの解釈を妨げている可能性があります。

:多くの翻訳モジュールが有効になっています。ための国際化モジュールがある:ブロック、フィールド、メニュー、ノード、パス、文字列、分類、翻訳(翻訳セット)、変数およびビュー。


回答:


6

i18n_pathサブモジュール

i18nモジュールも使用していると思います。したがって、i18n_pathサブモジュールも有効にしてください(=パス変換)。コミュニティのドキュメント(太字のマークアップをここに追加)からの詳細:

...お互いの翻訳である既存のページを一緒にマップすることができます。これにより、ユーザーは言語スイッチャーを使用して、関連するページ間を移動できます。

このモジュールは、他の方法では変換として一緒にマッピングできないパスを変換する最後の手段として使用することを目的としています。たとえば、翻訳されたノードへのパスはコンテンツ翻訳モジュールにすでにリンクされており、翻訳された分類用語へのパスは分類翻訳モジュールにリンクされています。パス変換は、ビューやパネルによって提供されるパスなどの一般的なパスをリンクするために使用する必要があります

特定のパスの変換を設定するには、[構成]> [地域と言語]> [変換セット]> [パス]に移動して[パス変換を追加]をクリックし、パス変換セットを作成する必要があります。

i18nページビュー

i18nページビューモジュールを使用して機能させることができるかどうかを確認することもできます。プロジェクトページの詳細:

...ビューの新しい表示を提供します。ここで、サイトで有効になっている言語ごとに異なるパスを選択できるため、ビューには言語ごとにローカライズされたルートがあります。

注1:「パスを変換するオプションがビューに見つからない場合」(以下のコメントのように)は、問題2389535のコメント#1に記載されている内容を確認することをお勧めします。

...ビューを作成したときに、i18nページ表示ではなくページ表示を選択した可能性があります。正しいビュー表示を選択したことを確認してください。私は助けるためにいくつかのスクリーンショットを添付します:

スクリーンプリント1

ここに画像の説明を入力してください

スクリーンプリント2

ここに画像の説明を入力してください

注2:「i18n_pageにするために、ビューページ全体をもう一度作成する必要がありますか?」(この回答の下の(現在は削除されている)コメントの1つにあるように)に関する質問に答えるには、ビューディスプレイ(マスターではない)を別のディスプレイタイプとして複製する方法の質問への回答で説明されているアプローチのいずれか ...それが機能しない/適用されない場合は、ビューページ全体の再作成が唯一のオプションのようです。


3

パスエイリアスを削除し、この特別なケースを自分でコーディングしてみてください

hook_url_inbound_alterおよび/またはhook_url_outbound_alter

または、カスタムページコールバック(hook_menu)を介して独自のパスを実行し、views_embed_viewでビューを表示します。

また、公開されたフィルターのフォームのアクションを変更することもできます。

/**
 * Implements hook_form_alter().
 */
function foo_form_alter(&$form, $form_state, $form_id) {
  if ($form_id == 'views_exposed_form') {
    $form['#action'] = current_path();
  }
}

または:

/**
 * Implements hook_form_views_exposed_form_alter().
 */
function foo_form_views_exposed_form_alter(&$form, &$form_state) {
  if ($form['#id'] == 'views-exposed-form-foo-default') { // Or: if ($form['#action'] === '/foo')
    $form['#action'] = '/bar';
  }
}

ここにあるフォーム公開されている検索フィルターの送信URLを変更するにはどうすればよいですか?

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.