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