web-dev-qa-db-ja.com

Drupal多言語ビューページのリダイレクトを回避する方法は?

多言語のWebサイトに Views ページがあり、言語ごとに異なる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に送信されます)。

この問題の原因がわからないので、クエリパラメータがエイリアスの解釈を妨げているのでしょうか。

:多くの翻訳モジュールが有効になっています。 i18n モジュールの場合:ブロック、フィールド、メニュー、ノード、パス、文字列、分類法、翻訳(翻訳セット)、変数、ビュー。

i18n_pathサブモジュール

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

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

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

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

i18nページビュー

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

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

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

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

スクリーンプリント1

enter image description here

スクリーンプリント2

enter image description here

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

6
Pierre.Vriens

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

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を変更するにはどうすればよいですか

3
rémy