Drupal 7 drupal7根据视图中的会话筛选内容类型

Drupal 7 drupal7根据视图中的会话筛选内容类型,drupal-7,drupal-modules,drupal-views,Drupal 7,Drupal Modules,Drupal Views,我创建了一个具有多个字段的自定义类型。 1字段是“为所有人显示”的复选框 第二个字段是用于添加代码的文本字段(您可以添加多个文本字段) 我创建了一个视图,其中所有这些内容类型都显示在一个页面中。(本工程) 但现在: 当一个人进入网站时,他必须插入一个代码。此代码保存到cookie中,因为它需要记住大约2周。 所以我不能使用上下文过滤器 如果选中复选框“为所有人显示”,则显示此块。 如果复选框“show for all people”(为所有人显示)未选中,则此块将隐藏,但没有代码或代码是插入到第

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

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

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

如果选中复选框“为所有人显示”,则显示此块。 如果复选框“show for all people”(为所有人显示)未选中,则此块将隐藏,但没有代码或代码是插入到第二个字段中的值之一的人除外

我不想使用视图php_过滤器。但我不知道如何处理这个问题


我在web上尝试了一些创建自定义筛选器的解决方案,但这里的问题是,我们无法访问表单值

我找到了一个解决方案,但我不确定这是否是正确的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);
    }
  }
}