Como evitar que o Drupal redirecione minhas páginas multilíngues do Views?

8

Eu tenho uma página Views em um site multilíngue, onde preciso de um URL diferente para cada idioma, ou seja:

  • es: mysite / apartamentos.
  • pt: mysite / apartamentos.
  • fr: mysite / apartamentos.
  • ru: mysite / arendu.

Criei um alias de URL para cada idioma (que é meu site / apartamentos, embora o idioma padrão do meu site seja o espanhol), de modo que o alias do espanhol para appartmentsseja apartamentose assim por diante. Eu criei esses aliases usando configuration >> Search and Metadata >> URL aliases >> add alias.

Eu tenho que passar parâmetros de consulta para a visualização para filtrar os resultados, para que meu URL seja algo como mysite / pt / appartments / p / location_field / 2 e eu tenho um formulário onde eu coloco manualmente a ação como:

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

onde a página traduzida pode ser apartamentos, apartamentos, apartamentos ou arendu, criando o URL da ação:

/ es / apartamentos, / fr / apartamentos, / pt / apartamentos e / ru / arendu

Meu problema é que, quando este formulário é enviado, o Drupal me envia para

mysite / es / apartamentos / p / location_field / 2

ao invés de

mysite / es / apartamentos / p / location_field / 2

e o mesmo ocorre para todos os idiomas. O resto parece bom e até a trilha de pão (que é gerada usando o URL) parece correta (Início >> Apartamentos Costa Dorada, em espanhol).

Quando eu uso a opção de idioma, ela me redireciona para a página traduzida correta, mas sem os parâmetros de consulta (a partir mysite/es/appartments/p/location_field/2dela me envia para mysite/es/apartamentos).

Não sei o que pode estar causando esse problema, talvez os parâmetros de consulta estejam interferindo na interpretação do alias?

Nota : Eu tenho muitos módulos de tradução ativados. Para os módulos i18n, existem: bloco, campo, menu, nó, caminho, sequência, taxonomia, tradução (conjuntos de tradução), variável e visualizações.

Miquel Correa Casablanca
fonte

Respostas:

6

Sub-módulo i18n_path

Presumo que você também esteja usando o módulo i18n . Portanto, certifique-se de ativar também o i18n_pathsubmódulo (= conversão de caminho). Mais detalhes sobre isso, na documentação da comunidade (marcação em negrito adicionada aqui):

... permite mapear páginas existentes que são traduções uma da outra. Isso permitirá que os usuários usem o alternador de idiomas para navegar entre as páginas associadas.

O módulo deve ser usado como último recurso para traduzir caminhos que não poderiam ser mapeados juntos como traduções. Por exemplo, caminhos para nós traduzidos já podem ser vinculados ao módulo de tradução de Conteúdo e caminhos para termos de taxonomia traduzidos podem ser vinculados ao módulo de tradução de Taxonomia. As traduções de caminho devem ser usadas para vincular caminhos genéricos, como os fornecidos por Views ou Panels.

Para configurar traduções de um caminho específico, é necessário criar um conjunto de traduções de caminhos, indo para Configuração> Regional e idioma> Conjuntos de traduções> Caminhos e clicando em Incluir conversão de caminhos.

visualizações de página i18n

Você também pode verificar se consegue fazê-lo funcionar usando o módulo de visualizações de página i18n . Alguns detalhes da página do projeto:

... fornece uma nova exibição de visualizações, onde é possível selecionar caminhos diferentes para cada idioma ativado no seu site, para que uma visualização tenha uma rota localizada para cada idioma.

Nota 1 : " se você não encontrar nenhuma opção na exibição para traduzir o caminho " (como no seu comentário abaixo), poderá dar uma olhada no que é mencionado no Comentário nº 1 da edição 2389535 , que afirma:

... Pode ser que você tenha escolhido uma exibição da página em vez da exibição da página i18n quando criou sua exibição. Certifique-se de ter selecionado a exibição correta das visualizações. Anexo algumas capturas de tela para ajudar:

Serigrafia 1 :

insira a descrição da imagem aqui

Serigrafia 2 :

insira a descrição da imagem aqui

Nota 2 : Para responder à pergunta sobre " Terei que criar a página de exibição inteira novamente para torná-la como uma página i18n? " (Como em um dos seus comentários (agora excluídos) abaixo desta resposta), tente usar uma das abordagens descritas nas respostas à pergunta em Como duplicar uma exibição de Views (que não é o mestre) como um tipo de exibição diferente? ... Se isso não funcionar / se aplicar, a recriação de toda a página de visualização parece ser a única opção restante.

Pierre.Vriens
fonte
3

Remova o alias do caminho e tente codificar esse caso especial usando

hook_url_inbound_alter e ou hook_url_outbound_alter

ou apenas faça seus próprios caminhos por meio de retornos de chamada de página personalizados (hook_menu) e, em seguida, mostre a visualização com views_embed_view.

Você também pode alterar a ação do formulário do filtro exposto:

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

Ou:

/**
 * 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';
  }
}

Formulário preenchido aqui Como altero o URL de envio do filtro de pesquisa exposto?

rémy
fonte