Làm cách nào tôi có thể lọc các thuật ngữ phân loại theo ngôn ngữ?


9

Tôi đã tìm kiếm một cách để lọc các thuật ngữ phân loại theo ngôn ngữ (như được thực hiện cho các nút), nhưng tôi không tìm thấy cách nào để làm điều đó.

Liệu mô-đun Views có hỗ trợ bộ lọc trong phân loại quá không, hay chỉ trong các nút?
Làm cách nào tôi có thể lọc các thuật ngữ phân loại theo ngôn ngữ?


1. sử dụng 2 nhóm trong từ vựng 2. sử dụng hook_form_alter để khai báo nhóm cho người dùng sử dụng
dobeerman

tôi không hiểu người dùng phải làm gì với nhóm phân loại bán tải. trang web có nhiều ngôn ngữ, ví dụ A lang, B lang, C lang và khi người dùng truy cập B lang tôi chỉ muốn các phân loại được hiển thị dựa trên ngôn ngữ này, v.v. bằng ngôn ngữ khác. không phải là tôi dịch các thuật ngữ phân loại cho mỗi ngôn ngữ được kích hoạt.
mohamad salama

# tôi có thể chỉnh sửa chuỗi truy vấn trong dạng xem không?! hoặc nó chỉ để thông báo cho tôi. Nếu nó là nơi để chỉnh sửa nó?
mohamad salama

Câu trả lời:


11

Bằng cách kích hoạt Chế độ xem Quốc tế hóa mô-đun , tùy chọn lọc thuật ngữ phân loại theo ngôn ngữ có sẵn. Lưu ý rằng phiên bản hiện đang ở dev nhưng nó hoạt động như một bùa mê.

ảnh chụp màn hình cho thấy hiệu quả của việc cài đặt i18nview


2
Lưu ý rằng bộ lọc này sẽ chỉ khả dụng nếu bạn cũng đã bật mô-đun i18n_taxonomy. Đó là, nếu bạn sử dụng dịch nút cho các thuật ngữ phân loại.
tanius

3

Bạn có thể sử dụng mô-đun Chế độ xem Quốc tế hóa kết hợp với mô-đun Dịch thuật phân loại (là một phần của Quốc tế hóa ) để có được bộ lọc ngôn ngữ cho các thuật ngữ phân loại.

Dịch quan điểm bằng cách sử dụng quốc tế hóa. Đây là một công việc đang tiến hành và không phải tất cả các thuộc tính Lượt xem có thể được dịch. Yêu cầu Quốc tế hóa 6.x-1.5 hoặc mới hơn .


2

Đây là một giải pháp khác:

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

Nguồn ở đây .


1

Mô-đun Lượt xem không cho phép lọc các thuật ngữ phân loại theo ngôn ngữ được liên kết với nó, vì Drupal chỉ liên kết một ngôn ngữ với các nút.

Tuy nhiên, bạn có thể đặt chế độ xem chỉ hiển thị các nút có ngôn ngữ được xác định trước.

  • Trong "Tiêu chí lọc", chọn "Thêm"
  • trong mẫu tiếp theo, chọn "Dịch nội dung: Ngôn ngữ"
  • biểu mẫu tiếp theo sẽ cho phép bạn chọn ngôn ngữ nào sẽ sử dụng để lọc nội dung xem giữa "Chọn tất cả", "Ngôn ngữ của người dùng hiện tại", "Ngôn ngữ trang mặc định", "Không có ngôn ngữ" và một trong những ngôn ngữ được bật trong trang web.

Tôi đã thêm bộ lọc này vào chế độ xem phân loại thuật ngữ đi kèm với mô-đun Lượt xem, chọn tiếng Anh làm ngôn ngữ để lọc nội dung và tôi đã tạo hai nút: một bằng tiếng Anh và một bằng tiếng Latin. Tôi đã gán cho cả hai nút cùng một thuật ngữ phân loại, một nút có ID bằng 22.
Khi tôi truy cập http://example.com/taxonomy/term/22 , chế độ xem chỉ hiển thị nội dung bằng tiếng Anh một cách hiệu quả.


Nó thực sự kỳ lạ trong drupal 5 tôi có thể lọc các nguyên tắc phân loại bằng ngôn ngữ một cách dễ dàng. nhưng cách nào cũng cảm ơn vì đã chia sẻ câu trả lời
mohamad salama

0

Lọc ngôn ngữ cho dịch thực thể. Chỉ cần một bộ lọc ngôn ngữ trong phần "Tiêu chí lọc" của chế độ xem nếu bạn sử dụng hệ thống dịch nút. Thay vào đó, nếu bạn sử dụng hệ thống Dịch thực thể hiện đại hơn có sẵn cho Drupal 7, chỉ cần điều chỉnh cài đặt "Ngôn ngữ trường" trong phần "Khác" của chế độ xem.

Làm thế nào để làm điều đó cho các điều khoản phân loại. Tôi đã thử điều này cho các thuật ngữ phân loại và nó hoạt động. Chỉ cần đảm bảo bạn thêm một trong hai trường hợp chính xác cho mỗi trường có thể dịch, cụ thể là trường có mô tả "Xuất hiện trong: taxonomy-term: your-vocab-name". Để biết chi tiết, xem về vấn đề # 1841434 .


0

Thêm vào YOU_MODULE.module của bạn

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;
}

Thêm vào YOU_MODULE.info của bạn

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

Tạo tệp "lượt xem / trình xử lý / bộ lọc / YOU_MODULE_handler_filter_lingu.inc" trong thư mục mô-đun của bạn và đặt nội dung tiếp theo:

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

Xóa tất cả bộ nhớ cache và tiêu chí mới sẽ xuất hiện.

Hoặc sử dụng mô-đun Akuma Taxonomy của tôi


0

Vì tôi gặp một số vấn đề khác với mô-đun Internationalization Views, cụ thể là nó dường như thay đổi giao diện người dùng đã dịch từ các chế độ xem (hướng máy nhắn tin, văn bản đầu trang / chân trang, v.v.), tôi gỡ bỏ mã liên quan để tạo bộ lọc ngôn ngữ riêng biệt mô-đun. Thay thế MYMODULE bên dưới bằng tên của mô-đun của bạn. Làm việc như một cơ duyên cho tôi!

/**
 * 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');
  }
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.