Como posso filtrar os termos de taxonomia por idioma?

9

Eu procurei uma maneira de filtrar os termos de taxonomia por idioma (como feito para nós), mas não encontrei nenhuma maneira de fazer isso.

O módulo Views também suporta esse filtro em taxonomias ou apenas em nós?
Como posso filtrar os termos de taxonomia por idioma?

mohamad salama
fonte
1. uso em 2 grupos vocabulário hook_form_alter 2. uso para declarar grupo de utilizadores utilizar
dobeerman
Eu não entendo o que o usuário tem a ver com o grupo de taxonomia de coleta. o site está em vários idiomas, por exemplo, A lang, B lang, C lang e quando o usuário vai para B lang, quero apenas as taxonomias exibidas com base nesse idioma e assim por diante em outro idioma. não que eu traduza os termos de taxonomias para cada idioma ativado.
mohamad Salama
# posso editar a string de consulta na visualização!? ou é apenas por me notificar. se é onde é o lugar para editá-lo?
mohamad Salama

Respostas:

11

Ao ativar o módulo Visualizações de internacionalização , está disponível a opção de filtrar o termo de taxonomia pelo idioma. Observe que a versão está atualmente em dev, mas funciona como um encanto.

captura de tela mostrando o efeito da instalação do i18nviews

Nerrve
fonte
2
Observe que esse filtro só estará disponível se você também tiver ativado o módulo i18n_taxonomy. Ou seja, se você usar a conversão de nó para termos de taxonomia.
tanius
3

Você pode usar o módulo Visualizações de internacionalização em combinação com o módulo Tradução de taxonomia (que faz parte da Internacionalização ) para obter um filtro de idioma para termos de taxonomia.

Traduza visualizações usando Internacionalização. Este é um trabalho em andamento e nem todas as propriedades do Views podem ser traduzidas ainda. Requer Internacionalização 6.x-1.5 ou mais recente .

Kristen
fonte
2

Aqui está outra solução:

function mymodule_views_query_alter(&$view, &$query) {
  if ($view->name == 'yourviewmachinename') {
    $query->where[] = array(
      'conditions' => array(array(
        'field' => 'taxonomy_term_data.language',
        'value' => array('***CURRENT_LANGUAGE***'),
        'operator' => 'in',
      )),
      'args' => array(),
      'type' => 'AND',
    );
  }
}

Fonte aqui .

Ek Kosmos
fonte
1

O módulo Views não permite filtrar os termos de taxonomia pelo idioma associado a ele, pois o Drupal associa apenas um idioma aos nós.

Você pode definir a exibição para mostrar apenas nós com um idioma predefinido.

  • Em "Critérios de filtro", selecione "Adicionar"
  • no próximo formulário, selecione "Tradução de conteúdo: idioma"
  • o próximo formulário permitirá selecionar o idioma a ser usado para filtrar o conteúdo da exibição entre "Selecionar tudo", "Idioma atual do usuário", "Idioma padrão do site", "Sem idioma" e um dos idiomas ativados no site.

Eu adicionei esse filtro na exibição de termos de taxonomia fornecida com o módulo Views, selecionando inglês como idioma para filtrar o conteúdo e criei dois nós: um em inglês e outro em latim. Atribuí a ambos os nós o mesmo termo de taxonomia, aquele com ID igual a 22.
Quando visitei http://example.com/taxonomy/term/22 , a exibição mostrava efetivamente apenas o conteúdo em inglês.

kiamlaluno
fonte
é realmente estranho no drupal 5 eu posso filtrar taxonomias por idioma facilmente. mas de qualquer forma obrigado por compartilhar respostas.
mohamad salama
0

Filtragem de idiomas para tradução de entidades. Um filtro de idioma na seção "Critérios de filtro" da exibição é necessário apenas se você usar o sistema de conversão de nós. Se, em vez disso, você usar o sistema de tradução de entidades mais moderno disponível para o Drupal 7, basta adaptar a configuração "Idioma do campo" na seção "Outros" da exibição.

Como fazer isso para termos de taxonomia. Eu tentei isso por termos de taxonomia e funciona. Apenas certifique-se de adicionar a uma das duas instâncias de campo corretas para cada campo traduzível, ou seja, aquela com a descrição "Aparece em: termo da taxonomia: seu nome do vocabulário". Para detalhes, consulte a edição # 1841434 .

tanius
fonte
0

Adicione ao seu YOUR_MODULE.module

