Как программно отобразить контактную форму в теме в D8

8

Как сделать так, чтобы боковая контактная форма (обратная связь) индивидуально отображалась в пользовательском блоке или другой странице / контакте (например, на первой странице)?

Я пробовал этот код, но он не работает (являются ли контактные формы сущностями?):

// get default form
// get the entity object
$default_form = \Drupal::config('contact.settings')->get('default_form');
$entity = \Drupal::entityManager()->getStorage('contact_form')->load($default_form);

// get view builder
// render view
$view_builder = \Drupal::entityManager()->getViewBuilder('contact_form');
$full_output = $view_builder->view($entity);
alexej_d
источник
ИНФОРМАЦИЯ: 1) боковой контактной формой по умолчанию (обратная связь) является объект (не так, как форма входа). 2) entityManagerустарела в пользу entityTypeManager( API docs )
nilsun
Я хотел бы сослаться на новый основной вопрос D8, чтобы помочь со всеми подобными подвопросами здесь, вызванными открытым базовым вопросом, хорошо задокументированным здесь в деталях: drupal.stackexchange.com/questions/197149/…
nilsun

Ответы:

6

Контактная форма - это объект, но вы не можете его просмотреть.

Вместо этого вы хотите добавить форму contact_message с contact_form в виде пакета.

См. ContactController::contactSitePage()(РЕДАКТИРОВАТЬ: API документы ) в качестве примера:

$message = \Drupal::entityTypeManager()
  ->getStorage('contact_message')
  ->create(array(
    'contact_form' => $contact_form->id(),
  ));

// This works in a controller, use \Drupal::service('entity.form_builder') elsewhere.
$form = $this->entityFormBuilder()->getForm($message);
$form['#title'] = SafeMarkup::checkPlain($contact_form->label());

РЕДАКТИРОВАТЬ (спасибо @nilsun): Обратите внимание, что entityManager устарела в пользу entityTypeManager.

Berdir
источник
ИНФОРМАЦИЯ: entityManagerустарела в пользу entityTypeManager( API docs ) и некоторые ссылки здесь отсутствуют в ответе. В ответе говорится: см. ContactController::contactSitePage() Пример. Где это находится? Это страница документации на Drupal.org? Это функция в ядре? Как реализовать это в функции предварительной обработки, так как вопрос был о .theme? Ситуация изменилась в конце прошлого года, и в большинстве ответов отсутствует информация об окончательном ядре D8, касающаяся таких вопросов.
Нильсун
Я хотел бы сослаться на новый основной вопрос D8, чтобы помочь со всеми подобными подвопросами здесь, вызванными открытым базовым вопросом, хорошо задокументированным здесь в деталях: drupal.stackexchange.com/questions/197149/…
nilsun
String :: checkPlain теперь SafeMarkup :: checkPlain
pcambra
1
@pcambra Спасибо, обратите внимание, что каждый может обновлять ответы, вы можете просто исправить что-то подобное самостоятельно.
Бердир