Drupal 8 | Custom contact forms mit getForm() rendern?
Eingetragen von marco-s (21)
am 07.03.2016 - 15:26 Uhr in
am 07.03.2016 - 15:26 Uhr in
Hallo zusammen
Ich habe im Backend unter "Contact forms" ein eigenes Formular für Feedbacks erstellt (Machine name: form_feedback)
Das Formular möchte ich an einem bestimmten Ort platzieren und will das nun via eine Preprocess-Funktion rendern und dem Template übergeben.
Grundsätzlich sollte man das mit der getForm() Funktion tun können?! Leider funktioniert das nicht (bei eigenen programmierten Formularen hat es bis jetzt wunderbar funktioniert)
Wie stellt man das aber mit Formularen aus dem Backend an?
<?php
//Versuch 1
$form = \Drupal::formBuilder()->getForm('form_feedback');
//Versuch 2
$form_object = new \Drupal\contact\Entity\ContactForm(array('id'=>'form_feedback'));
$form = \Drupal::formBuilder()->getForm($form_object);
?>
Danke und Gruss
Marco
- Anmelden oder Registrieren um Kommentare zu schreiben
warum so kompliziert?
am 07.03.2016 - 17:23 Uhr
So sieht das Formular aus:
<form class="contact-message-siteinfo-form contact-message-form contact-form" data-drupal-selector="contact-message-siteinfo-form" action="/contact" method="post" id="contact-message-siteinfo-form" accept-charset="UTF-8" data-drupal-form-fields="edit-subject-0-value,edit-message-0-value,edit-copy,edit-submit,edit-preview">
<div id="edit-name" class="js-form-item form-item js-form-type-item form-type-item js-form-item-name form-item-name">
<label for="edit-name">Ihr Name</label>
admin
</div>
<div id="edit-mail" class="js-form-item form-item js-form-type-item form-type-item js-form-item-mail form-item-mail">
<label for="edit-mail">Ihre E-Mail-Adresse</label>
ronald@prohelpnet.de
</div>
<div class="field--type-string field--name-subject field--widget-string-textfield js-form-wrapper form-wrapper" data-drupal-selector="edit-subject-wrapper" id="edit-subject-wrapper"> <div class="js-form-item form-item js-form-type-textfield form-type-textfield js-form-item-subject-0-value form-item-subject-0-value">
<label for="edit-subject-0-value" class="js-form-required form-required">Betreff</label>
<input class="js-text-full text-full form-text required" data-drupal-selector="edit-subject-0-value" type="text" id="edit-subject-0-value" name="subject[0][value]" value="" size="60" maxlength="100" placeholder="" required="required" aria-required="true">
</div>
</div>
<div class="field--type-string-long field--name-message field--widget-string-textarea js-form-wrapper form-wrapper" data-drupal-selector="edit-message-wrapper" id="edit-message-wrapper"> <div class="js-form-item form-item js-form-type-textarea form-type-textarea js-form-item-message-0-value form-item-message-0-value">
<label for="edit-message-0-value" class="js-form-required form-required">Nachricht</label>
<div class="form-textarea-wrapper">
<textarea class="js-text-full text-full form-textarea required resize-vertical" data-drupal-selector="edit-message-0-value" id="edit-message-0-value" name="message[0][value]" rows="12" cols="60" placeholder="" required="required" aria-required="true"></textarea>
</div>
</div>
</div>
<input data-drupal-selector="edit-contact-message-[formname}-form-form-token" type="hidden" name="form_token" value="7We-e5eyXjdyK7rxIA9stHgsDDaKY28hFfhNA_TpaUA">
<input data-drupal-selector="edit-contact-message-[formname}-form" type="hidden" name="form_id" value="contact_message_{formname}_form">
<div class="js-form-item form-item js-form-type-checkbox form-type-checkbox js-form-item-copy form-item-copy">
<input data-drupal-selector="edit-copy" type="checkbox" id="edit-copy" name="copy" value="1" class="form-checkbox">
<label for="edit-copy" class="option">Kopie an dich selbst senden</label>
</div>
<div data-drupal-selector="edit-actions" class="form-actions js-form-wrapper form-wrapper" id="edit-actions"><input data-drupal-selector="edit-submit" type="submit" id="edit-submit" name="op" value="Nachricht senden" class="button button--primary js-form-submit form-submit">
<input data-drupal-selector="edit-preview" type="submit" id="edit-preview" name="op" value="Vorschau" class="button js-form-submit form-submit">
</div>
</form>
Damit müsste es sich doch hervorragend stylen lassen, ohne dass man Code erzeugt.
Alles nur mit CSS.
Grüße
Ronald
statische Lösung?!
am 08.03.2016 - 08:53 Uhr
Hallo Roland
Vielen Dank für deine Antwort. Stimmt, das könnte man natürlich so machen. Das ist dann aber eine ziemlich statische Lösung. Es sollte doch auch möglich sein, die Formulare aus dem Backend irgendwo auf der Seite platzieren zu können?!
was willst du denn tun?
am 08.03.2016 - 09:18 Uhr
und warum meinst du, kannst du es nicht?
Kurzer Hinweis: mein Name ist Ronald.
Du kannst doch immer stylen, wie es dir behagt.
Und wenn du einen anderen container hast, kannst du diesen stylen.
CSS heißt doch deshalb cascading, weil du es immer und überall überschreiben kannst, wenn du das dringende Bedürfnis dazu hast.
Such dir den Selektor, oder die Selektoren aus, die du stylen möchtest, und tobe dich aus.
Grüße
Ronald
...
am 09.03.2016 - 15:24 Uhr
Hallo Ronald (sorry, dass ich Roland geschrieben hatte)
und warum meinst du, kannst du es nicht?
Klar wäre deine Variante eine mögliche Lösung. Aber wenn ich von Drupal aus doch schon die Möglichkeit habe, mir im Backend ein Formular zusammenzuklicken, sollte ich doch das auch irgendwo auf der Seite platzieren können. Für andere Formulare schreibe ich das HTML ja auch nicht von Hand, sondern generiere es mir mit der Drupal-Konsole, damit ich ein schlankes Modul habe, welches mir den Output generiert. Ums Stylen mit CSS geht es mir hier nicht.
Meiner Meinung nach muss es von Drupal 8 aus doch eine Möglichkeit geben, wie man die erstellen Formulare ansprechen/rendern kann.
das geht doch
am 09.03.2016 - 21:12 Uhr
ich habe es zwar noch nicht selbst gemacht, man kann jedoch das Formular in einem Block ausgeben, oder wenn du es aufrufst, erscheint es im content-Block.
Du brauchst keinen HTML-Code zu schreiben, kannst dies jedoch tun.
Du musst auch die Felder nicht mit CSS gestalten, kannst es aber für jedes Feld tun.
Ich verstehe nicht, wo du hängst.
Wenn du das contact form ausgeben möchtest, klickst du einfach auf den Kontakt-Link, und wenn der nicht da ist, legst du einen Menüpunkt mit dem Link /contact an.
Grüße
Ronald