it-swarm.com.de

Manuelles Erstellen von Zahlenfeldern (Ganzzahl und Dezimalzahl) im Code für benutzerdefinierte Formulare

Ich muss ein Zahlenfeld in Drupal 7 in einem benutzerdefinierten Formular manuell rendern. Ich habe die folgende Felddefinition erstellt:

$form['num_seats'] = array(
  '#type' => 'textfield',
      '#title' => t('Number of Seats'),
      '#required' => TRUE,
      '#number_type' => 'decimal',
      '#field_name' => 'num_seats',
      '#element_validate' => array ('number_field_widget_validate'),
      '#field_parents' => array(),
      '#language' => $language->language,
      '#field_prefix' => '$',
      '#size' => 14,
      '#maxlength' => 12,
      '#default_value' => $location ? $location['num_seats'] : $node->field_workshop_num_seats[$node->language][0]['value'],
);

Das Senden des Formulars führt jedoch zu einem Fehler des Formulars: "preg_replace () [function.preg-replace]: Kompilierung fehlgeschlagen: Bereich außerhalb der Reihenfolge in der Zeichenklasse bei Offset 14 in number_field_widget_validate () (Zeile 391"

Wenn ich für 'number_type' 'integer' anstelle von 'decimal' verwende, funktioniert das einwandfrei. Ich habe den Code des Nummernmoduls überprüft und konnte feststellen, dass dies daran liegt, dass Regex nicht korrekt aus der Felddefinition erstellt wurde.

Meine Frage ist also, wie ich Felder außerhalb des regulären Kontexts Drupal entity_type-Kontext (d. H. Außerhalb von Knoten-/Benutzer- usw. Formularen)) manuell in einem benutzerdefinierten Formular rendern kann, dessen Übermittlung in einer benutzerdefinierten Tabelle gespeichert wird.

6
r_honey

Nach einigem googeln und ein bisschen darüber nachdenken, wie ich Sachen in der Vergangenheit benutzt habe. Sie verwechseln ein FAPI-Element mit einem Feld-Widget. Sie sind nicht dasselbe, dies wurde bereits auf Drupal.StackExchange besprochen . Und wird dort vollständig beantwortet, warum sie unterschiedlich sind.

Ich denke, Ihre einfachste Lösung besteht darin, Ihre eigene #element_validate - Funktion zu erstellen und sich nicht auf die Validierungsfunktion zu verlassen, die direkt von number_field_widget_validate Bereitgestellt wird. Ich würde jedoch im Wesentlichen die Eingeweide kopieren und daraus Ihre eigene Validierungsfunktion erstellen . Der preg_replace schlägt fehl, weil Ihr FAPI-Element kein Widget ist und kein $field['settings'] Hat. Ich denke, das ist los.

3
tenken

Ich denke nach 3 Jahren hat sich etwas geändert. Da ich ein Dezimalfeld fehlerfrei wie folgt hinzufügen konnte:

'location_crossing_mileage' => array(
    '#type' => 'textfield',
    '#title' => t('Mileage'),
    '#size' => 5,
    '#maxlength' => 12,
    '#number_type' => 'decimal',
    '#field_name' => 'location_crossing_mileage',
    '#element_validate' => array ('number_field_widget_validate'),
  ),
0
Blanca Esqueda