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

Benutzereingaben Manipulieren

Eingetragen von Joshua Brunner (3)
am 22.01.2009 - 18:31 Uhr in
  • Modul-Entwicklung
  • Drupal 5.x

Ciao,

Ich habe ein Node Modul, mit mehreren selbstdefinierten eingabefeldern. Nach dem Submit möchte ich nun die eingegebenen Daten zusammensetzen und parsen, bevor die hooks: validate, update oder insert ausgeführt werden.

Konkret habe ich ein JavaScript/DHTML Widget, um mehrere Daten einzutragen. Die Daten welche der Benutzer damit zusammenklickt, müssen nach dem Absenden per PHP Script für die validierung und die Datenbank insert's aufbereitet werden.

Aktuell habe ich das Problem gelöst, indem ich in den entsprechenden hooks die Daten jeweils neu parse. Dieser Lösungsansatz gefällt mir nicht, da die entsprechende Funktion unnötigerweise 3x aufgerufen wird.

Ein anderer Lösungsansatz, welcher mir auch nicht gefällt, wäre über den hook_nodeapi. Hier müsste ich den Code nur einmal ausführen, jedoch habe ich anschliessend die gesamte Funktionalität mehr oder weniger in der hook_nodeapi() Funktion.

Überschreibe ich $node im hook_nodeapi sind die Änderungen in den entsprechenden hooks wieder weg. Jedenfalls bei Drupal 5.

Beispiel:

<?php
function test_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) {
   
$node->foo = "test";
}

function
test_validate($node){
   
drupal_set_message("Foo ist: " . $node->foo);
}
?>

Kann mir jemand einen Tipp geben wie ich das schöner lösen kann?
Möglicherweise macht es sinn das Eingabefeld als CCK Modul umzusetzen. Somit habe ich den Vorteil der Wiederverwendbarkeit...

Lg
Joshua

‹ drupal_add_css page.tpl.php in einem Modul ›
  • Anmelden oder Registrieren um Kommentare zu schreiben

<?php  // Let modules

Eingetragen von dawehner (2639)
am 24.01.2009 - 12:49 Uhr

<?php
  // Let modules modify the node before it is saved to the database.
  node_invoke_nodeapi($node, 'presave');
?

Bin mir aber nicht sicher ob wirklich hook_presave aufgerufen wird, nein, versuche es halt mit hook_nodeapi

HALT.
jetzt ist mir dein Problem bewusst.
hook_validate, wird generell vor jeder Submit funktion aufgerufen, Grund sollte ja klar sein.

Deswegen kommt dann auch nichts an, in hook_validate, was ist denn generell das Ziel?
Ja cck Module sind natürlich noch besser
--------------
Blog www.freeblogger.org: Deutscher IRC-Channel: irc.freenode.net #drupal.de ... Jabber-me: dwehner@im.calug.deXING

  • Anmelden oder Registrieren um Kommentare zu schreiben

Ciao "dereine" Danke für

Eingetragen von Joshua Brunner (3)
am 24.01.2009 - 15:02 Uhr

Ciao "dereine"

Danke für Deine Antwort.

Also ich beschreibe mal etwas ausführlicher was ich beabsichtige:

Ich habe ein Node Modul veranstaltungen. (Ich weiss es gibt ein events modul. Das entspricht aber in vielerlei Hinsicht nicht meinen Anforderungen.)

Im hook_form binde ich HTML Code mit einem eigenen Eingabefeld ein:

<?php
$form
['date_markup'] = array(
 
'#type' => 'markup',
 
'#value' => "mein HTML Formular",
 
'#weight' => 10
);
?>

Dieser HTML Code beinhaltet eingabefelder zur Datumsauswahl (Start und Enddatum), und zwei felder für die Uhrzeit (Start Ende). Zusätzlich zwei Checkboxen für Mehrtägige veranstaltungen und Ganztägige veranstaltungen.

Ist die Checkbox Ganztägig ausgewählt, werden die eingabefelder für die Uhrzeit auf display:none gesetzt. Wird die Checkbox Mehrtägig deaktiviert, wird das eingabefeld mit dem Enddatum und Uhrzeit auf display:none gesetzt.

Liegen zwischen Start und Enddatum mehrere Tage, kann für diese einzeln die Start und End Uhrzeit entsprechend angepasst werden. Einzelne Tage dazwischen können auch per Checkbox ausgenommen werden.

Und so schaut es dann aus:
Screenshot Eingabefeld

Das eingabefeld wird also den eingaben entsprechend per Javascript erweitert. Die erste validierung geschieht auch bereits per Javascript.

