Webform in Views rendern [gelöst]
am 30.09.2016 - 10:58 Uhr in
Hallo Community,
ich habe folgendes Problem und finde irgendwie nicht eine Lösung:
Ich möchte in einer View 2 Dinge ausgeben:
1. Die Inhalte einer Form (ist kein Problem für mich)
2. In jeder Zeile eines Datensatzes soll eine zweite Form, also ein Formular (keine Dateninhalte!), angezeigt werden. Diese Form ist je Zeile identisch und hat nichts mit der ersten Form zu tun.
Wie geht man hier am besten vor?
Ich habe schon diverses versucht:
1. Einfach eine 2. Form in die View anzeigen geht nicht, da diese nur ein einziges Mal angezeigt werden kann. Ich möchte sie aber je Zeile X mal haben, sooft ein Datensatz existiert.
2. In die erste Form habe ich die 2. Form als Entity-Referenze integriert. Jedoch kann ich in meiner View diese Form nicht anzeigen lassen - wieso, verstehe ich nicht.
Hat jemand einen Tipp?
- Anmelden oder Registrieren um Kommentare zu schreiben
Formular haben nicht mit Views zu tun
am 30.09.2016 - 12:09 Uhr
eine View ist eine Datenbankabfrage.
Du möchtest wohl verknüpfte Datensätze erfassen.
Dafür gibt es Entities, Entity_reference, Entity_UI und entity_inline_form
Schau dir die module mal an, ich denke, das ist es, was du suchst.
Grüße
Ronald
Danke, die Module habe ich
am 30.09.2016 - 13:11 Uhr
Danke, die Module habe ich schon alle installiert. Bei der praktischen Nutzung kommt bei mir jedoch nicht das raus, was ich will. Das ist das Problem.
Kennst du ein gutes Tutorial dazu?
In diesem Fall will ich eigentlich keine verknüpften Datensätze. Ich wollte Entities nur als Hilfmittel nutzen, da ich keine andere Möglichkeit sehe.
Mein Ziel:
Ich möchte in der View einen Datensatz zusammen mit einer einzigen Webform ausgeben, wobei die Webform immer zusammen mit einem Datensatz angezeigt wird. Es besteht also ei 1:n Verhältnis zwischen Webform und Datensätzen(n.)
Vllt ist es auch eine spezielle View-Einstellung, die ich noch nicht gefunden habe?!
Form im View Template rendern
am 30.09.2016 - 14:28 Uhr
Moinsen,
du müsstest deine Webform im Template der View, bzw. des Records rendern. Im Template:
<?php
$output = drupal_get_form('MEINE_WEBFORM_ID');
drupal_render($output);
?>
cool, dank dir! ich hab mir
am 30.09.2016 - 15:31 Uhr
cool, dank dir! ich hab mir fast gedacht, dass es nirgends über die Einstellungen geht!
Wo finde ich meine datei genau?
sites/all/modules/views/webform/...
ich bin jetzt doch nicht in
am 30.09.2016 - 16:07 Uhr
ich bin jetzt doch nicht in die PHP-datei3 gegangen, sondern habe das PHP Modul installiert https://www.drupal.org/project/views_php
In der View habe ich dann bei "Value code"
$output = drupal_get_form('check_box_firmenanschreiben');
eingetragen und bei "Output Code"
<?php
drupal_render($output);
?>
Laut dieser Seite http://www.webtotum.de/blog/drupals-views-modul-mit-php-erweitern muss man wohl mit den Delimiter aufpassen (je nach Feld).
Blöderweise geht es immernoch nicht :(
ich habe den Machine name: "check_box_firmenanschreiben" des Content Typs verwendet, da ich davon ausging, dass dies die WEBFORM_ID ist. Oder irre ich mich?
Wo findet man sonst die WebformID?
PhilippCar schrieb Oder irre
am 30.09.2016 - 18:25 Uhr
Oder irre ich mich?
ja, der maschinenname des Content types hat nix mit der form ID zu tun. Um an die Form ID zu kommen, gibt es verschiedene Wege. Ein sehr einfacher steht hier (Antwort 2) --> nicht vergessen, die minuszeichen durch Unterstriche zu ersetzen....
Mit dem Views php Quark- Dingens weiss ich auch nicht. Machs doch im Template: Anleitung
Dankee!!!! 1. habe ich
am 04.10.2016 - 14:22 Uhr
Dankee!!!!
1. habe ich hinbekommen und die ID aus der HTML geholt.
2. habe ich dank deiner Anleitung versucht. Verstehe ich es richtig, dass man sich einen Dateinamen aussuchen muss, der nicht fett ist? Den habe ich nämlich gewählt und im View Verzeichnis gespeichert. Komischerweise erscheint dieser dann nicht fett und der befehl daraus funktioniert auch nicht ... Hast du da noch einen Tipp?
Die von dir genannten Befehle
$output = drupal_get_form('webform_client_form_17');
drupal_render('$output');
habe ich in der Doku nachgelesen und sollten auch mit Drupal 7 funktionieren - tun sie aber nicht.
Muss ich da noch irgend ein Modul oder ähnliches installieren? Ich finde es sehr merkwürdig..... An der Stelle, wo der "Value code" eingetragen werden muss stehen noch "avaliable variables" - im Detail steht dort nur:
$view: The view object.
$handler: The handler object.
$static: A variable that can be used to store reusable data per row.
$row: Contains the retrieved record from the database (e.g. $data->nid).
$row->entityform_id: Entityform Submission: Entityform submission ID
$row->field_text: Field: Test Field
$row->label: Entityform Type: Label
$row->module: Entityform Type: Module
$row->submit_entityform_type: Entityform Type: Submit Link
$row->php: Global: PHP
$data: Contains the retrieved record from the database (e.g. $data->nid).
$value: Value of this field.
Aber dort steht nichts von deinen 2 Befehlen oder irgend einer API. Kann es daher sein, dass bei mir etwas fehlt?
DAAAAANKE schonmal für deinen hilfreichen Tipps!
1. Die views Template Datei
am 05.10.2016 - 13:18 Uhr
1. Die views Template Datei kommt nach: /sites/all/themes/DEINTHEME/templates
2. Danach Theme Registry neu aufbauen, bzw. alle caches leeren.
Jetzt sollte das Template verfügbar sein. Dann an geeigneter Stelle:
$output = drupal_get_form('webform_client_form_17');
Dann guckst du dir am besten mal mit dem Devel Modul an, was in $output drin ist ;) Wenn das Devel Module installiert ist, kannste auch einfach mal im Template ein dpm('hallo welt'); einbauen und gucken ob auch wirklich was rauskommt, wenn die View aufgerufen wird.
Wenn dein Form Array in $output enthalten ist, dann mit drupal_render() oder auch print() ausgeben....
Danke, es lag an dem falschen
am 05.10.2016 - 14:50 Uhr
Danke, es lag an dem falschen ordner!!!
der Tipps mit dem deveolpermodul ist auch prima! das kannte ich noch nicht.
Da ich Drupal 7 nutze, muss es drupal_render() heissen, da es ein Array ist. Komischerweise funktioniert der befehl drupal_render() nicht. Immerhin lässt sich über die PHP Datei der View aber etwas anzeigen :). Ich muss mal schauen, wieso drupal_render fehler verursacht ;)
PhilippCar
am 06.10.2016 - 07:08 Uhr
Komischerweise funktioniert der befehl drupal_render() nicht. Immerhin lässt sich über die PHP Datei der View aber etwas anzeigen :). Ich muss mal schauen, wieso drupal_render fehler verursacht ;)
Es kann sein, dass du in einer Template Datei print nutzten musst. Versuch mal:
<?php print drupal_render($output); ?>
Danke, das klappt leider auch
am 06.10.2016 - 10:33 Uhr
Danke, das klappt leider auch nicht.
Ich habe auch schon dpm('hallo welt'); in der View-Datei verwendet, um sicherzustellen, dass überhaupt etwas an der richtigen Stelle ausgegeben wird. Ich gebe es in einer zuvor definierten Spalte aus, wo ein anderer Wert ausgegeben wird
Muss ich denn in den View-Einstellungen etwas bestimmtes beachten? Unter "Fields" habe ich bisher nur die Felder eingegeben, die in den Spalten automatisch ausgegeben werden.
PhilippCar schrieb Muss ich
am 06.10.2016 - 14:01 Uhr
Muss ich denn in den View-Einstellungen etwas bestimmtes beachten? Unter "Fields" habe ich bisher nur die Felder eingegeben, die in den Spalten automatisch ausgegeben werden.
Nein, eigentlich nicht. Was du im Tpl. renderst, ist davon unabhängig. Führe mal bitte:
<?php
$output = drupal_get_form('webform_client_form_17');
dpm($output); ?>
aus und poste mal das Ergebnis.
Inhalt gibt er nicht aus,
am 06.10.2016 - 15:48 Uhr
Inhalt gibt er nicht aus, aber das (je zeile einmal).
Aus Sicherheitsgründen habe ich einiges mit *** ersetzt.
... (Array, 32 elements)
#attached (Array, 2 elements)
#node (NULL)
#submission (Boolean) FALSE
#is_draft (Boolean) FALSE
#filter (Boolean) TRUE
#theme (Array, 2 elements)
#attributes (Array, 1 element)
#submit (Array, 2 elements)
#validate (Array, 3 elements)
#process (Array, 1 element)
#form_id (String, 22 characters ) webform_client_form_17
#type (String, 4 characters ) form
#build_id (String, 48 characters ) form-W5B***
form_build_id (Array, 21 elements)
#token (String, 22 characters ) webform_client_form_17
form_token (Array, 21 elements)
form_id (Array, 21 elements)
#id (String, 25 characters ) webform-client-form-17--3
#method (String, 4 characters ) post
#action (String, 33 characters ) ***/?q=check-webform3
#theme_wrappers (Array, 1 element)
#icon (NULL)
#icon_position (String, 6 characters ) before
#pre_render (Array, 1 element)
#tree (Boolean) FALSE
#parents (Array, 0 elements)
#processed (Boolean) TRUE
#defaults_loaded (Boolean) TRUE
#required (Boolean) FALSE
#title_display (String, 6 characters ) before
#array_parents (Array, 0 elements)
#sorted (Boolean) TRUE
Wenn ich print drupal_render('') verwende, dann gibt es übrigens eine Fehlermeldung vom Browser: Ajax PHP Error occored - HTTP result Code 500
Webform Problem
am 07.10.2016 - 08:31 Uhr
hm, ok. Das Problem ist, dass Webform sich wieder mal nicht Drupal- standardmäßig verhält. Es lässt sich so nicht rendern. Ich hab mal getestet, die verkünpfte Node mit der Form im View Template zu rendern. Das funktioniert!
<?php
$node = node_load('17');
webform_node_view($node,'full');
$form_node = theme_webform_view($node->content);
print $form_node;
?>
Cache löschen wenn du was sehen willst.
Prima!!!! Jetzt geht es!!!
am 07.10.2016 - 11:46 Uhr
Prima!!!! Jetzt geht es!!! kaum zu glauben!!! :))
DAAAAAAAAAAAAAAANKESCHÖN!!!!
Jetzt bin ich gespannt, ob ich es schaffe an jedes FORM die NID bzw. andere Daten des Datensatzes jeweils an das FORM zu übergeben :)
Prima, setz den Thread doch
am 07.10.2016 - 13:02 Uhr
Prima, setz den Thread doch bitte auf [gelöst] (im Title des ersten Posts). Vllt kannst du bei der Gelegenheit den Titel in "Webform in Views rendern" ändern. WEnn da nochmal jemand nach sucht, wird's leichter gefunden. Danke!