Jak mogę filtrować terminy taksonomii według języka?

9

Szukałem sposobu filtrowania terminów taksonomii według języka (tak jak w przypadku węzłów), ale nie znalazłem sposobu, aby to zrobić.

Czy moduł Widoki obsługuje te filtry również w taksonomiach, czy tylko w węzłach?
Jak mogę filtrować terminy taksonomii według języka?

mohamad salama
źródło
1. użyj 2 grup w słownictwie 2. użyj hook_form_alter, aby zadeklarować grupę użytkownikom
dobeerman
nie rozumiem, co użytkownik ma wspólnego z grupą taksonomii podnoszenia. strona jest w wielu językach, na przykład A lang, B lang, C lang, a gdy użytkownik przejdzie do B lang, chcę po prostu wyświetlić taksonomie oparte na tym języku i tak dalej w innym języku. nie, że tłumaczę warunki taksonomii dla każdego włączonego języka.
mohamad salama,
# czy mogę edytować ciąg zapytania w widoku!? lub po prostu za powiadomienie mnie. jeśli to gdzie jest miejsce do edycji?
mohamad salama

Odpowiedzi:

11

Po włączeniu modułu Widoki internacjonalizacji dostępna jest opcja filtrowania terminu systematyki według języka. Pamiętaj, że wersja jest obecnie w fazie tworzenia, ale działa jak urok.

zrzut ekranu pokazujący efekt instalacji i18nviews

Nerrve
źródło
2
Pamiętaj, że ten filtr będzie dostępny tylko wtedy, gdy masz włączony moduł i18n_taxonomy. To znaczy, jeśli użyjesz translacji węzłów dla terminów taksonomicznych.
tanius
3

Możesz użyć modułu Widoki internacjonalizacji w połączeniu z modułem tłumaczenia taksonomii (który jest częścią internacjonalizacji ), aby uzyskać filtr języka dla terminów taksonomicznych.

Przetłumacz widoki za pomocą internacjonalizacji. Jest to praca w toku i nie wszystkie właściwości Widoku mogą być jeszcze przetłumaczone. Wymaga internacjonalizacji 6.x-1.5 lub nowszej .

Kristen
źródło
2

Oto inne rozwiązanie:

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

Źródło tutaj .

Ek Kosmos
źródło
1

Moduł Widoki nie pozwala na filtrowanie terminów taksonomii według języka z nim związanego, ponieważ Drupal kojarzy tylko język z węzłami.

Możesz jednak ustawić widok tak, aby wyświetlał tylko węzły ze zdefiniowanym językiem.

  • W sekcji „Filtruj kryteria” wybierz „Dodaj”
  • w następnym formularzu wybierz „Tłumaczenie treści: język”
  • następny formularz pozwoli Ci wybrać język, który ma być używany do filtrowania wyświetlanych treści między „Wybierz wszystko”, „Język bieżącego użytkownika”, „Domyślny język strony”, „Brak języka” i jeden z języków włączonych w witrynie.

Dodałem ten filtr do widoku terminu systematyki, który jest dostarczany z modułem Widoki, wybierając angielski jako język do filtrowania zawartości, i utworzyłem dwa węzły: jeden w języku angielskim i jeden w języku łacińskim. Do obu węzłów przypisałem ten sam termin taksonomii, ten o identyfikatorze równym 22.
Kiedy odwiedziłem http://example.com/taxonomy/term/22 , widok skutecznie pokazywał tylko treść w języku angielskim.

kiamlaluno
źródło
to naprawdę dziwne w Drupal 5, mogę łatwo filtrować taksonomie według języka. ale w każdym razie dzięki za dzielenie się odpowiedziami.
mohamad salama
0

Filtrowanie języków do tłumaczenia encji. Filtr języka w sekcji „Kryteria filtrowania” widoku jest potrzebny tylko wtedy, gdy używasz systemu tłumaczenia węzłów. Jeśli zamiast tego korzystasz z bardziej nowoczesnego systemu tłumaczenia jednostek dostępnego dla Drupal 7, po prostu dostosuj ustawienie „Język pola” w sekcji „Inne” widoku.

Jak to zrobić dla warunków taksonomicznych. Próbowałem tego dla warunków taksonomicznych i działa. Upewnij się tylko, że dodałeś poprawną jedną z dwóch instancji pola dla każdego pola możliwego do przetłumaczenia, a mianowicie ten z opisem „Pojawia się w: termin-taksonomia: nazwa-twojego słownika”. Aby uzyskać szczegółowe informacje, patrz problem nr 1841434 .

Tanius
źródło
0

Dodaj do swojego 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;
}

Dodaj do swojej YOUR_MODULE.info

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

Utwórz plik „views / handlers / filter / YOUR_MODULE_handler_filter_language.inc” w katalogu modułu i umieść następną treść:

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

Wyczyść Wszystkie pamięci podręczne i pojawi się Nowe kryterium.

Lub użyj mojego modułu Akuma Taksonomia

Nikita Makarov
źródło
0

Ponieważ mam inne problemy z modułem Widoki internacjonalizacji, a mianowicie to, że wydaje się zmieniać już przetłumaczony interfejs użytkownika z widoków (kierunków pagera, tekstu nagłówka / stopki itp.), Podnoszę odpowiedni kod do tworzenia filtrów językowych w osobnym moduł. Zastąp MYMODULE poniżej nazwą swojego modułu. Działa dla mnie jako urok!

/**
 * 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
źródło