Как избежать перенаправления Drupal моих многоязычных страниц просмотров?

8

У меня есть страница Views на многоязычном веб-сайте, где мне нужны разные URL для каждого языка, а именно:

  • es: mysite / apartamentos.
  • ru: mysite / appartments.
  • fr: mysite / appartements.
  • ru: mysite / arendu.

Я создал псевдоним URL для каждого языка (который является mysite / appartments, хотя языком по умолчанию для моего сайта является испанский), поэтому испанский псевдоним для appartmentsis 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 / апартаменты / р / location_field / 2

вместо

MySite / ES / Апартаменты / р / location_field / 2

и то же самое происходит для всех языков. В остальном все выглядит хорошо, и даже крошка (которая генерируется с помощью URL) выглядит правильно (Inicio >> Apartamentos Costa Dorada, по-испански).

Когда я использую переключатель языка, он перенаправляет меня на правильную переведенную страницу, но без параметров запроса (с mysite/es/appartments/p/location_field/2него отправляет меня mysite/es/apartamentos).

Я не знаю, что может быть причиной этой проблемы, может быть, параметры запроса, мешающие интерпретации псевдонима?

Примечание . У меня включено много модулей перевода. Для модулей i18n имеются: блок, поле, меню, узел, путь, строка, таксономия, перевод (наборы переводов), переменная и представления.

Микель Корреа Касабланка
источник
посмотрите здесь drupal.stackexchange.com/questions/22989/…
rémy

Ответы:

6

подмодуль i18n_path

Я предполагаю, что вы также используете модуль i18n . Поэтому убедитесь, что вы также включили i18n_pathподмодуль (= Путь перевода). Подробнее об этом, из документации сообщества (здесь добавлена ​​жирная разметка):

... позволяет отображать вместе существующие страницы, которые являются переводами друг друга. Это позволит пользователям использовать переключатель языка для навигации по связанным страницам.

Модуль предназначен для использования в качестве последнего средства для перевода путей, которые иначе не могут быть сопоставлены как переводы. Например, пути к переведенным узлам уже могут быть связаны с модулем перевода контента, а пути к переведенным терминам таксономии могут быть связаны с модулем перевода таксономии. Преобразования путей должны использоваться для связи общих путей, таких как те, которые предоставляются Представлениями или Панелями.

Чтобы настроить переводы определенного пути, необходимо создать набор перевода пути, перейдя в «Конфигурация» и «Язык и региональные стандарты»> «Наборы переводов»> «Пути» и нажав «Добавить перевод пути».

i18n просмотров страниц

Вы также можете проверить, можете ли вы заставить его работать с помощью модуля просмотра страниц i18n . Некоторые детали со страницы проекта:

... обеспечивает новое отображение представлений, где вы можете выбрать разные пути для каждого языка, включенного на вашем сайте, чтобы у представления был локализованный маршрут для каждого языка.

Примечание 1 : « если вы не можете найти какую-либо опцию в представлении для перевода пути » (как в вашем комментарии ниже), то вы можете взглянуть на то, что упомянуто в комментарии № 1 выпуска 2389535 , в котором говорится:

... Может быть, вы выбрали отображение страницы, а не отображение страницы i18n при создании своего представления. Пожалуйста, убедитесь, что вы выбрали правильный вид отображения. Я прилагаю несколько скриншотов для помощи:

Отпечаток экрана 1 :

введите описание изображения здесь

Снимок экрана 2 :

введите описание изображения здесь

Примечание 2 : Чтобы ответить на вопрос « Нужно ли мне снова создавать страницу целиком, чтобы она стала i18n_page? » (Как в одном из ваших (теперь удаленных) комментариев ниже этого ответа), я бы попробовал использовать какой-либо из подходов, описанных в ответах на вопрос в разделе Как дублировать отображение представлений (которое не является главным) как другой тип отображения? ... Если это не работает / не применяется, то восстановление всей страницы просмотра кажется единственным оставленным вариантом.

Pierre.Vriens
источник
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 для открытого поискового фильтра?

rémy
источник