Галка "согласен с правилами" в форме добавления материала

Аватар пользователя marassa marassa 18 марта в 19:19

Как вы решаете подобную задачу в восьмерке?
В форме добавления некоего типа материала (желательно, чтобы только при добавлении, но не при редактировании) должен быть чекбокс с описанием правил игры, без галки в котором материал не должен сохраняться.
На первый раз для каждого пользователя чекбокс изначально должен быть off (т.е. пользователь должен в явном виде сам проставить галку), в последующем для данного пользователя галка должна быть по умолчанию проставлена.
Просто добавить поле к типу материала с валидацией? А как запоминать факт того, что юзер уже однажды согласился с правилами?

Комментарии

Аватар пользователя ivnish ivnish 18 марта в 19:31

Простой вариант, это добавить обязательное булево поле. Если оно не проставлено, то материал создать не удастся. Пользователь ставит галку, создаёт материал и при редактировании галка уже будет стоять. Тут можно придумать как это поле скрыть при редактировании. Или кастом в пару строчек написать или контриб поискать или так оставить

Аватар пользователя marassa marassa 18 марта в 19:40

Я, наверное, не совсем понятно изложил. Понятно, что при редактировании уже созданного материала галка уже будет там стоять. Надо, чтобы при создании любого нового материала пользователем, который уже создал хотя бы один материал и проставил там галку, галка была по умолчанию уже проставлена. То есть надо где-то хранить этот статус пользователя "согласный с правилами" - кука? поле в профиле пользователя? - и подтаскивать его значение при создании ноды. Подтаскивать из профиля пользователя в принципе можно с помощью модуля Field Default Token. Но вот проставлять его в профиле похоже придется из хука при сохранении ноды, другого способа что-то не вижу.
Но сама идея с добавлением фиктивного поля в ноду мне не нравится тем, что в десятках тысяч нод придется хранить никому не нужное поле, всегда равное TRUE...

Аватар пользователя vlucas vlucas 18 марта в 20:43

Поле в профиле.
В материале галка - hook_form_alter - берёт данные из поля профиля/сохраняет поле профиля-в доп сабмите.
В редактировании сущности профиля галку скрыть.

Можно даже уже проставленную галку не выводить, ну это на ваше усмотрение

Аватар пользователя ivnish ivnish 18 марта в 19:48

Можно попробовать ещё flag заюзать для этих целей. Но нужно будет флаг пользователя программно присобачить к форме создания ноды. Короче попахивает написанием кастома, мне кажется

Аватар пользователя marassa marassa 18 марта в 19:56

Flag посмотрю, спасибо, не пользовался.
Почему-то был уверен, что задача типичная и востребованная, и я легко найду готовый контриб. Но не тут-то было. Есть terms_of_use, который добавляет галку, но жостко к форме регистрации, и, естественно, ничего нигде не сохраняет, ибо пользователь регистрируется только раз в жизни. Есть всякие GDPR/FZ-152, которые как раз сохраняют статус, но у них свои собственные формы. А чтоб всё вместе, такого почему-то нет.

Аватар пользователя marassa marassa 18 марта в 21:18

Сейчас именно так сделано, никто не читает - проверено Wink Отказ в сохранении формы и подсвечивание галки и текста красным цветом, возможно, заставит прочесть.

Аватар пользователя Семенов Семенов 18 марта в 23:14

вы думаете что ктото если поставит галку, будет их читать перед этим.
тогда просто не показывать кнопку пока не прочтут.

"Согласен с правилами....прочитать и на слове прочитать развернуть правила и в конце кнопку сохранить материал.

А вообще подобное лучше сделать при регистрации нового пользователя.