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 - 10: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 (856)
am 10.04.2015 - 10:56 Uhr

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

# DrupalCenter-Moderator # Mitglied im Drupal e.V. # https://www.drupal.org/u/c-logemann
# CTO der Nodegard GmbH: CMS Security & Availability Operations / Wir unterstützen IT-Abteilungen, Agenturen, Freiberufler:innen

  • Anmelden oder Registrieren um Kommentare zu schreiben

Das geht eben leider nicht,

Eingetragen von tetri999 (153)
am 10.04.2015 - 11: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 (856)
am 10.04.2015 - 12: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.

# DrupalCenter-Moderator # Mitglied im Drupal e.V. # https://www.drupal.org/u/c-logemann
# CTO der Nodegard GmbH: CMS Security & Availability Operations / Wir unterstützen IT-Abteilungen, Agenturen, Freiberufler:innen

  • Anmelden oder Registrieren um Kommentare zu schreiben

daran hatte ich auch schon gedacht,

Eingetragen von tetri999 (153)
am 10.04.2015 - 13: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 (856)
am 10.04.2015 - 13:59 Uhr

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

# DrupalCenter-Moderator # Mitglied im Drupal e.V. # https://www.drupal.org/u/c-logemann
# CTO der Nodegard GmbH: CMS Security & Availability Operations / Wir unterstützen IT-Abteilungen, Agenturen, Freiberufler:innen

  • Anmelden oder Registrieren um Kommentare zu schreiben

genau das mache ich ja,

Eingetragen von tetri999 (153)
am 10.04.2015 - 14: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 (856)
am 10.04.2015 - 14: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.

# DrupalCenter-Moderator # Mitglied im Drupal e.V. # https://www.drupal.org/u/c-logemann
# CTO der Nodegard GmbH: CMS Security & Availability Operations / Wir unterstützen IT-Abteilungen, Agenturen, Freiberufler:innen

  • Anmelden oder Registrieren um Kommentare zu schreiben

OK, überzeugt

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

vielen Dank nochmal, Michael

  • Anmelden oder Registrieren um Kommentare zu schreiben

Benutzeranmeldung

  • Registrieren
  • Neues Passwort anfordern

Aktive Forenthemen

  • [Gelöst] cron und Seitenereignisse nicht sichtbar in: /admin/reports/dblog (uuuups)
  • RSS-Feed von Dritten in Block auf der Frontpage zeigen
  • Drupal10 erkennt php nicht korrekt
  • Block ausgabe Body Splitten
  • Drupal 10 und Content Security Policy (CSP)
  • footnotes bei D10 und CKE5
  • Export/Import der Einstellungen von Ansichten
  • Views und Entitäten
  • Update ctools:^3.14' +++ cannot be empty. in Drupal\Core\Database\Query\
  • Datentransfer zwischen zwei Servern nach Drupal-Update auf 8.9.1 [gelöst]
  • Nach Drupal-Update: Entity-Reference wird nicht mehr richtig gespeichert
  • D6 Views Data Export Multi Images -> D7
Weiter

Neue Kommentare

  • Feed ..
    vor 4 Tagen 10 Stunden
  • Composer ohne php-check
    vor 4 Tagen 10 Stunden
  • Feeds Import
    vor 5 Tagen 1 Stunde
  • Aggregator läuft nun doch mit php 8.2 / Drupal 10
    vor 6 Tagen 11 Stunden
  • Aggregator
    vor 1 Woche 14 Stunden
  • BTW, den "guten alten
    vor 1 Woche 14 Stunden
  • php -v
    vor 1 Woche 15 Stunden
  • Views exportieren ..
    vor 1 Woche 15 Stunden
  • contextual filter
    vor 1 Woche 1 Tag
  • Vielleicht wird noch views_xml_backend benötigt
    vor 1 Woche 2 Tagen

Statistik

Beiträge im Forum: 248715
Registrierte User: 19808

Neue User:

  • xJuliusCaesar
  • Ivantrulk
  • eloft

» Alle User anzeigen

User nach Punkten sortiert:
wla9318
stBorchert6003
quiptime4972
Tobias Bähr4019
bv3924
ronald3845
md3717
Thoor3678
Alexander Langer3416
Exterior2903
» User nach Punkten
Zur Zeit sind 0 User und 3 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