Come posso filtrare i termini della tassonomia per lingua?


9

Ho cercato un modo per filtrare i termini della tassonomia per lingua (come fatto per i nodi), ma non ho trovato alcun modo per farlo.

Il modulo Views supporta questo filtro anche nelle tassonomie o solo nei nodi?
Come posso filtrare i termini della tassonomia per lingua?


1. usa 2 gruppi nel vocabolario 2. usa hook_form_alter per dichiarare l'uso del gruppo agli utenti
dobeerman

non capisco cosa ha a che fare l'utente con il gruppo di prelievo di tassonomia. il sito è in più lingue per esempio A lang, B lang, C lang e quando l'utente passa a B lang voglio solo visualizzare le tassonomie basate su questa lingua e così via in un'altra lingua. non che io traduca i termini delle tassonomie per ogni lingua abilitata.
Mohamad Salama,

# posso modificare la stringa di query nella vista!? o è solo per avvisarmi. se è dov'è il posto per modificarlo?
Mohamad Salama,

Risposte:


11

Abilitando il modulo Viste di internazionalizzazione , è disponibile l'opzione per filtrare il termine di tassonomia in base alla lingua. Si noti che la versione è attualmente in sviluppo ma funziona come un incantesimo.

screenshot che mostra l'effetto dell'installazione di i18nviews


2
Si noti che questo filtro sarà disponibile solo se è stato abilitato anche il modulo i18n_taxonomy. Cioè, se si utilizza la traduzione del nodo per termini di tassonomia.
tanius,

3

È possibile utilizzare il Visualizzazioni Internazionalizzazione del modulo in combinazione con il modulo Taxonomy traduzione (che fa parte di internazionalizzazione ) per ottenere un filtro di lingua per i termini di tassonomia.

Traduci le visualizzazioni usando l'Internazionalizzazione. Questo è un work in progress e non tutte le proprietà di Views possono essere ancora tradotte. Richiede l'internazionalizzazione 6.x-1.5 o successiva .


2

Ecco un'altra soluzione:

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 qui .


1

Il modulo Views non consente di filtrare i termini della tassonomia in base alla lingua associata, poiché Drupal associa solo una lingua ai nodi.

Tuttavia, puoi impostare la vista in modo che mostri solo nodi con una lingua predefinita.

  • In "Criteri di filtro", seleziona "Aggiungi"
  • nel modulo successivo, seleziona "Traduzione del contenuto: lingua"
  • il modulo successivo ti permetterà di selezionare quale lingua utilizzare per filtrare il contenuto della vista tra "Seleziona tutto", "Lingua dell'utente corrente", "Lingua del sito predefinita", "Nessuna lingua" e una delle lingue abilitate nel sito.

Ho aggiunto questo filtro alla vista del termine tassonomia fornita con il modulo Viste, selezionando l'inglese come lingua per filtrare il contenuto e ho creato due nodi: uno in inglese e uno in latino. Ho assegnato a entrambi i nodi lo stesso termine di tassonomia, quello con ID uguale a 22.
Quando ho visitato http://example.com/taxonomy/term/22 , la vista mostrava effettivamente solo il contenuto in inglese.


è davvero strano in drupal 5 posso filtrare facilmente le tassonomie per lingua. ma comunque grazie per aver condiviso le risposte.
Mohamad Salama,

0

Filtro della lingua per la traduzione di entità. Un filtro lingua nella sezione "Criteri filtro" della vista è necessario solo se si utilizza il sistema di traduzione dei nodi. Se invece usi il più moderno sistema di traduzione delle entità disponibile per Drupal 7, adatta semplicemente l'impostazione "Lingua campo" nella sezione "Altro" della vista.

Come farlo per i termini della tassonomia. Ho provato questo per termini di tassonomia e funziona. Assicurati solo di aggiungere una delle due istanze di campo corrette per ogni campo traducibile, ovvero quella con una descrizione di "Appare in: termine-tassonomia: nome-tuo-vocabolario". Per i dettagli, vedere il numero 1841434 .


0

Aggiungi al tuo 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;
}

Aggiungi al tuo YOUR_MODULE.info

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

Crea il file "viste / gestori / filtro / YOUR_MODULE_handler_filter_language.inc" nella directory del tuo modulo e inserisci il prossimo contenuto:

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

Verranno visualizzati Cancella tutte le cache e Nuovo criterio.

O usa il mio modulo Akuma Taxonomy


0

Dato che sto riscontrando altri problemi con il modulo Viste di internazionalizzazione, vale a dire che sembra alterare l'interfaccia utente già tradotta dalle viste (indicazioni per cercapersone, testo di intestazione / piè di pagina, ecc.), Sollevo il codice pertinente per creare i filtri della lingua in un separato modulo. Sostituisci MYMODULE di seguito con il nome del tuo modulo. Funziona come un incanto per me!

/**
 * 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');
  }
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.