Здравствуйте, друзья. Такой вопрос, как показывать определённый блок пользователю только один раз. Я понимаю, что нужно работать с куками, но не понимаю в какую сторону копать
genco wrote: как показывать определённый блок пользователю только один раз
Кто есть в данном контексте "пользователь"? Зарегистрированный пользователь сайта с логином и паролем, который должен увидеть блок один раз в жизни или любой посетитель-аноним, который должен увидеть блок один раз за визит?
Для показа блока в зависимости от куки или session variable в восьмерке есть модуль Request data conditions, про семерку ничего не знаю. Прям в самом блоке можно прописать js, который установит куку при просмотре блока.
С зарегистрированными пользователями еще проще, совсем недавно обсуждалось: https://drupal.ru/node/142808#comment-745406
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; // чтобы спрятать блок } ?>
Припоминаю, что можно же включить ещё просто проверку по PHP-коду в условиях видимости блока. Только не помню уже как в D7 - нужен ли отдельный модуль или всё есть в коробке.
Комментарии
Кто есть в данном контексте "пользователь"? Зарегистрированный пользователь сайта с логином и паролем, который должен увидеть блок один раз в жизни или любой посетитель-аноним, который должен увидеть блок один раз за визит?
Аноним должен видеть один раз в сессию, а зарегистрированный один раз за жизнь)
Для показа блока в зависимости от куки или session variable в восьмерке есть модуль Request data conditions, про семерку ничего не знаю. Прям в самом блоке можно прописать js, который установит куку при просмотре блока.
С зарегистрированными пользователями еще проще, совсем недавно обсуждалось: https://drupal.ru/node/142808#comment-745406
А webform не записывает куки для анонимного пользователя?
В сторону кук же.
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
Припоминаю, что можно же включить ещё просто проверку по PHP-коду в условиях видимости блока. Только не помню уже как в D7 - нужен ли отдельный модуль или всё есть в коробке.
Вы не с Региной вместе работаете https://drupal.ru/node/142808?
Вариант с ограничением на заполнение вебформы не?
Нет, я не не знаю. А вебформ куки для анонимов записывает? Или только с зарегистрированными работает ?