Come rendere programmaticamente un modulo di contatto in un tema in D8


8

Come ottenere il modulo di contatto laterale (feedback) visualizzato individualmente in un blocco personalizzato o in un'altra pagina quindi / contatto (ad esempio frontpage)?

Ho provato questo codice, ma non funziona (sono entità dei moduli di contatto?):

// 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);

INFORMAZIONI: 1) il modulo di contatto predefinito (feedback) è un'entità (non il modulo di accesso). 2) entityManagerè deprecato a favore di entityTypeManager( documenti API )
nilsun,

Vorrei fare riferimento a una nuova domanda D8 principale per aiutare con tutte le sotto-domande come questa qui, causate dalla domanda di base aperta, ben documentata qui in dettaglio: drupal.stackexchange.com/questions/197149/…
nilsun

Risposte:


6

Il modulo di contatto è un'entità, ma non è possibile visualizzarlo.

Quello che vuoi invece è un modulo aggiuntivo di contact_message con contact_form come pacchetto.

Vedi ContactController::contactSitePage()(EDIT: documenti API ) come esempio:

$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());

EDIT (grazie a @nilsun): si noti che entityManager è obsoleto a favore di entityTypeManager.


INFO: entityManagerè deprecato a favore di entityTypeManager( documenti API ) e alcuni collegamenti mancano qui nella risposta. Nella risposta afferma: Vedi ContactController::contactSitePage() come esempio. Dov'è? È una pagina doc su Drupal.org? È una funzione nel core? Come implementarlo in una funzione di preelaborazione poiché la domanda riguardava .theme? Le cose sono cambiate alla fine dell'anno scorso e mancano informazioni sul core D8 finale riguardo a tali domande nella maggior parte delle risposte.
nilsun,

Vorrei fare riferimento a una nuova domanda D8 principale per aiutare con tutte le sotto-domande come questa qui, causate dalla domanda di base aperta, ben documentata qui in dettaglio: drupal.stackexchange.com/questions/197149/…
nilsun

String :: checkPlain è ora SafeMarkup :: checkPlain
pcambra il

1
@pcambra Grazie, nota che chiunque può aggiornare le risposte, puoi semplicemente risolvere qualcosa del genere da solo.
Berdir,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.