Как вы решаете подобную задачу в восьмерке?
В форме добавления некоего типа материала (желательно, чтобы только при добавлении, но не при редактировании) должен быть чекбокс с описанием правил игры, без галки в котором материал не должен сохраняться.
На первый раз для каждого пользователя чекбокс изначально должен быть off (т.е. пользователь должен в явном виде сам проставить галку), в последующем для данного пользователя галка должна быть по умолчанию проставлена.
Просто добавить поле к типу материала с валидацией? А как запоминать факт того, что юзер уже однажды согласился с правилами?
Комментарии
Простой вариант, это добавить обязательное булево поле. Если оно не проставлено, то материал создать не удастся. Пользователь ставит галку, создаёт материал и при редактировании галка уже будет стоять. Тут можно придумать как это поле скрыть при редактировании. Или кастом в пару строчек написать или контриб поискать или так оставить
Я, наверное, не совсем понятно изложил. Понятно, что при редактировании уже созданного материала галка уже будет там стоять. Надо, чтобы при создании любого нового материала пользователем, который уже создал хотя бы один материал и проставил там галку, галка была по умолчанию уже проставлена. То есть надо где-то хранить этот статус пользователя "согласный с правилами" - кука? поле в профиле пользователя? - и подтаскивать его значение при создании ноды. Подтаскивать из профиля пользователя в принципе можно с помощью модуля Field Default Token. Но вот проставлять его в профиле похоже придется из хука при сохранении ноды, другого способа что-то не вижу.
Но сама идея с добавлением фиктивного поля в ноду мне не нравится тем, что в десятках тысяч нод придется хранить никому не нужное поле, всегда равное TRUE...
Поле в профиле.
В материале галка - hook_form_alter - берёт данные из поля профиля/сохраняет поле профиля-в доп сабмите.
В редактировании сущности профиля галку скрыть.
Можно даже уже проставленную галку не выводить, ну это на ваше усмотрение
Так и сделаю, наверное, просто почему-то надеялся найти готовое
Можно попробовать ещё flag заюзать для этих целей. Но нужно будет флаг пользователя программно присобачить к форме создания ноды. Короче попахивает написанием кастома, мне кажется
Flag посмотрю, спасибо, не пользовался.
Почему-то был уверен, что задача типичная и востребованная, и я легко найду готовый контриб. Но не тут-то было. Есть terms_of_use, который добавляет галку, но жостко к форме регистрации, и, естественно, ничего нигде не сохраняет, ибо пользователь регистрируется только раз в жизни. Есть всякие GDPR/FZ-152, которые как раз сохраняют статус, но у них свои собственные формы. А чтоб всё вместе, такого почему-то нет.
А не проще просто написать при каждом создании " Создавая материал пользователь соглашается с правилами..."
Без всяких галок.
Сейчас именно так сделано, никто не читает - проверено
Отказ в сохранении формы и подсвечивание галки и текста красным цветом, возможно, заставит прочесть.
вы думаете что ктото если поставит галку, будет их читать перед этим.
тогда просто не показывать кнопку пока не прочтут.
"Согласен с правилами....прочитать и на слове прочитать развернуть правила и в конце кнопку сохранить материал.
А вообще подобное лучше сделать при регистрации нового пользователя.
будет читать то, что написано на галке, это уже плюс )