2015-12-03 10 views
0

Я создал собственный тип с несколькими полями. 1 поле - это флажок для «показать всем людям» 2-е поле - текстовое поле (вы можете добавить несколько текстовых полей) для добавления кода.drupal7 Тип содержимого фильтра, основанный на просмотре сеанса

Я создал представление, где все эти типы содержимого отображаются на странице. (это работает)

Но сейчас: Когда человек входит на сайт, он должен вставить код. Этот код сохраняется в файл cookie, потому что его нужно помнить около 2 недель. Поэтому я не могу использовать контекстные фильтры.

Если отмечена галочка "show for all people", этот блок показывается. Если флажок «показать для всех людей» не установлен, этот блок скрыт, за исключением людей, которые вошли без кода, или если код является одним из значений, которые были вставлены во второе поле.

Я не хочу использовать представления php_filter. Но я не знаю, как это сделать.

Я пробовал некоторые решения в Интернете для создания настраиваемого фильтра, но проблема здесь в том, что мы не можем получить доступ к значениям формы.

ответ

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); 
    } 
    } 
}