查看节点语言上的公开过滤器,用于 2 个不同的站点,具有不同的语言列表

Posted

技术标签:

【中文标题】查看节点语言上的公开过滤器,用于 2 个不同的站点,具有不同的语言列表【英文标题】:Views exposed filter on node language, used on 2 different sites, with a different language list 【发布时间】:2014-11-04 14:11:21 【问题描述】:

我的问题:

我有一个用于 2 个站点(drupal 多站点)的 drupal 网站。 这 2 个站点使用 2 个不同的数据库,最重要的是使用不同的语言。 一个带有“法语,英语,德语,意大利语,...”, 一个只有“英语”。

我创建了一个视图来管理内容类型,并公开了一个包含节点语言过滤器的过滤器表单。

问题是当您导出视图并在另一个网站中使用不同的语言列表时,默认值是从视图定义中获取的(它在views_handler_filter_in_operator 中完成,在value_form(&$form, &$form_state) 函数中,带有@ 987654325@ 值) 问题是这些值是硬编码的,它不是说“列出所有可用的语言”。 当我在第二个网站上使用此视图时(默认为英文),使用默认值“french”(导致视图定义)并且该值被拒绝,导致错误。

如何创建另一个视图过滤器处理程序,使其没有硬编码的值列表,而是从当前可用语言获取其值的自动列表。

这是视图导出的摘录:

$handler->display->display_options['filters']['language']['value'] = array(
'fr' => 'fr',
'en' => 'en',
'de' => 'de',
'it' => 'it',
'es' => 'es',
'nl' => 'nl',

);

非常感谢您的帮助,解释起来有点冗长和复杂:D

【问题讨论】:

【参考方案1】:

解决方案

解决方法是将过滤器设置为不需要,这样就可以避免为过滤器选择值。 在这种情况下,列表将按预期填充当前语言。 导出的视图不包含任何硬编码值。

再进一步

如果您只想要当前语言,而不想要这些值:

'CURRENT_LANGUAGE' => t("当前用户的语言", 'DEFAULT_LANGUAGE' => t("默认网站语言"), LANGUAGE_NONE => t('无语言')

您可以创建一个自定义过滤器处理程序,非常简单,并且只覆盖get_value_options函数:

在你的模块 .info 文件中添加这一行:

files[] = views/views_handler_filter_node_enabled_language.inc

实现hook_views_data_alter

/**
 * Implements hook_views_data_alter().
 *
 * Add translation information to the node table.
 */
function YOURMODULE_views_data_alter(&$data) 
  $data['node']['enabled_languages'] = array(
    'title' => t('Enabled languages'),
    'help' => t('The language the content is in.
                 The filter values are only the enabled languages.'),
    // The real field the query filter on
    'real field' => 'language',
    'filter' => array(
      'handler' => 'views_handler_filter_node_enabled_language',
    ),
  );    

创建你的处理程序类:

/**
 * Filter by language.
 *
 * @ingroup views_filter_handlers
 */
class views_handler_filter_node_enabled_language extends views_handler_filter_in_operator     
  function get_value_options() 
    if (!isset($this->value_options)) 
      $this->value_title = t('Language');
      $this->value_options = views_language_list();
    
  

【讨论】:

以上是关于查看节点语言上的公开过滤器,用于 2 个不同的站点,具有不同的语言列表的主要内容,如果未能解决你的问题,请参考以下文章

使用当前站点语言过滤节点

Drupal 7 Views 3:搜索特定字段的公开过滤器

DRUPAL,视图,公开搜索过滤器:如何从不过滤特定节点?

Drupal 暴露过滤器可跨不同显示器工作

如何在视图中公开不同的过滤器

wireshark软件抓包数据怎么查看