Startseite
  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche
Startseite › Forum › Drupalcenter.de › Module ›

[gelöst] Webform als Block in Node - woher die NID in webform_options_form_alter ?

Eingetragen von tetri999 (153)
am 10.04.2015 - 09:36 Uhr in
  • Module
  • Drupal 7.x

Hallo,

wenn man eine Webform als Block in verschiedene Content-Nodes einbaut, wie kommt man an die Node-ID des Contents ran, wenn man mit
webform_options_form_alter(&$form, &$form_state, $form_id)
die Webform für die Nodes modifizieren will?
In den Parametern findet sich nur die Webform(-Block)-ID - und die ist ja immer dieselbe.
Das:

<?php
$nid
= substr(strrchr($_GET['q'], "/"), 1);
?>
geht nicht, weil es eine Multistep-Webform ist, deren Seiten per AJAX aktualisiert werden.
Beim ersten Aufruf der Form ist noch $_GET['q'] z.B. 'node/99',
ab dem nächsten Schritt aber => 'system/ajax'

Michael

‹ Relation und Relation Add - Endpoint 2 automatisch ausfüllen [gelöst] Webform als Block in Node - woher die NID in webform_options_form_alter ? ›
  • Anmelden oder Registrieren um Kommentare zu schreiben

arg()-Funktion nutzen

Eingetragen von C_Logemann (912)
am 10.04.2015 - 09:56 Uhr

Das funktioniert meistens mit arg(). Siehe z.B. diesen Kommentar von stBorchert: http://www.drupalcenter.de/node/22920#comment-81066

  • Anmelden oder Registrieren um Kommentare zu schreiben

Das geht eben leider nicht,

Eingetragen von tetri999 (153)
am 10.04.2015 - 10:34 Uhr

wie ich oben schon beschrieben hatte:
Es ist eine Multistep-Webform, deren Schritte per AJAX aktualisiert werden.
D.h. ab Schritt 2 steht in $_GET['q'] nicht mehr 'node/99' sondern 'system/ajax' - und das liefert auch arg(0) bzw. arg(1) !
Und da die webform_options_form_alter(&$form, &$form_state, $form_id) bei jedem Schritt aufgerufen wird, habe ich ab

<?php
if($form_state['webform']['page_num']==2) {
...
}
?>
keine NodeID mehr zur Verfügung.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Zwischenspeicher der Formular-Daten nutzen

Eingetragen von C_Logemann (912)
am 10.04.2015 - 11:14 Uhr

OK, dann würde ich mir mal die Formular-Daten anschauen (z.B. mit dvm($form) mit aus dem devel.module), ob die schon etwas sinnvolles transportieren. Wenn nicht, könnte man man die Node-ID dort einbringen (speichern). Dort würde ich anfangen, um hier eine Lösung zu entwickeln. Vllt. weiß jemand anderes ad hoc schon eine fertige Lösung dafür.

  • Anmelden oder Registrieren um Kommentare zu schreiben

daran hatte ich auch schon gedacht,

Eingetragen von tetri999 (153)
am 10.04.2015 - 12:32 Uhr

hat nur etwas länger gedauert, es einzubauen und zu testen.
UND ES GEHT !
Also eine hidden-field-Komponente 'content_nid' in die Webform einbauen, und dann kann ich in webform_options_form_alter(&$form, &$form_state, $form_id):

<?php
if(arg(0) == 'node') {
 
// in das Feld schreiben:
 
$content_NID = arg(1);
 
$form['submitted']['content_nid']['#default_value'] = $content_NID;
} else {
 
// sonst auslesen:
 
$content_NID = $form_state['storage']['submitted'][<ComponentID>];
}
?>
vielen Dank, Michael

  • Anmelden oder Registrieren um Kommentare zu schreiben

Nur nicht die is_numeric(arg(1)) Bedingung vergessen

Eingetragen von C_Logemann (912)
am 10.04.2015 - 12:59 Uhr

Insbesondere, wenn die Node-ID wieter verarbeitet werden soll z.B. mit node_load.

  • Anmelden oder Registrieren um Kommentare zu schreiben

genau das mache ich ja,

Eingetragen von tetri999 (153)
am 10.04.2015 - 13:28 Uhr

