Wie kann ich die Taxonomiebegriffe nach Sprache filtern?

9

Ich habe nach einer Möglichkeit gesucht, die Taxonomiebegriffe nach Sprache zu filtern (wie bei Knoten), aber ich habe keine Möglichkeit gefunden, dies zu tun.

Unterstützt das Views-Modul diesen Filter auch in Taxonomien oder nur in Knoten?
Wie kann ich die Taxonomiebegriffe nach Sprache filtern?

Mohamad Salama
quelle
1. Verwenden Sie 2 Gruppen im Vokabular 2. Verwenden Sie hook_form_alter, um die Gruppe für Benutzer zu deklarieren. Verwenden Sie
dobeerman
Ich verstehe nicht, was der Benutzer mit der Abholgruppe der Taxonomie zu tun hat. Die Site ist in mehreren Sprachen für Beispiel A lang, B lang, C lang und wenn der Benutzer zu B lang geht, möchte ich nur, dass die Taxonomien basierend auf dieser Sprache und so weiter in einer anderen Sprache angezeigt werden. nicht, dass ich die Taxonomiebegriffe für jede aktivierte Sprache übersetze.
Mohamad Salama
# Kann ich die Abfragezeichenfolge in der Ansicht bearbeiten? oder es ist nur um mich zu benachrichtigen. Wenn es ist, wo ist der Ort für die Bearbeitung?
Mohamad Salama

Antworten:

11

Durch Aktivieren des Moduls Internationalisierungsansichten ist die Option verfügbar, den Taxonomiebegriff nach Sprache zu filtern. Beachten Sie, dass sich die Version derzeit in dev befindet, aber wie ein Zauber funktioniert.

Screenshot zeigt den Effekt der Installation von i18nviews

Nerrve
quelle
2
Beachten Sie, dass dieser Filter nur verfügbar wird, wenn Sie auch das Modul aktiviert haben i18n_taxonomy. Das heißt, wenn Sie die Knotenübersetzung für Taxonomiebegriffe verwenden.
Tanius
3

Sie können das Modul " Internationalisierungsansichten" in Kombination mit dem Modul "Taxonomieübersetzung" (das Teil der Internationalisierung ist ) verwenden, um einen Sprachfilter für Taxonomiebegriffe zu erhalten.

Übersetzen Sie Ansichten mithilfe der Internationalisierung. Dies ist in Arbeit und es können noch nicht alle Views-Eigenschaften übersetzt werden. Erfordert Internationalisierung 6.x-1.5 oder neuer .

Kristen
quelle
2

Hier ist eine andere Lösung:

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

Quelle hier .

Ek Kosmos
quelle
1

Das Views-Modul erlaubt es nicht, die Taxonomiebegriffe nach der zugeordneten Sprache zu filtern, da Drupal nur Knoten eine Sprache zuordnet.

Sie können die Ansicht so einstellen, dass nur Knoten mit einer vordefinierten Sprache angezeigt werden.

  • Wählen Sie unter "Filterkriterien" die Option "Hinzufügen".
  • Wählen Sie im nächsten Formular "Inhaltsübersetzung: Sprache" aus.
  • Im nächsten Formular können Sie auswählen, in welcher Sprache der Ansichtsinhalt zwischen "Alle auswählen", "Sprache des aktuellen Benutzers", "Standard-Site-Sprache", "Keine Sprache" und einer der auf der Site aktivierten Sprachen gefiltert werden soll.

Ich habe diesen Filter in der Taxonomiebegriffsansicht hinzugefügt, die mit dem Modul "Ansichten" geliefert wird, und Englisch als Sprache zum Filtern des Inhalts ausgewählt. Außerdem habe ich zwei Knoten erstellt: einen in Englisch und einen in Latein. Ich habe beiden Knoten den gleichen Taxonomiebegriff zugewiesen, den mit der ID 22.
Als ich http://example.com/taxonomy/term/22 besuchte , zeigte die Ansicht effektiv nur den Inhalt in Englisch.

kiamlaluno
quelle
In Drupal 5 ist es wirklich komisch. Ich kann Taxonomien leicht nach Sprache filtern. aber auf jeden Fall danke für das Teilen von Antworten.
Mohamad Salama
0

Sprachfilterung für die Entitätsübersetzung. Ein Sprachfilter im Abschnitt "Filterkriterien" der Ansicht wird nur benötigt, wenn Sie das Knotenübersetzungssystem verwenden. Wenn Sie stattdessen das modernere Entity Translation- System verwenden, das für Drupal 7 verfügbar ist, passen Sie einfach die Einstellung "Feldsprache" im Abschnitt "Andere" der Ansicht an.

Wie es für taxonomische Begriffe gemacht wird. Ich habe dies aus taxonomischen Gründen versucht und es funktioniert. Stellen Sie einfach sicher, dass Sie für jedes übersetzbare Feld die richtige der beiden Feldinstanzen hinzufügen, nämlich die mit der Beschreibung "Erscheint in: Taxonomie-Begriff: Ihr-Vokabelname". Einzelheiten finden Sie in Ausgabe Nr. 1841434 .

Tanius
quelle
0

Fügen Sie Ihrem YOUR_MODULE.module hinzu

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;
}

Fügen Sie Ihrer YOUR_MODULE.info hinzu

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

Erstellen Sie die Datei "views / handlers / filter / YOUR_MODULE_handler_filter_language.inc" in Ihrem Modulverzeichnis und platzieren Sie den nächsten Inhalt:

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

Alle Caches löschen und Neues Kriterium werden angezeigt.

Oder benutze mein Modul Akuma Taxonomy

Nikita Makarov
quelle
0

Da ich einige andere Probleme mit dem Modul "Internationalisierungsansichten" habe, nämlich dass es die bereits übersetzte Benutzeroberfläche von Ansichten (Pager-Anweisungen, Kopf- / Fußzeilentext usw.) zu ändern scheint, hebe ich den relevanten Code zum Erstellen der Sprachfilter in einem separaten heraus Modul. Ersetzen Sie MYMODULE unten durch den Namen Ihres Moduls. Funktioniert als Zauber für mich!

/**
 * 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
quelle