ฉันค้นหาวิธีกรองคำศัพท์อนุกรมวิธานตามภาษา (เช่นเดียวกับโหนด) แต่ฉันไม่พบวิธีที่จะทำ
โมดูล Views สนับสนุนตัวกรองใน taxonomies ด้วยหรือในโหนด?
ฉันจะกรองคำศัพท์อนุกรมวิธานตามภาษาได้อย่างไร
ฉันค้นหาวิธีกรองคำศัพท์อนุกรมวิธานตามภาษา (เช่นเดียวกับโหนด) แต่ฉันไม่พบวิธีที่จะทำ
โมดูล Views สนับสนุนตัวกรองใน taxonomies ด้วยหรือในโหนด?
ฉันจะกรองคำศัพท์อนุกรมวิธานตามภาษาได้อย่างไร
คำตอบ:
ด้วยการเปิดใช้งานโมดูลการทำให้เป็นสากลมุมมองตัวเลือกในการกรองคำอนุกรมวิธานโดยภาษาที่มีอยู่ โปรดทราบว่าขณะนี้เวอร์ชันดังกล่าวเป็น dev แต่ใช้งานได้ดี
i18n_taxonomy
ด้วย นั่นคือถ้าคุณใช้การแปลโหนดสำหรับเงื่อนไข taxonomy
คุณสามารถใช้โมดูลInternationalization Viewsร่วมกับโมดูล Taxonomy Translation (ซึ่งเป็นส่วนหนึ่งของการทำให้เป็นสากล ) เพื่อรับตัวกรองภาษาสำหรับคำศัพท์อนุกรมวิธาน
แปลมุมมองโดยใช้การทำให้เป็นสากล นี่เป็นงานที่อยู่ระหว่างดำเนินการและยังไม่สามารถแปลคุณสมบัติ 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 เชื่อมโยงภาษากับโหนดเท่านั้น
คุณสามารถตั้งค่ามุมมองให้แสดงเฉพาะโหนดที่มีภาษาที่กำหนดไว้ล่วงหน้า
ฉันเพิ่มตัวกรองนี้ในมุมมองคำศัพท์อนุกรมวิธานที่มาพร้อมกับโมดูล Views เลือกภาษาอังกฤษเป็นภาษาเพื่อกรองเนื้อหาและฉันสร้างสองโหนด: หนึ่งในภาษาอังกฤษและหนึ่งในภาษาละติน ฉันกำหนดให้ทั้งสองโหนดในคำศัพท์อนุกรมวิธานเดียวกันอันที่มี ID เท่ากับ 22
เมื่อฉันเยี่ยมชมhttp://example.com/taxonomy/term/22มุมมองจะแสดงเนื้อหาในภาษาอังกฤษได้อย่างมีประสิทธิภาพ
การกรองภาษาสำหรับการแปลเอนทิตี ตัวกรองภาษาในส่วน "เกณฑ์ตัวกรอง" ของมุมมองจำเป็นเฉพาะเมื่อคุณใช้ระบบการแปลโหนด หากคุณใช้ระบบการแปลเอนทิตีที่ทันสมัยกว่าสำหรับ Drupal 7 เพียงปรับการตั้งค่า "ฟิลด์ภาษา" ในส่วน "อื่น ๆ " ของมุมมอง
วิธีทำเพื่อให้ได้ข้อตกลงทางอนุกรมวิธาน ฉันลองสิ่งนี้เพื่อหาข้อตกลงทางอนุกรมวิธานและใช้งานได้ ตรวจสอบให้แน่ใจว่าคุณเพิ่มอินสแตนซ์ของฟิลด์หนึ่งในสองที่ถูกต้องสำหรับทุกฟิลด์ที่แปลได้คืออันที่มีคำอธิบายของ "ปรากฏใน: คำศัพท์ทางภาษี: คำศัพท์ของคุณ" โปรดดูรายละเอียดในเรื่อง #
เพิ่ม 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
สร้างไฟล์ "มุมมอง / ตัวจัดการ / ตัวกรอง / 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ของฉัน
เนื่องจากฉันมีปัญหาอื่น ๆ กับโมดูล Internationalization Views กล่าวคือดูเหมือนว่าจะเปลี่ยน UI ที่แปลแล้วทั้งหมดจากมุมมอง (ทิศทางเพจเจอร์ข้อความส่วนหัว / ส่วนท้าย ฯลฯ ) ฉันยกโค้ดที่เกี่ยวข้องสำหรับการสร้างตัวกรองภาษาออกมาต่างหาก โมดูล. แทนที่ 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');
}
}