В Drupal 8 существует несколько способов вывести форму добавления ноды на странице или в блоке. Один из самых простых способов — использование модуля «Entityform». Рассмотрим подробнее этот вариант.

1. Установка модуля «Entityform»

Для начала необходимо установить и включить модуль «Entityform», если он еще не установлен. Можно сделать это через административный интерфейс Drupal 8 или используя Composer.


composer require drupal/entityform
drush en entityform

2. Создание формы добавления ноды

После установки модуля «Entityform» можно создать форму добавления ноды. Для этого необходимо перейти в раздел «Структура > Типы контента» и выбрать нужный тип контента, например, «Статья». Затем перейдите на вкладку «Формы», добавьте новую форму и настройте ее параметры.

3. Вывод формы на странице или в блоке

Вывод формы в шаблоне страницы

Чтобы вывести форму добавления ноды в шаблоне страницы, можно использовать следующий код:


$form = \Drupal::formBuilder()->getForm('Drupal\entityform\Form\EntityFormDisplayForm', 'machine_name');
print \Drupal::service('renderer')->render($form);

Здесь ‘machine_name’ в параметре функции getForm() замените на машинное имя созданной вами формы.

Вывод формы в блоке

Чтобы вывести форму добавления ноды в блоке, можно использовать следующий код:


$block = \Drupal\block\Entity\Block::load('machine_name');
$block_content = \Drupal::entityTypeManager()->getViewBuilder('block')->view($block);
print \Drupal::service('renderer')->render($block_content);

Здесь ‘machine_name’ замените на машинное имя созданного вами блока.

Дополнительные вопросы и ответы

Вопрос 1: Как добавить кастомные поля в форму добавления ноды?

Ответ: Чтобы добавить кастомные поля в форму добавления ноды, необходимо внести соответствующие изменения в настройках типа контента. Перейдите в раздел «Структура > Типы контента», выберите нужный тип контента, затем перейдите на вкладку «Конфигурация формы» и добавьте нужные поля.

Вопрос 2: Как добавить валидацию для формы добавления ноды?

Ответ: Для добавления валидации для формы добавления ноды необходимо создать кастомный модуль и использовать хук hook_form_alter(). В функции-обработчике хука вы можете добавить необходимые правила валидации, используя функцию \Drupal::formBuilder()->getForm() и анонимные функции.


function my_module_form_alter(&$form, \Drupal\Core\Form\FormStateInterface $form_state, $form_id) {
  if ($form_id == 'entity.node.add_form') {
    // Добавление простой валидации поля "Заголовок".
    $form['title']['#required'] = TRUE;
    $form['title']['#title'] = 'Введите заголовок';
    $form['title']['#description'] = 'Поле заголовка является обязательным.';
  
    // Добавление кастомной валидации.
    $form['#validate'][] = function(&$form, \Drupal\Core\Form\FormStateInterface $form_state) {
      $title = $form_state->getValue('title');
      if (strlen($title) < 5) {
        $form_state->setErrorByName('title', 'Заголовок должен содержать не менее 5 символов.');
      }
    };
  }
}

Вопрос 3: Как изменить внешний вид формы добавления ноды?

Ответ: Для изменения внешнего вида формы добавления ноды вам необходимо создать кастомный шаблон или использовать уже существующий. В шаблоне вы можете изменить разметку и добавить необходимые стили к элементам формы. Чтобы в Drupal 8 использовать кастомный шаблон для формы добавления ноды, установите модуль «Twig Tweak» и используйте функцию «drupal_form()» в нужном шаблоне.


{{ drupal_form('node_article_form') }}