Показ блока один раз

Главные вкладки

Аватар пользователя genco genco 25 декабря 2020 в 16:00

Здравствуйте, друзья. Такой вопрос, как показывать определённый блок пользователю только один раз. Я понимаю, что нужно работать с куками, но не понимаю в какую сторону копать

Комментарии

Аватар пользователя marassa marassa 25 декабря 2020 в 16:19

genco wrote: как показывать определённый блок пользователю только один раз

Кто есть в данном контексте "пользователь"? Зарегистрированный пользователь сайта с логином и паролем, который должен увидеть блок один раз в жизни или любой посетитель-аноним, который должен увидеть блок один раз за визит?

Аватар пользователя marassa marassa 25 декабря 2020 в 16:25

Для показа блока в зависимости от куки или session variable в восьмерке есть модуль Request data conditions, про семерку ничего не знаю. Прям в самом блоке можно прописать js, который установит куку при просмотре блока.
С зарегистрированными пользователями еще проще, совсем недавно обсуждалось: https://drupal.ru/node/142808#comment-745406

Аватар пользователя OldWarrior OldWarrior 25 декабря 2020 в 16:47

genco wrote: Я понимаю, что нужно работать с куками, но не понимаю в какую сторону копать

В сторону кук же.

1) А далее можно кодом, как-то так:

<?php
/**
 * Implements hook_block_info_alter().
 */
function mymodule_block_info_alter(&$blocks$theme$code_blocks) {
  
// Не кешировать, но можно и другие значения, если нужен кеш.
  
$blocks['your_block_id']['cache'] = DRUPAL_NO_CACHE
  
$blocks['your_block_id']['visibility'] = BLOCK_VISIBILITY_PHP;
  
// Именно так, т.е. - строка с PHP-кодом.
  
$blocks['your_block_id']['pages'] = '<?php your_function_here(); ?>'
}

/**
 * Собственно, "оно".
 */
function your_function_here() {
  
// Что-то там делаем с куками (установка, проверка и т.п.) ...
  
return TRUE// чтобы показать блок
  // или 
  
return FALSE// чтобы спрятать блок
}
?>

2) Или же попробовать rules_block_visibility

Аватар пользователя OldWarrior OldWarrior 25 декабря 2020 в 16:54

Припоминаю, что можно же включить ещё просто проверку по PHP-коду в условиях видимости блока. Только не помню уже как в D7 - нужен ли отдельный модуль или всё есть в коробке.

Аватар пользователя genco genco 25 декабря 2020 в 19:05

Нет, я не не знаю. А вебформ куки для анонимов записывает? Или только с зарегистрированными работает ?