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

时间:2015-12-03 08:41:38

标签: drupal-7 drupal-modules drupal-views

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

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

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

如果选中“为所有人显示”复选框,则会显示此块。 如果取消选中“为所有人显示”复选框,则隐藏此块,除了没有代码进入的人,或者代码是第二个字段中插入的值之一。

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

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

1 个答案:

答案 0 :(得分: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);
    }
  }
}