also node_load($content_NID), weil ich in den Webform-Steps die Inhalte brauche - und bis jetzt hat das noch keine Probleme gemacht, auch mit gesetztem URL-Alias nicht.
In welchen Fällen kann denn das wichtig sein, arg(1) was anderes als numeric sein?
Die Webform ist ja ohnehin nur in ContentType-Nodes eingebaut, und in webform_options_form_alter(&$form, &$form_state, $form_id) frage ich natürlich ab

if(isset($form['#node']) && $form['#node']->title == 'My MultiStep Form') {
...
}
sonst passiert da gar nichts.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Zur Sicherheit

Eingetragen von C_Logemann (912)
am 10.04.2015 - 13:39 Uhr

Neben einer möglichen Fehlerquelle (aber abhängig vom Einsatz des Scripts) ist insbesondere die URL eine Benutzer-Eingabe, über die man z.B. SQL-Injection-Angriffe starten könnte. Es ist einfach besser Daten zu überprüfen bevor man sie weiter verarbeitet.

Ergänzung: Mag sein, daß es in diesem Fall abwägig ist, daß Dein Code ausgeführt wird bei "Fehleingaben", aber manchmal übersieht man eben auch die Ausnahme. So entstehen wahrscheinlich die meisten Sicherheitslücken.

  • Anmelden oder Registrieren um Kommentare zu schreiben

OK, überzeugt

Eingetragen von tetri999 (153)
am 10.04.2015 - 14:03 Uhr

vielen Dank nochmal, Michael

  • Anmelden oder Registrieren um Kommentare zu schreiben

Benutzeranmeldung

  • Registrieren
  • Neues Passwort anfordern

Aktive Forenthemen

  • für drupal11 ein Slider Modul
  • [gelöst] W3CSS Paragraphs Views
  • Drupal 11 neu aufsetzen und Bereiche aus 10 importieren
  • Wie erlaubt man neuen Benutzern auf die Resetseite zugreifen zu dürfen.
  • [gelöst] Anzeigeformat Text mit Bild in einem Artikel, Drupal 11
  • Social Media Buttons um Insteragram erweitern
  • Nach Installation der neuesten D10-Version kein Zugriff auf Website
  • Composer nach Umzug
  • [gelöst] Taxonomie Begriffe zeigt nicht alle Nodes an
  • Drupal 11 + Experience Builder (Canvas) + Layout Builder
  • Welche KI verwendet ihr?
  • Update Manger läst sich nicht Installieren
Weiter

Neue Kommentare

  • melde mich mal wieder, da ich
    vor 2 Tagen 21 Stunden
  • Hey danke
    vor 3 Tagen 16 Stunden
  • Update: jetzt gibt's ein
    vor 4 Tagen 10 Stunden
  • Hallo, im Prinzip habe ich
    vor 1 Woche 1 Tag
  • Da scheint die Terminologie
    vor 1 Woche 1 Tag
  • Kannst doch auch alles direkt
    vor 1 Woche 6 Tagen
  • In der entsprechenden View
    vor 1 Woche 6 Tagen
  • Dazu müsstest Du vermutlich
    vor 1 Woche 6 Tagen
  • gelöst
    vor 4 Wochen 2 Tagen
  • Ja natürlich. Dass ist etwas,
    vor 4 Wochen 3 Tagen

Statistik

Beiträge im Forum: 250233
Registrierte User: 20449

Neue User:

  • Mroppoofpaync
  • 4aficiona2
  • AppBuilder

» Alle User anzeigen

User nach Punkten sortiert:
wla9461
stBorchert6003
quiptime4972
Tobias Bähr4019
bv3924
ronald3857
md3717
Thoor3678
Alexander Langer3416
Exterior2903
» User nach Punkten
Zur Zeit sind 0 User und 8 Gäste online.

Hauptmenü

  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche

Quicklinks I

  • Infos
  • Drupal Showcase
  • Installation
  • Update
  • Forum
  • Team
  • Verhaltensregeln

Quicklinks II

  • Drupal Jobs
  • FAQ
  • Drupal-Kochbuch
  • Best Practice - Drupal Sites - Guidelines
  • Drupal How To's

Quicklinks III

  • Tipps & Tricks
  • Drupal Theme System
  • Theme Handbuch
  • Leitfaden zur Entwicklung von Modulen

RSS & Twitter

  • Drupal Planet deutsch
  • RSS Feed News
  • RSS Feed Planet
  • Twitter Drupalcenter
Drupalcenter Team | Impressum & Datenschutz | Kontakt
Angetrieben von Drupal | Drupal is a registered trademark of Dries Buytaert.
Drupal Initiative - Drupal Association