Убрать E-mail поле на форме регистрации

Аватар пользователя Веня Веня 28 января в 18:22

В 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;
}
?>

Лучший ответ

Комментарии

Аватар пользователя adano adano 28 января в 19:28

Не обязательно.

Гугл транслейт:

Порядок вызовов следующий: все существующие функции изменения формы вызываются для модуля A, затем все для модуля B и т. Д., Затем все для любой базовой темы и, наконец, для самой темы. Порядок модуля определяется весом системы, затем именем модуля.

Аватар пользователя Веня Веня 28 января в 21:34
ivnish wrote:

hook_form_alter должен быть в кастомном модуле, а не в теме оформления

А раньше (около 3-х лет назад) мне именно здесь советовали это делать в теме оформления. Да и на Drupal.org тоже.

Так подскажите плиз как это сделать в восьмёрке?

Аватар пользователя ivnish ivnish 28 января в 21:39
1

Как и в семерке. Создать кастомный модуль и в .module прописать нужный код

Аватар пользователя ivnish ivnish 28 января в 22:58

Там, оказывается, не всё так просто. Скрыть поле 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

Аватар пользователя ivnish ivnish 28 января в 23:05

А вообще зачем убирать email? А как получать уведомления с сайта? Восстанавливать пароль?

Аватар пользователя Веня Веня 29 января в 0:13

Да, я знаю, что не так всё просто. В этом то и дело.

Зачем убирать? В моём случае оно вредоносно при регистрации, такая специфика сайта. Восстанавливать пароль можно, но только если юзер ЗАХОЧЕТ указать свой email в профиле.

Аватар пользователя Веня Веня 29 января в 0:42

Спасибо!
Работает, но не доведён до ума - после регистрации Drupal пытается послать письмо на не существующий адрес.
Надо эту функцию кастрировать.

Аватар пользователя ivnish ivnish 29 января в 1:19
1

Гляньте в настройки регистрации в админке. Там есть галочка уведомления о регистрации

Аватар пользователя Веня Веня 29 января в 14:41

ИТОГО:

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

Аватар пользователя Веня Веня 29 января в 18:05

Это втыкать в файл 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;
}
?>
Аватар пользователя ivnish ivnish 30 января в 0:29
1

В кастомный модуль. В моем случае он назывался test. Имя модуля как раз стоит в начале функции

А зачем теперь этот код, если вопрос решился контрибными модулями?