drupal7 根据视图中的会话过滤内容类型

问题描述 投票:0回答:1

我创建了一个具有多个字段的自定义类型。 1 个字段是“向所有人显示”的复选框 第二个字段是一个文本字段(您可以添加多个文本字段),用于添加代码。

我创建了一个视图,其中所有这些内容类型都显示在页面中。 (这有效)

但是现在: 当一个人进入该网站时,他必须插入一个代码。该代码被保存到cookie中,因为它需要被记住大约2周。 所以我无法使用上下文过滤器。

如果选中“向所有人显示”复选框,则显示此块。 如果未选中“向所有人显示”复选框,则此块将被隐藏,但未输入代码的人员除外,或者代码是插入到第二个字段中的值之一。

我不想使用视图 php_filter。但我不知道如何处理这个问题。

我在网上尝试了一些解决方案来创建自定义过滤器,但问题是我们无法访问表单值。

php drupal-7 drupal-modules drupal-views
1个回答
0
投票

我找到了一个解决方案,但我不确定这是否是正确的drupal方式。 我使用 hook_node_view 函数来获取该页面上打印的所有节点。我检查插入 cookie 的代码是否包含允许的代码(在内容类型的文本字段中创建)

function code_node_view($node, $view_mode, $langcode) {
  if ($node->type == 'winning_codes') {
    $code = _code_read_cookie('code');
    $winning_codes = (!empty($node->field_winning_codes['und'])) ? $node->field_winning_codes['und'] : array();
    $winning_codes = array_map(function ($ar) {
      return $ar['value'];
    }, $winning_codes);
    if (!empty($code) && (!in_array($code, $winning_codes))) {
      hide($node->content);
    }
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.