Drupal 视图在节点语言上公开筛选器,在两个不同的站点上使用,具有不同的语言列表

Drupal 视图在节点语言上公开筛选器,在两个不同的站点上使用,具有不同的语言列表,drupal,drupal-7,views,Drupal,Drupal 7,Views,我的问题是: 我有一个drupal网站,用于两个站点drupal多站点。 这两个站点使用两个不同的数据库,最重要的是,它们有不同的语言。 一个有法语、英语、德语、意大利语。。。, 只有英语的 我创建了一个视图来管理内容类型,并公开了一个包含节点语言过滤器的过滤器表单 问题是,当您导出视图并在另一个网站中使用其他语言列表时,默认值是从视图定义中获取的,它在视图处理程序中完成,在值形式&$form,&$form状态函数中完成,并在值上进行数组移位 问题是这些值是硬编码的,并不是说列出所有可用的语言。

我的问题是:

我有一个drupal网站,用于两个站点drupal多站点。 这两个站点使用两个不同的数据库,最重要的是,它们有不同的语言。 一个有法语、英语、德语、意大利语。。。, 只有英语的

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

问题是,当您导出视图并在另一个网站中使用其他语言列表时,默认值是从视图定义中获取的,它在视图处理程序中完成,在值形式&$form,&$form状态函数中完成,并在值上进行数组移位 问题是这些值是硬编码的,并不是说列出所有可用的语言。 当我在第二个网站上默认使用英语使用此视图时,会使用默认值french,从而导致视图定义被拒绝,并导致错误

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

以下是视图导出的摘录:

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

非常感谢您的帮助,解释:D

解决方案有点冗长和复杂 解决方案是将过滤器设置为非必需,这样可以避免为过滤器选择值。 在这种情况下,列表将按预期用当前语言填充。 导出的视图不包含任何硬编码值

再进一步 如果只需要当前语言,而不需要这些值:

“当前_语言”=>t当前用户的语言, “默认_语言”=>tDefault站点语言, 语言_NONE=>t'No LANGUAGE' 您可以创建一个非常简单的自定义筛选器处理程序,并且只覆盖get_value_options函数:

在module.info文件中添加此行: 实现一个hook\u views\u data\u alter 创建处理程序类:
files[] = views/views_handler_filter_node_enabled_language.inc
/**
 * 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();
    }
  }
}