Як я можу фільтрувати терміни систематики за мовою?


9

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

Чи підтримує модуль Views цей фільтр і в таксономіях чи просто у вузлах?
Як я можу фільтрувати терміни систематики за мовою?


1. використовуйте 2 групи в лексиці 2. використовуйте гачку_форму_алтер, щоб оголосити групу для користувачів
dobeerman

я не розумію, що стосується користувача з групою таксономії. сайт є на декількох мовах, наприклад, lang, B lang, C lang, і коли користувач переходить до B lang, я просто хочу, щоб таксономії відображалися на основі цієї мови тощо на іншій мові. не те, що я перекладаю терміни таксономій для кожної ввімкненої мови.
мохаммадська саляма

# чи можу я редагувати рядок запиту у поданні !? або це лише для того, щоб повідомити мене. якщо його, де місце для його редагування?
саляма мохамада

Відповіді:


11

Увімкнувши модулі Internationalization Views , доступна можливість фільтрувати термін таксономії за мовою. Зауважте, що версія наразі розроблена, але вона працює як шарм.

скріншот, що показує ефект встановлення i18nviews


2
Зауважте, що цей фільтр стане доступним лише у тому випадку, якщо ви також включили модуль i18n_taxonomy. Тобто, якщо ви використовуєте переклад вузлів для термінів таксономії.
tanius

3

Ви можете використовувати модуль Internationalization 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 асоціює мову лише з вузлами.

Ви можете встановити вигляд, щоб він відображав лише вузли з попередньо визначеною мовою.

  • У розділі "Критерії фільтрування" виберіть "Додати"
  • у наступній формі виберіть "Переклад вмісту: мова"
  • наступна форма дозволить вам вибрати, яку мову використовувати для фільтрації вмісту перегляду між "Вибрати все", "Мова поточного користувача", "Мова сайту за замовчуванням", "Без мови" та однією з мов, включених на сайті.

Я додав цей фільтр у вигляд терміна таксономії, що постачається з модулем «Вид», вибравши англійську мову як фільтрувати вміст, і я створив два вузли: один англійською та один латинський. Я призначив обом вузлам один і той же термін таксономії, той, з ідентифікатором, рівним 22.
Коли я відвідав http://example.com/taxonomy/term/22 , то вигляд ефективно показав лише вміст англійською мовою.


це справді дивно в drupal 5, я легко фільтрую систематику за мовою. але будь-який спосіб дякую за обмін відповідями.
саляма мохамада

0

Мовна фільтрація для перекладу юридичних осіб. Мовний фільтр у розділі "Критерії фільтрування" потрібен лише у тому випадку, якщо ви використовуєте систему перекладу вузлів. Якщо замість цього ви використовуєте більш сучасну систему перекладу Entity, доступну для Drupal 7, просто адаптуйте налаштування "Мова поля" в розділі "Інше" подання.

Як це зробити з точки зору систематики. Я спробував це з точки зору систематики, і це працює. Просто переконайтеся, що ви додали правильний один із двох екземплярів поля для кожного поля, що перекладається, а саме той, що описує "З'являється у: таксономія-термін: ваш-vocab-ім'я". Детальніше дивіться у випуску №1841434 .


0

Додайте до свого YOUR_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

Створіть Файл "представлення / обробники / фільтр / 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';
  }
}

З'явиться Очистити всі кеші та новий критерій.

Або скористайтеся моїм модулем Akuma Taxonomy


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');
  }
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.