Drupal 视图在节点语言上公开筛选器,在两个不同的站点上使用,具有不同的语言列表
我的问题是: 我有一个drupal网站,用于两个站点drupal多站点。 这两个站点使用两个不同的数据库,最重要的是,它们有不同的语言。 一个有法语、英语、德语、意大利语。。。, 只有英语的 我创建了一个视图来管理内容类型,并公开了一个包含节点语言过滤器的过滤器表单 问题是,当您导出视图并在另一个网站中使用其他语言列表时,默认值是从视图定义中获取的,它在视图处理程序中完成,在值形式&$form,&$form状态函数中完成,并在值上进行数组移位 问题是这些值是硬编码的,并不是说列出所有可用的语言。 当我在第二个网站上默认使用英语使用此视图时,会使用默认值french,从而导致视图定义被拒绝,并导致错误 如何创建另一个视图过滤器处理程序,使其不具有硬编码的值列表,而是具有从当前可用语言获取值的自动列表 以下是视图导出的摘录:Drupal 视图在节点语言上公开筛选器,在两个不同的站点上使用,具有不同的语言列表,drupal,drupal-7,views,Drupal,Drupal 7,Views,我的问题是: 我有一个drupal网站,用于两个站点drupal多站点。 这两个站点使用两个不同的数据库,最重要的是,它们有不同的语言。 一个有法语、英语、德语、意大利语。。。, 只有英语的 我创建了一个视图来管理内容类型,并公开了一个包含节点语言过滤器的过滤器表单 问题是,当您导出视图并在另一个网站中使用其他语言列表时,默认值是从视图定义中获取的,它在视图处理程序中完成,在值形式&$form,&$form状态函数中完成,并在值上进行数组移位 问题是这些值是硬编码的,并不是说列出所有可用的语言。
$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();
}
}
}