Как я могу отобразить личную контактную форму в шаблоне ветки узла?
На моем сайте много продуктов, размещенных разными людьми. Как я могу показать личную контактную форму для каждого владельца в каждом node.html.twig? Я использую модуль Twig Tweak для визуализации формы. Предположим, у меня есть переменная "автор" (Drupal\user\Entity
) для использования.
Я пытаюсь в hook_preprocess_node:
function MY_thEME_preprocess_node(&$variables) {
$message = Drupal::entityTypeManager()->getStorage('contact_message')->create([
'contact_form' => 'personal',
'recipient' => $user->id(),
]);
$form = \Drupal\Core\Entity\EntityFormBuilder::getForm($message);
$form['#title'] = $this->t('Contact @username', ['@username' => $user->getDisplayName()]);
$form['#cache']['contexts'][] = 'user.permissions';
$variables['personal_form'] = drupal_render($form);
}
1 ответ
Вы должны использовать Renderer
сервис вместо который устарел, напримерdrupal_render()
/**
* Prepares variables for node templates.
*
* @see template_preprocess_node()
*/
function mymodule_preprocess_node(&$variables) {
$message = Drupal::entityTypeManager()->getStorage('contact_message')->create([
'contact_form' => 'personal',
'recipient' => $user->id(),
]);
$form = \Drupal\Core\Entity\EntityFormBuilder::getForm($message);
$form['#title'] = $this->t('Contact @username', ['@username' => $user->getDisplayName()]);
$form['#cache']['contexts'][] = 'user.permissions';
$variables['personal_form'] = \Drupal::service('renderer')->renderRoot($form);
}