В Drupal 7 использую модуль Optional mail on register, чтобы не выводилось поле E-mail в форме регистрации.
Но нет версии этого модуля для Drupal 8.
Может подскажете какой-то аналогичный модуль для Drupal 8?
И ещё нужно, чтобы не выводилось поле Confirm password в поле регистрации. Можно его как-то удалить посредством _form_alter? Я знаю как в семёрке делаются подобные вещи, но в восьмёрке что-то не получается. Там немного по другому?
Вот у меня есть такая конструкция в файле template.php темы Bartik:
<?phpfunction bartik_form_alter( &$form, &$form_state, $form_id )
{
if ($form_id == 'user_profile_form')
{
unset($form['account']['mail']['#description']);
unset($form['account']['pass']['#description']);
unset($form['locale']['language']['#description']);
unset($form['picture']['picture_upload']['#description']);
unset($form['timezone']['timezone']['#description']);
}
if ($form_id == 'user_login_block')
{
$form['links']['#markup'] = '';
$form['name']['#attributes']['placeholder'] = t( 'Username' );
$form['pass']['#attributes']['placeholder'] = t( 'Password' );
$form['name']['#title_display'] = 'invisible';
$form['pass']['#title_display'] = 'invisible';
$form['pass']['#field_prefix'] = '<div class="pass_wrapper">';
$form['pass']['#field_suffix'] = '<a href="#"></a></div>';
}
if ($form_id == 'user_register_form')
{
$form['account']['name']['#attributes']['placeholder'] = t( 'Pick a username' );
$form['account']['pass']['#attributes']['placeholder'] = t( 'Create a password' );
$form['account']['name']['#title_display'] = 'invisible';
$form['account']['pass']['#title_display'] = 'invisible';
$form['account']['name']['#description'] = '';
$form['account']['pass']['#description'] = '';
}
}
function bartik_form_privatemsg_new_alter(&$form, &$form_state) {
$form['subject']['#access'] = false;
}?>
Комментарии
hook_form_alter должен быть в кастомном модуле, а не в теме оформления
Не обязательно.
Гугл транслейт:
А раньше (около 3-х лет назад) мне именно здесь советовали это делать в теме оформления. Да и на Drupal.org тоже.
Так подскажите плиз как это сделать в восьмёрке?
Как и в семерке. Создать кастомный модуль и в .module прописать нужный код
А может есть готовый модуль для восьмёрки?
https://www.drupal.org/project/project_module
Там, оказывается, не всё так просто. Скрыть поле email при регистрации можно, но нужно еще и подменить функцию валидации, потому что она по-прежнему требует это поле, даже если его нет
<?php
function test_form_alter(&$form, \Drupal\Core\Form\FormStateInterface $form_state, $form_id) {
if ($form_id == 'user_register_form') {
unset($form['account']['mail']);
}
return
$form;}
?>
Контриба я сходу не нашел подходящего. И как по мне, самый лучший (но не самый легкий) способ решить эту задачу - это сделать свою форму регистрации с блэкджеком и эээ без поля email
А вообще зачем убирать email? А как получать уведомления с сайта? Восстанавливать пароль?
Да, я знаю, что не так всё просто. В этом то и дело.
Зачем убирать? В моём случае оно вредоносно при регистрации, такая специфика сайта. Восстанавливать пароль можно, но только если юзер ЗАХОЧЕТ указать свой email в профиле.
Нашел экспериментальный модуль https://www.drupal.org/project/optional_email
Попробуйте, вдруг это то, что нужно
Спасибо!
Работает, но не доведён до ума - после регистрации Drupal пытается послать письмо на не существующий адрес.
Надо эту функцию кастрировать.
Гляньте в настройки регистрации в админке. Там есть галочка уведомления о регистрации
Спасибо, но это не помогло почему-то.
ИТОГО:
1. Удаление поля E-mail в форме регистрации решается модулем:
Optional Email
https://www.drupal.org/project/optional_email
2. Устранение сообщения Unable to send email. Contact the site administrator if the problem persists. осуществляется модулем:
Mailcontrol
https://www.drupal.org/project/mailcontrol
Это втыкать в файл bartik.theme?
<?phpfunction test_form_alter(&$form, \Drupal\Core\Form\FormStateInterface $form_state, $form_id) {
if ($form_id == 'user_register_form') {
unset($form['account']['mail']);
}
return
$form;
}?>
В кастомный модуль. В моем случае он назывался test. Имя модуля как раз стоит в начале функции
А зачем теперь этот код, если вопрос решился контрибными модулями?
Для общего образования
Спасибо!