【问题标题】:Views exposed filter on node language, used on 2 different sites, with a different language list查看节点语言上的公开过滤器,用于 2 个不同的站点,具有不同的语言列表
【发布时间】: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

【问题讨论】:

    标签: drupal drupal-7 views


    【解决方案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();
        }
      }
    }
    

    【讨论】:

      猜你喜欢
      • 2017-12-21
      • 1970-01-01
      • 1970-01-01
      • 2012-05-04
      • 2020-10-15
      • 1970-01-01
      • 1970-01-01
      • 2016-02-26
      • 1970-01-01
      相关资源
      最近更新 更多