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

Richtiger Einsatz von $form['#validate']?

Eingetragen von Lissy01 (278)
am 02.08.2012 - 17:09 Uhr in
  • Modul-Entwicklung
  • Drupal 7.x oder neuer

Ich habe ein Modul geschrieben mit einem hook_form_alter.

Der konkrete Fall betrifft einen Video-Upload in einem bestimmten Inhaltstyp.
Der Video wird gespeichert und sein Pfad ermittelt.

Mit $form['#validate'][] = 'my_video_validate'; wird eine Funktion aufgerufen, die die Länge des Videos (in Sec.) ermittelt.
Wenn eine bestimmte Länge überschritten wird, wird eine Fehlermeldung mit form_set_error erzeugt, daß die Dauer des Videos zu lang ist.

Soweit ist alles OK, es wird immer noch die Seite node/add/myvideotyp angezeigt, also nicht gespeichert.
Es wird nun der Name der Videodatei und das Entfernen-Button gezeigt.
Ich möchte aber gerne wieder das leere Video-Uploadfeld und den Upload-Button sehen, wie wenn ich das Entfernen-button gedrückt hätte.

D.h. ich müßte in der Validate-Funktion das Drücken des Entfenen-Buttons simulieren.

Wie kann ich das am Besten machen?

‹ Probleme mit Private Files und Anzeige von Bildern bei 6.x Berechtigung Node Erstellung für referenzierte Nodes ›
  • Anmelden oder Registrieren um Kommentare zu schreiben

Wenn Du eine eigene

Eingetragen von wla (9461)
am 02.08.2012 - 18:22 Uhr

Wenn Du eine eigene validate-Funktion hast bekommt die $form und &$form_state übergeben. $form_state['values'] hat die eingegebenen Werte. Da solltest Du den Wert für das entsprechende Feld löschen.

Beste Grüße
Werner

  • Anmelden oder Registrieren um Kommentare zu schreiben

Hi Werner, ja, sowas

Eingetragen von Lissy01 (278)
am 07.08.2012 - 15:48 Uhr

Hi Werner,
ja, sowas ähnliches habe ich schon versucht.

Diese Werte stecken in
$form_state['values'] ['field_teilnehmer_video']

  und (Array, 1 element)
        0 (Array, 6 elements)
            fid (String, 3 characters ) 117
            display (String, 1 characters ) 1
            description (String, 0 characters )
            upload_button (String, 6 characters ) Upload
            remove_button (String, 9 characters ) Entfernen
            upload (String, 0 characters )

Was ist da genau der Wert für das entsprechende Feld?
Ich habe schon das ganze Feld gelöscht per
<?php
unset($form_state['values'] ['field_teilnehmer_video'] );
?>

Es steht dann immer noch der Pfad auf dieses Video und der Entfernen-Button statt dem leeren Upload-Feld.

Habe ich die Validierung richtig eingebunden?
Ich habe beim hook_form_alter für das Formularfeld eine VAldidierungsfunktion definiert und die wird aufgerufen.

<?php
$form
['#validate'][] = 'my_teilnehmer_video_validate';   
?>

  • Anmelden oder Registrieren um Kommentare zu schreiben

Hast Du in der

Eingetragen von wla (9461)
am 07.08.2012 - 16:02 Uhr

Hast Du in der Validation-Routine den Parameter richtig angenommen? Der muß als &$form_state in der Funktionszeile stehen.
Ich würde $form_state['values'] ['field_teilnehmer_video'] = array(); benutzen, aber ich weiß jetzt nicht, was in der Form-Routine benutzt wird beim default_value des Feldes.

Beste Grüße
Werner

  • Anmelden oder Registrieren um Kommentare zu schreiben

Jupp, der Parameter ist so

Eingetragen von Lissy01 (278)
am 07.08.2012 - 17:27 Uhr

Jupp, der Parameter ist so aufgerufen als Referenz (&$form, &$form_state) .

Auch die Zeile

<?php
$form_state
['values']['field_teilnehmer_video']= array();
?>

