Я шукав спосіб фільтрації термінів таксономії за мовою (як це зроблено для вузлів), але не знайшов способу це зробити.
Чи підтримує модуль Views цей фільтр і в таксономіях чи просто у вузлах?
Як я можу фільтрувати терміни систематики за мовою?
Я шукав спосіб фільтрації термінів таксономії за мовою (як це зроблено для вузлів), але не знайшов способу це зробити.
Чи підтримує модуль Views цей фільтр і в таксономіях чи просто у вузлах?
Як я можу фільтрувати терміни систематики за мовою?
Відповіді:
Увімкнувши модулі Internationalization Views , доступна можливість фільтрувати термін таксономії за мовою. Зауважте, що версія наразі розроблена, але вона працює як шарм.
i18n_taxonomy
. Тобто, якщо ви використовуєте переклад вузлів для термінів таксономії.
Ви можете використовувати модуль Internationalization Views в поєднанні з модулем перекладу таксономії (який є частиною інтернаціоналізації ), щоб отримати мовний фільтр для термінів таксономії.
Перекладіть перегляди за допомогою інтернаціоналізації. Це незавершена робота, і ще не всі властивості перегляду ще можуть бути перекладені. Потрібна інтернаціоналізація 6.x-1.5 або новіша .
Ось ще одне рішення:
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',
);
}
}
Джерело тут .
Модуль Views не дозволяє фільтрувати терміни таксономії за мовою, пов'язаною з нею, оскільки Drupal асоціює мову лише з вузлами.
Ви можете встановити вигляд, щоб він відображав лише вузли з попередньо визначеною мовою.
Я додав цей фільтр у вигляд терміна таксономії, що постачається з модулем «Вид», вибравши англійську мову як фільтрувати вміст, і я створив два вузли: один англійською та один латинський. Я призначив обом вузлам один і той же термін таксономії, той, з ідентифікатором, рівним 22.
Коли я відвідав http://example.com/taxonomy/term/22 , то вигляд ефективно показав лише вміст англійською мовою.
Мовна фільтрація для перекладу юридичних осіб. Мовний фільтр у розділі "Критерії фільтрування" потрібен лише у тому випадку, якщо ви використовуєте систему перекладу вузлів. Якщо замість цього ви використовуєте більш сучасну систему перекладу Entity, доступну для Drupal 7, просто адаптуйте налаштування "Мова поля" в розділі "Інше" подання.
Як це зробити з точки зору систематики. Я спробував це з точки зору систематики, і це працює. Просто переконайтеся, що ви додали правильний один із двох екземплярів поля для кожного поля, що перекладається, а саме той, що описує "З'являється у: таксономія-термін: ваш-vocab-ім'я". Детальніше дивіться у випуску №1841434 .
Додайте до свого 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
Оскільки у мене виникають деякі інші проблеми з модулем "Інтернаціоналізація поглядів", а саме те, що він, здається, змінює вже перекладений інтерфейс користувача з подань (вказівки пейджера, текст заголовка / колонтитула тощо), я надаю відповідний код для створення мовних фільтрів окремо модуль. Замініть 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');
}
}