it-swarm.it

Come posso filtrare i termini della tassonomia per lingua?

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?

9
mohamad salama

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

screenshot showing effect of installing i18nviews

11
Nerrve

È possibile utilizzare il modulo Internationalization Views in combinazione con il modulo Taxonomy Translation (che fa parte di Internationalization ) per ottenere un filtro linguistico per i termini della tassonomia.

Traduci le visualizzazioni utilizzando 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 .

3
Kristen

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 .

2
Ek Kosmos

Il modulo Views non consente di filtrare i termini della tassonomia in base alla lingua ad esso 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 consentirà di selezionare la lingua da 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 ad entrambi i nodi lo stesso termine tassonomico, quello con ID uguale a 22.
Quando ho visitato http://example.com/taxonomy/term/22 , la vista ha mostrato effettivamente solo il contenuto in inglese.

1
kiamlaluno

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

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.

Oppure usa il mio modulo Akuma Taxonomy

0
Nikita Makarov

Filtro della lingua per la traduzione dell'entità. Un filtro della lingua nella sezione "Criteri di filtro" della vista è necessario solo se si utilizza il sistema di traduzione del nodo. Se invece usi il sistema Entity Translation più moderno disponibile per Drupal 7, basta adattare l'impostazione "Lingua campo" nella sezione "Altro" della vista.

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

0
tanius