Wird das Formular nun abgesendet, habe ich eine unbestimmte Anzahl Eingabefelder, welche ich nun mit PHP zu einem Array zusammenfüge. Der Array schaut dann in etwa so aus:

  // Eine mehrtägige veranstaltung mit der Checkbox Ganztägig ausgewählt
  array(
    array(
      'begin' => '2009-01-24 00:00',
      'end'   => '2009-02-15 23:59'
    )
  )
  // Eine mehrtägige veranstaltung (Einzelne Tage ausgeschlossen)
  array(
    array(
      'begin' => '2009-01-24 14:00',
      'end'   => '2009-01-24 18:00'
    )
    array(
      'begin' => '2009-01-25 14:30',
      'end'   => '2009-01-25 18:30'
    )
    array(
      'begin' => '2009-01-26 00:00',
      'end'   => '2009-01-26 23:59',
      'disabled' => true
    )
    array(
      'begin' => '2009-01-27 08:00',
      'end'   => '2009-01-27 14:00'
    )
  )

Diesen Array brauche ich nun:

  • im hook_validate um die Eingaben serverseitig zu validieren
  • im hook_form um beim Editieren oder bei einem Fehler das Formular mit den eingegebenen Daten zu füllen
  • im hook_insert und hook_update um die Daten in die Tabelle zu schreiben

Da es nun offenbar keinen hook gibt, welcher mir ermöglicht, nach jedem submit diesen Array zu erzeugen, muss ich diesen bei jedem hook neu erzeugen (Performance). Oder den Umweg über den hook_nodeapi machen.

Ich fürchte, das ich mit einem CCK Modul vor dem selben Problem stehen.

Ich hoffe, nun ist einigermassen klar, was ich beabsichtige.

Lg
Joshua

  • Anmelden oder Registrieren um Kommentare zu schreiben

und was ist wenn du das

Eingetragen von dawehner (2639)
am 24.01.2009 - 21:47 Uhr

und was ist wenn du das formular erstmal per formapi baust
und dann per #theme ausgibtst?

ich glaube reines html zu schreiben ist halt einfach nicht das ware in drupal
--------------
Blog www.freeblogger.org: Deutscher IRC-Channel: irc.freenode.net #drupal.de ... Jabber-me: dwehner@im.calug.deXING

  • Anmelden oder Registrieren um Kommentare zu schreiben

Ich weiss, ist nicht ganz

Eingetragen von Joshua Brunner (3)
am 26.01.2009 - 13:12 Uhr

Ich weiss, ist nicht ganz Drupal like. Ich möchte/kann aber nicht darüber Diskutieren. Die Darstellung und die Funktionalität entspricht den mir gestellten Anforderungen.

Es gibt ja noch andere Szenarien, wo das selbe Problem auftreten könnte:
Wenn ich beispielsweise zwei Textfelder habe: foo und bar. Das Textfeld "bar" darf jedoch nur von Bestimmten Personengruppen ausgefüllt werden (#access).

Hat die Person nun kein Zugriff auf das Feld: bar, soll das Feld mit der Eingabe aus foo gefüllt werden. Beim Editieren wird die ursprüngliche Eingabe verwendet (Könnte von einem Berechtigten Benutzer auf einen anderen Wert gesetzt worden sein).

Also ist die #default_value für das Feld bar je nach Berechtigung entweder $node->foo oder $node->bar. Der entsprechende Wert müsste in diesem Fall für die hooks form, validate, insert und update jedes mal neu gesetzt werden.

<?php if(!user_access('edit bar field') && !$node->bar) $node->bar = $node->foo; ?>

  • Anmelden oder Registrieren um Kommentare zu schreiben

Benutzeranmeldung

  • Registrieren
  • Neues Passwort anfordern

Aktive Forenthemen

  • Ресурс frankifiranki.space — є локальний інформаційний портал Івано-Франківська та Прикарпаття
  • Canvas Palette: Eine fertige Komponentenbibliothek für Drupal Canvas
  • Hilfe zu Updates oder Composer
  • Vergleich Drupal und Contao
  • [geloest] Blocks in Bootstrap nebeneinander darstellen und nicht untereinander
  • DrupalCamp Frankfurt 27-28 November 2026
  • Bitte mein Bentzerkonto löschen
  • Beim Aufruf einiger Inhalte erhalte ich folgende Fehlermeldung
  • Neuinstallation: vermutlich ein rewrite-Problem
  • Drupal CMS installieren
  • [erledigt]MP3 in Drupal 10 einbinden
  • (gelöst)Drupal 11 installieren
Weiter

Neue Kommentare

  • Danke ich werde mir die
    vor 12 Stunden 22 Minuten
  • anyone has a working Betaflight mirror right now?
    vor 2 Tagen 7 Stunden
  • Vielen Dank für Ihren
    vor 2 Tagen 12 Stunden
  • Composer ist sehr ratsam
    vor 4 Tagen 11 Stunden
  • Vielen Dank für den
    vor 6 Tagen 21 Stunden
  • Die alten CMS Vergleiche von contentmanager.de
    vor 1 Woche 9 Stunden
  • Gut gemacht
    vor 1 Woche 10 Stunden
  • Layout Builder etc. z.B. für Landing Pages
    vor 1 Woche 10 Stunden
  • Links
    vor 1 Woche 3 Tagen
  • Moin,wow, sehr gutes
    vor 1 Woche 4 Tagen

Statistik

Beiträge im Forum: 250316
Registrierte User: 20561

Neue User:

  • Firanelign
  • rofilm
  • Cruzorerm

» Alle User anzeigen

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