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 - 17: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 - 11: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 - 14: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 - 20: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 - 12: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

  • Ветошь для протирки оборудования
  • 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?
Weiter

Neue Kommentare

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

Statistik

Beiträge im Forum: 250234
Registrierte User: 20455

Neue User:

  • JoMek
  • Znogsnernoimb
  • ByteScrapers

» 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 20 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