ฉันจะกรองคำศัพท์อนุกรมวิธานตามภาษาได้อย่างไร


9

ฉันค้นหาวิธีกรองคำศัพท์อนุกรมวิธานตามภาษา (เช่นเดียวกับโหนด) แต่ฉันไม่พบวิธีที่จะทำ

โมดูล Views สนับสนุนตัวกรองใน taxonomies ด้วยหรือในโหนด?
ฉันจะกรองคำศัพท์อนุกรมวิธานตามภาษาได้อย่างไร


1. ใช้ 2 กลุ่มในคำศัพท์ 2. ใช้ hook_form_alter เพื่อประกาศกลุ่มให้กับผู้ใช้ใช้
dobeerman

ฉันไม่เข้าใจสิ่งที่ผู้ใช้ทำเกี่ยวกับกลุ่มการจัดกลุ่มของอนุกรมวิธาน ไซต์มีหลายภาษาเช่น A lang, B lang, C lang และเมื่อผู้ใช้ไปที่ B lang ฉันต้องการให้ taxonomies แสดงตามภาษานี้และในภาษาอื่น ๆ ไม่ใช่ว่าฉันจะแปลเงื่อนไข taxonomies สำหรับแต่ละภาษาที่เปิดใช้งาน
mohamad salama

# ฉันสามารถแก้ไขสตริงข้อความค้นหาในมุมมอง! หรือเพียงเพื่อแจ้งให้ฉันทราบ ถ้าเป็นที่สำหรับแก้ไขอยู่ที่ไหน
mohamad salama

คำตอบ:


11

ด้วยการเปิดใช้งานโมดูลการทำให้เป็นสากลมุมมองตัวเลือกในการกรองคำอนุกรมวิธานโดยภาษาที่มีอยู่ โปรดทราบว่าขณะนี้เวอร์ชันดังกล่าวเป็น dev แต่ใช้งานได้ดี

สกรีนช็อตแสดงเอฟเฟกต์ของการติดตั้ง i18nviews


2
โปรดทราบว่าตัวกรองนี้จะใช้ได้เฉพาะเมื่อคุณเปิดใช้งานโมดูลi18n_taxonomyด้วย นั่นคือถ้าคุณใช้การแปลโหนดสำหรับเงื่อนไข taxonomy
tanius

3

คุณสามารถใช้โมดูลInternationalization Viewsร่วมกับโมดูล Taxonomy Translation (ซึ่งเป็นส่วนหนึ่งของการทำให้เป็นสากล ) เพื่อรับตัวกรองภาษาสำหรับคำศัพท์อนุกรมวิธาน

แปลมุมมองโดยใช้การทำให้เป็นสากล นี่เป็นงานที่อยู่ระหว่างดำเนินการและยังไม่สามารถแปลคุณสมบัติ 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 เลือกภาษาอังกฤษเป็นภาษาเพื่อกรองเนื้อหาและฉันสร้างสองโหนด: หนึ่งในภาษาอังกฤษและหนึ่งในภาษาละติน ฉันกำหนดให้ทั้งสองโหนดในคำศัพท์อนุกรมวิธานเดียวกันอันที่มี ID เท่ากับ 22
เมื่อฉันเยี่ยมชมhttp://example.com/taxonomy/term/22มุมมองจะแสดงเนื้อหาในภาษาอังกฤษได้อย่างมีประสิทธิภาพ


มันแปลกจริงๆใน drupal 5 ฉันสามารถกรอง taxonomies ตามภาษาได้อย่างง่ายดาย แต่วิธีการใด ๆ ขอบคุณสำหรับการแบ่งปันคำตอบ
mohamad salama

0

การกรองภาษาสำหรับการแปลเอนทิตี ตัวกรองภาษาในส่วน "เกณฑ์ตัวกรอง" ของมุมมองจำเป็นเฉพาะเมื่อคุณใช้ระบบการแปลโหนด หากคุณใช้ระบบการแปลเอนทิตีที่ทันสมัยกว่าสำหรับ Drupal 7 เพียงปรับการตั้งค่า "ฟิลด์ภาษา" ในส่วน "อื่น ๆ " ของมุมมอง

วิธีทำเพื่อให้ได้ข้อตกลงทางอนุกรมวิธาน ฉันลองสิ่งนี้เพื่อหาข้อตกลงทางอนุกรมวิธานและใช้งานได้ ตรวจสอบให้แน่ใจว่าคุณเพิ่มอินสแตนซ์ของฟิลด์หนึ่งในสองที่ถูกต้องสำหรับทุกฟิลด์ที่แปลได้คืออันที่มีคำอธิบายของ "ปรากฏใน: คำศัพท์ทางภาษี: คำศัพท์ของคุณ" โปรดดูรายละเอียดในเรื่อง #


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

สร้างไฟล์ "มุมมอง / ตัวจัดการ / ตัวกรอง / 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

เนื่องจากฉันมีปัญหาอื่น ๆ กับโมดูล 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');
  }
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.