Как я могу отфильтровать термины таксономии по языку?

9

Я искал способ фильтрации терминов таксономии по языку (как это делается для узлов), но я не нашел способа сделать это.

Поддерживает ли модуль Views этот фильтр в таксономиях или только в узлах?
Как я могу отфильтровать термины таксономии по языку?

Мохамад Салама
источник
1. использовать 2 группы в словаре 2. использовать hook_form_alter, чтобы объявить группу для использования пользователями
dobeerman
я не понимаю, что пользователь имеет отношение к группе таксономии раскладки. сайт на нескольких языках, например A lang, B lang, C lang, и когда пользователь переходит на B lang, я просто хочу, чтобы таксономии отображались на основе этого языка и т. д. на другом языке. не то чтобы я переводил термины таксономии для каждого включенного языка.
Мохамад Салама
# Могу ли я редактировать строку запроса в представлении!? или просто для того, чтобы уведомить меня. если его где место для его редактирования?
Мохамад Салама

Ответы:

11

Включив модуль Интернационализация представлений , доступна опция фильтрации термина таксономии по языку. Обратите внимание, что версия в настоящее время в dev, но она работает как шарм.

скриншот, показывающий эффект от установки i18nviews

Nerrve
источник
2
Обратите внимание, что этот фильтр станет доступным, только если вы также включили модуль i18n_taxonomy. То есть, если вы используете перевод узла для терминов таксономии.
Танус
3

Вы можете использовать модуль Представления интернационализации в сочетании с модулем перевода таксономии (который является частью Интернационализации ), чтобы получить языковой фильтр для терминов таксономии.

Перевести взгляды с помощью интернационализации. Эта работа еще не завершена, и не все свойства Views могут быть переведены. Требуется Интернационализация 6.x-1.5 или новее .

Кристен
источник
2

Вот еще одно решение:

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

Источник здесь .

Эк Космос
источник
1

Модуль Views не позволяет фильтровать термины таксономии по языку, связанному с ним, так как Drupal связывает язык только с узлами.

Вы можете настроить отображение так, чтобы отображались только узлы с предопределенным языком.

  • Под «Критерии фильтра» выберите «Добавить»
  • в следующей форме выберите «Перевод контента: Язык»
  • Следующая форма позволит вам выбрать язык, который будет использоваться для фильтрации содержимого просмотра: «Выбрать все», «Язык текущего пользователя», «Язык сайта по умолчанию», «Нет языка» и один из языков, включенных на сайте.

Я добавил этот фильтр в представление терминов таксономии, которое поставляется с модулем Views, выбрав английский язык в качестве языка для фильтрации содержимого, и я создал два узла: один на английском и один на латинском. Я назначил обоим узлам один и тот же термин таксономии, тот с идентификатором, равным 22.
Когда я посетил http://example.com/taxonomy/term/22 , представление фактически показывало только содержимое на английском языке.

киамалуно
источник
это действительно странно в Drupal 5, я могу легко фильтровать таксономии по языку. но в любом случае спасибо за обмен ответами.
Мохамад Салама
0

Языковая фильтрация для перевода сущностей. Языковой фильтр в разделе «Критерии фильтра» представления требуется только при использовании системы перевода узлов. Если вместо этого вы используете более современную систему Entity Translation , доступную для Drupal 7, просто измените настройку «Field Language» в разделе «Other» представления.

Как это сделать на условиях таксономии. Я попробовал это для условий таксономии, и это работает. Просто убедитесь, что вы добавили правильный один из двух экземпляров поля для каждого переводимого поля, а именно тот, который содержит описание «Появляется в: таксономический термин: ваше-имя-имя-имя». Подробности см. В выпуске № 1841434 .

tanius
источник
0

Добавьте в свой 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;
}

Добавьте в свой YOUR_MODULE.info

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

Создайте файл "views / handlers / filter / YOUR_MODULE_handler_filter_language.inc" в каталоге вашего модуля и поместите следующий контент:

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

Очистите все кэши и появится новый критерий.

Или используйте мой модуль Акума Таксономия

Никита Макаров
источник
0

Поскольку у меня возникли некоторые другие проблемы с модулем «Интернационализация представлений», а именно то, что он, кажется, изменяет уже переведенный пользовательский интерфейс из представлений (направления пейджера, текст верхнего / нижнего колонтитула и т. Д.), Я поднял соответствующий код для создания языковых фильтров в отдельном модуль. Замените MYMODULE ниже на имя вашего модуля. Работает как шарм для меня!

/**
 * 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
источник