Ich versuche, ein Feld-Widget zu erstellen, das dem normalen Referenz-Widget mit einem wesentlichen Unterschied ähnelt. Der Benutzer muss in der Lage sein, mehrere neue Taxonomiebegriffe gleichzeitig hinzuzufügen. Dies kann dies besser demonstrieren:
Ich habe einen Punkt erreicht, an dem die Funktionalität der Taxonomie / Optionen / Listenmodule ähnelt (dh die Kontrollkästchen / Radios werden angezeigt, gespeichert usw.).
Hier ist ein wichtiger Teil des Codes, den ich verwende hook_field_widget_form()
:
$element += array(
'#type' => $multiple ? 'checkboxes' : 'radios',
'#default_value' => $multiple ? $default_value : reset($default_value),
'#options' => $options,
'#value_key' => $value_key,
'#element_validate' => array('options_field_widget_validate'),
'#properties' => $properties,
);
Was mich hierher bringt, ist, dass $ element nicht Ihr übliches Formulararray ist, daher bin ich mir nicht sicher, wie ich das Textfeld und die Schaltfläche hinzufügen soll - zumal ihre Werte nicht zum Speichern gedacht sind. Wie kann ich diese Felder am besten zu meinem Widget hinzufügen?
Wenn ich das benötigte Javascript hinzufüge, denke ich zu Recht, ich sollte #ajax verwenden, das eine Funktion aufruft, die die #Optionen für die Kontrollkästchen neu erstellt?
Danke im Voraus!
BEARBEITEN - Meine anfängliche Frage war ziemlich vage. Hier sind einige Details zu dem, was ich versucht habe:
$element += array(
'#type' => 'fieldset',
'#delta' => $delta,
);
$element['value'] = array(
'#type' => $multiple ? 'checkboxes' : 'radios',
'#default_value' => $multiple ? $default_value : reset($default_value),
'#options' => $options,
'#value_key' => $value_key,
'#element_validate' => array('options_field_widget_validate'),
'#properties' => $properties,
);
$element['text'] = array(
'#type' => 'textfield',
'#title' => t('Add another'),
'#weight' => 5,
);
Dies ist eine Zusammenführung verschiedener Beispiele, die ich gesehen habe, und scheint mich näher zu bringen. Das Problem ist, wenn ich das Entitätsformular abschicke, erhalte ich den folgenden Fehler:
Hinweis: Undefinierter Index: tid in taxonomy_field_is_empty () (Zeile 1402 von modules \ taxonomy \ taxonomy.module).
Ich habe mir diese Funktion genauer angesehen und sie erwartet $item
die Struktur $item = array('tid', 2)
. Bei Verwendung des obigen Codes scheint ein Delta von irgendwoher zu kommen und die Struktur von $item
endet $item = array(0, array('tid', 2)
. Ich kann nicht herausfinden, woher '0' kommt?
Noch eine Bearbeitung
Ich konnte den obigen Fehler mit dem folgenden Code beheben, indem ich $ element wie folgt änderte:
$element += array(
'#type' => 'fieldset',
'#process' => array('taxonomy_free_entry_ignore_parent'),
);
und Hinzufügen der Funktion:
function taxonomy_free_entry_ignore_parent(&$form, &$form_state, $complete) {
array_pop($form['#parents']);
return $form;
}
Wenn ich die Entität speichere, erhalte ich eine Nachricht, dass sie gespeichert wurde. Wenn ich die Tabelle auf das Feld überprüfe, wird es nicht gespeichert. Was mache ich falsch?
quelle
Die hierarchische Modulauswahl kommt zumindest dem sehr nahe, was Sie erreichen möchten. Das Widget sieht etwas anders aus, erledigt aber im Grunde den gleichen Job und wäre ein guter Ausgangspunkt für die Anpassung. Schauen Sie sich die Taxonomie-Demo an. Orte, die ich besucht habe .
Eine weitere Option könnte das Autocomplete Deluxe- Modul sein.
quelle
Ich habe gerade Taxonomy Other- Modul gefunden, das Ihren Anforderungen entspricht.
Überprüfen Sie für den Drupal 7-Port: Port Taxonomy Other to D7 ( direkter Link ).
quelle