如何按语言过滤分类术语?


9

我已经搜索了一种按语言过滤分类法术语的方法(就像对节点所做的那样),但是我没有找到任何方法来做到这一点。

“视图”模块是否也支持分类法中的过滤,或者仅支持节点中的过滤?
如何按语言过滤分类术语?


1.在词汇表中使用2组2.使用hook_form_alter向用户声明使用组
dobeerman 2011年

我不了解用户与分类组的提取有什么关系。该站点以示例A lang,B lang,C lang的多种语言显示,当用户访问B lang时,我只希望基于该语言的分类法以其他语言显示。不是我翻译每种启用语言的分类法术语。
mohamad salama 2011年

#我可以在视图中编辑查询字符串吗?或只是为了通知我。如果在哪里可以编辑它?
mohamad salama 2011年

Answers:


11

通过启用模块国际化视图,可以使用按语言过滤分类术语的选项。请注意,该版本当前处于开发阶段,但它的作用像一个超级按钮。

该屏幕截图显示了安装i18nviews的效果


2
请注意,只有同时启用了模块,此过滤器才可用i18n_taxonomy。也就是说,如果您对分类术语使用节点转换。
tanius


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

由于Drupal仅将一种语言与节点相关联,因此Views模块不允许按与之相关的语言来过滤分类法术语。

但是,您可以将视图设置为仅显示具有预定义语言的节点。

  • 在“过滤条件”下,选择“添加”
  • 在下一个表格中,选择“内容翻译:语言”
  • 下一个表格将允许您在“全选”,“当前用户的语言”,“默认站点语言”,“无语言”和站点中启用的一种语言之间选择用于过滤视图内容的语言。

我在“视图”模块随附的分类术语视图中添加了此过滤器,选择英语作为语言来过滤内容,然后创建了两个节点:一个为英语,一个为拉丁语。我为两个节点分配了相同的分类术语,即ID等于22的分类术语。
当我访问http://example.com/taxonomy/term/22时,视图实际上仅显示了英语内容。


在drupal 5中它确实很奇怪,我可以轻松地按语言过滤分类法。但以任何方式感谢您分享答案。
mohamad salama 2011年

0

实体翻译的语言过滤。仅当您使用节点翻译系统时,才需要视图的“过滤器条件”部分中的语言过滤器。如果改为使用适用于Drupal 7 的更现代的Entity Translation系统,则只需在视图的“其他”部分中调整“字段语言”设置即可。

如何按照分类学术语进行操作。我尝试使用此分类学术语,并且有效。只需确保为每个可翻译字段添加正确的两个字段实例之一,即描述为“出现于:taxonomy-term:your-vocab-name”的实例。有关详细信息,请参见问题#1841434


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

在模块目录中创建文件“ views / handlers / filter / 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分类法


0

由于国际化视图模块存在其他一些问题,即它似乎改变了视图的所有已翻译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');
  }
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.