web-dev-qa-db-fra.com

Comment filtrer les termes taxonomiques par langue?

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?

9
mohamad salama

En activant le module Internationalization Views , 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.

screenshot showing effect of installing i18nviews

11
Nerrve

Vous pouvez utiliser le module Vues d'internationalisation en combinaison avec le module de traduction de taxonomie (qui fait partie de 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 .

3
Kristen

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 .

2
Ek Kosmos

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.

1
kiamlaluno

Comme j'ai d'autres problèmes avec le module Vues d'internationalisation, à savoir qu'il semble altérer l'interface utilisateur déjà traduite 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 autre 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');
  }
}
0
vegardjo

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 à 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

0
Nikita Makarov

Filtrage linguistique pour la traduction d'entité. Un filtre linguistique dans la section "Critères de filtrage" 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 Entity Translation 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, voir sur le numéro # 1841434 .

0
tanius