我创建了一个具有多个字段的自定义类型。 1 个字段是“向所有人显示”的复选框 第二个字段是一个文本字段(您可以添加多个文本字段),用于添加代码。
我创建了一个视图,其中所有这些内容类型都显示在页面中。 (这有效)
但是现在: 当一个人进入该网站时,他必须插入一个代码。该代码被保存到cookie中,因为它需要被记住大约2周。 所以我无法使用上下文过滤器。
如果选中“向所有人显示”复选框,则显示此块。 如果未选中“向所有人显示”复选框,则此块将被隐藏,但未输入代码的人员除外,或者代码是插入到第二个字段中的值之一。
我不想使用视图 php_filter。但我不知道如何处理这个问题。
我在网上尝试了一些解决方案来创建自定义过滤器,但问题是我们无法访问表单值。
我找到了一个解决方案,但我不确定这是否是正确的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);
}
}
}