Comment filtrer les termes taxonomiques par langue?

9

J'ai cherché un moyen de filtrer les termes de taxonomie par langue (comme pour les nœuds), mais je n'ai trouvé aucun moyen de le faire.

Le module Vues prend-il également en charge ce filtre dans les taxonomies ou uniquement dans les nœuds?
Comment filtrer les termes taxonomiques par langue?

mohamad salama
la source
1. utilisez 2 groupes dans le vocabulaire 2. utilisez hook_form_alter pour déclarer le groupe aux utilisateurs
dobeerman
je ne comprends pas ce que l'utilisateur a à voir avec le groupe de ramassage de la taxonomie. le site est en plusieurs langues pour l'exemple A lang, B lang, C lang et lorsque l'utilisateur va sur B lang je veux juste que les taxonomies soient affichées en fonction de cette langue et ainsi de suite dans une autre langue. pas que je traduise les termes de taxonomies pour chaque langue activée.
mohamad salama
# puis-je modifier la chaîne de requête dans la vue!? ou c'est juste pour m'avertir. si c'est où est l'endroit pour l'éditer?
mohamad salama

Réponses:

11

En activant le module Vues d'internationalisation , l'option de filtrer le terme de taxonomie par la langue est disponible. Notez que la version est actuellement en dev mais cela fonctionne comme un charme.

capture d'écran montrant l'effet de l'installation d'i18nviews

Nerrve
la source
2
Notez que ce filtre ne deviendra disponible que si vous avez également activé le module i18n_taxonomy. Autrement dit, si vous utilisez la traduction de noeud pour les termes de taxonomie.
tanius
3

Vous pouvez utiliser le module Vues d'internationalisation en combinaison avec le module de traduction de taxonomie (qui fait partie de l' internationalisation ) pour obtenir un filtre de langue pour les termes de taxonomie.

Traduire les vues à l'aide de l'internationalisation. Il s'agit d'un travail en cours et toutes les propriétés des vues ne peuvent pas encore être traduites. Nécessite l'internationalisation 6.x-1.5 ou plus récente .

Kristen
la source
2

Voici une autre solution:

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',
    );
  }
}

Source ici .

Ek Kosmos
la source
1

Le module Vues ne permet pas de filtrer les termes de taxonomie par la langue qui lui est associée, car Drupal associe uniquement une langue aux nœuds.

Cependant, vous pouvez définir la vue pour afficher uniquement les nœuds avec une langue prédéfinie.

  • Sous "Critères de filtrage", sélectionnez "Ajouter"
  • dans le formulaire suivant, sélectionnez "Traduction de contenu: langue"
  • le formulaire suivant vous permettra de sélectionner la langue à utiliser pour filtrer le contenu de la vue entre "Tout sélectionner", "Langue de l'utilisateur actuel", "Langue par défaut du site", "Aucune langue" et l'une des langues activées sur le site.

J'ai ajouté ce filtre sur la vue de terme de taxonomie fournie avec le module Vues, ​​en sélectionnant l'anglais comme langue pour filtrer le contenu, et j'ai créé deux nœuds: un en anglais et un en latin. J'ai attribué aux deux nœuds le même terme de taxonomie, celui dont l'ID est égal à 22.
Lorsque j'ai visité http://example.com/taxonomy/term/22 , la vue n'a montré que le contenu en anglais.

kiamlaluno
la source
son vraiment bizarre dans drupal 5 je peux filtrer facilement les taxonomies par langue. mais de toute façon merci pour le partage des réponses.
mohamad salama
0

Filtrage linguistique pour la traduction d'entités. Un filtre de langue dans la section "Critères de filtre" de la vue n'est nécessaire que si vous utilisez le système de traduction de nœuds. Si, à la place, vous utilisez le système de traduction d'entité plus moderne disponible pour Drupal 7, adaptez simplement le paramètre "Field Language" dans la section "Other" de la vue.

Comment le faire pour les termes de taxonomie. J'ai essayé cela pour les termes de taxonomie et cela fonctionne. Assurez-vous simplement d'ajouter la bonne des deux instances de champ pour chaque champ traduisible, à savoir celle avec une description de "Apparaît dans: taxonomy-term: your-vocab-name". Pour plus de détails, consultez le numéro # 1841434 .

tanius
la source
0

Ajoutez à votre 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;
}

Ajoutez à votre YOUR_MODULE.info

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

Créez un fichier "views / handlers / filter / YOUR_MODULE_handler_filter_language.inc" dans le répertoire de votre module et placez le contenu suivant:

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

Effacer tous les caches et Nouveau critère apparaîtra.

Ou utilisez mon module Akuma Taxonomy

Nikita Makarov
la source
0

Comme je rencontre d'autres problèmes avec le module Vues d'internationalisation, à savoir qu'il semble modifier l'interface utilisateur déjà traduite à partir des vues (directions du pager, texte d'en-tête / pied de page, etc.), je lève le code approprié pour créer les filtres de langue dans un fichier séparé module. Remplacez MYMODULE ci-dessous par le nom de votre module. Fonctionne comme un charme pour moi!

/**
 * 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
la source