function YOUR_MODULE_views_data_alter(&$data) {
  $opts['title'] = 'Language';
  $opts['table'] = 'taxonomy_term_data';
  $opts['help'] = 'Taxonomy term language.';
  $opts['filter']['handler'] = 'YOUR_MODULE_handler_filter_language';
  $data['taxonomy_term_data']['language'] = $opts;
}

Adicione ao seu YOUR_MODULE.info

files[] = views/handlers/filter/YOUR_MODULE_handler_filter_language.inc

Crie o arquivo "views / handlers / filter / YOUR_MODULE_handler_filter_language.inc" dentro do diretório do módulo e coloque o próximo conteúdo:

/**
 * @file
 * Views handler to filter language by term.
 */

/**
 * Filter by submission status
 */
class YOUR_MODULE_handler_filter_language extends views_handler_filter_in_operator {
  function get_value_options() {
    $languages = array(
      '***CURRENT_LANGUAGE***' => t("Current user's language"),
      '***DEFAULT_LANGUAGE***' => t("Default site language"),
      LANGUAGE_NONE            => t('Language neutral'),
    );
    $this->value_title = t('Language');
    $options = array_merge($languages, locale_language_list());
    $this->value_options = $options;
  }

  // '0' won't work as a key for checkboxes.
  function value_form(&$form, &$form_state) {
    parent::value_form($form, $form_state);
    $form['value']['#type'] = 'select';
  }
}

Desmarque Todos os caches e Novo critério será exibido.

Ou use meu módulo Akuma Taxonomy

Nikita Makarov
fonte
0

Como estou tendo outros problemas com o módulo Visualizações de internacionalização, a saber, que parece alterar a interface do usuário já traduzida das visualizações (direções do pager, texto do cabeçalho / rodapé etc.), levanto o código relevante para criar os filtros de idioma em um separado módulo. Substitua MYMODULE abaixo pelo nome do seu módulo. Funciona como um encanto para mim!

/**
 * Code below is lifted from the i18nviews module. Gives the possibility to filter for
 * language on term views
 *
 * Implementation of hook_views_data_alter().
 *
 * Registers views handlers with dependency to i18n_taxonomy.
 */
function MYMODULE_views_data_alter(&$data) {

  // Add i18n language field to taxonomy_term_data. No clash.
  $data['taxonomy_term_data']['language'] = array(
    'group' => t('Taxonomy term'),
    'title' => t('Language'),
    'help' => t('The language the term is in.'),
    'field' => array(
      'handler' => 'MYMODULE_handler_field_taxonomy_term_language',
      'click sortable' => TRUE,
    ),
    'filter' => array(
      'handler' => 'MYMODULE_handler_filter_taxonomy_term_language',
    ),
    'argument' => array(
      'handler' => 'MYMODULE_handler_argument_taxonomy_term_language',
    ),
  );
}

/**
 * Field handler to provide simple renderer that shows term language.
 */
class MYMODULE_handler_field_taxonomy_term_language extends views_handler_field_taxonomy {
  function render($values) {
    $languages = locale_language_list();
    $value = isset($languages[$values->{$this->field_alias}]) ? $languages[$values->{$this->field_alias}] : '';
    $value = $this->get_value($values);
    return $this->render_link($this->sanitize_value($value), $values);
  }
}

/**
 * Filter by language
 */
class MYMODULE_handler_filter_taxonomy_term_language extends views_handler_filter_in_operator {
  function get_value_options() {
    if (!isset($this->value_options)) {
      $this->value_title = t('Language');
      $languages = array(
        '***CURRENT_LANGUAGE***' => t("Current user's language"),
        '***DEFAULT_LANGUAGE***' => t("Default site language"),
        LANGUAGE_NONE => t('No language')
      );
      $languages = array_merge($languages, locale_language_list());
      $this->value_options = $languages;
    }
  }
}

/**
 * Argument handler to accept a language.
 */
class MYMODULE_handler_argument_taxonomy_term_language extends views_handler_argument {
  function construct() {
    parent::construct('language');
  }

  /**
   * Override the behavior of summary_name(). Get the user friendly version
   * of the language.
   */
  function summary_name($data) {
    return $this->term_language($data->{$this->name_alias});
  }

  /**
   * Override the behavior of title(). Get the user friendly version of the
   * node type.
   */
  function title() {
    return $this->term_language($this->argument);
  }

  function term_language($langcode) {
    $languages = locale_language_list();
    return isset($languages[$langcode]) ? $languages[$langcode] : t('Unknown language');
  }
}
vegardjo
fonte