interessiert den Programmablauf nicht im Geringsten.

Der Link auf den Video und das Entfernen-Button stehen immer noch da.

Es gibt für dieses Feld keinen Default-Value oder Value.
Der Wert ist fid, also die ID auf das File in der Datenbank.
Wobei die Datei ja noch nicht wirklich physikalisch hochgeladen wurde.

Irgendwas funktioniert da beim File-Upload komplett anders, als ich es von Text- oder select-Feldern her erwarten würde.

Auch spukt da ja noch die Ajax-Funktionalität mit rum, die dafür sorgt, daß bei Klick auf das Entfernen-Button dann wieder das leere Upload-Feld da steht.
Diesen Klick müßte ich simulieren, wie auch immer.

Ich habe schon versucht, einen drupal_goto zu machen, wo einfach die gleiche Seite node/add/teilnehmer-video wieder aufgerufen wird.
Dann wird aber die entsprechende Fehlermeldung nicht angezeigt und der User weiß nicht, warum das Speichern nicht geklappt hat, ist also auch nicht sinnvoll...

  • Anmelden oder Registrieren um Kommentare zu schreiben

Dann würde ich als nächstes

Eingetragen von wla (9461)
am 07.08.2012 - 18:34 Uhr

Dann würde ich als nächstes im Upload-Module nachsehen, ob es da so etwas wie eine reset-Funktion gibt. Irgenwie macht es das Widget mittels Ajax ja auch.

Beste Grüße
Werner

  • Anmelden oder Registrieren um Kommentare zu schreiben

Ja, eigentlich ist der Klick

Eingetragen von Lissy01 (278)
am 07.08.2012 - 18:48 Uhr

Ja, eigentlich ist der Klick auf das Entfernen-Button ja sowas wie ein Reset.
Das File wird zwischen Upload und Speichern temporär in das Verzeichnis /sites/default geschoben.

Wenn man nun diesen Reset in Form des Klicks auf Entfernen durchführt, dann wird das File dort wieder rausgelöscht.
Andernfalls -also wenn gar nicht in den Fehler gegangen wird- dann wird die Datei nach dem Speichern in das User-Verzeichnis geschoben, das ich so mit file_path und tokens gewünscht habe.

Dieses Entfernen-Button, das das ganz normale CCK-Filde-Modul (file) liefert, macht also perfekt, was es soll.

Ich weiß nur nicht, wie ich das im Fehlerfall auslösen kann, also den Klick simulieren.

Momentan habe ich die Fehlermeldung so formuliert, daß der User angehalten ist, selbst auf den Entfernen-Button zu klicken.
Aber das ist natürlich noch Bediener-Unfreundlich.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Die Datei einfach löschen via

Eingetragen von Tobias Bähr (4019)
am 07.08.2012 - 21:02 Uhr

Die Datei einfach löschen via file_delete().

  • Anmelden oder Registrieren um Kommentare zu schreiben

Hi Tobias, Danke, das ist

Eingetragen von Lissy01 (278)
am 08.08.2012 - 07:46 Uhr

Hi Tobias,
Danke, das ist eine gute Funktion, die ich zum Aufräumen nach weiteren Manipulationen noch brauchen werde.
In dem Fall passiert nun folgendes:
Die Datei ist tatsächlich verschwunden, wenn ich nach form_set_error auch noch file_delete mache.
Der Link auf das File steht aber immer noch da plus der Entfernen-Button statt dem Formularfeld zum Hochladen eines neuen Videos.
Wenn ich auf den Link klicke kommt dann natürlich eine Fehlermeldung File not Found.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Versuch es mal hiermit

Eingetragen von Tobias Bähr (4019)
am 08.08.2012 - 09:00 Uhr

Versuch es mal hiermit http://api.drupal.org/api/drupal/modules%21system%21system.api.php/funct...

  • 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 19 Stunden
  • Hey danke
    vor 3 Tagen 14 Stunden
  • Update: jetzt gibt's ein
    vor 4 Tagen 8 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 17 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