2009-12-02 7 views
5

CCK per Drupal ha la comoda funzione di consentire a un singolo campo CCK di accettare più valori tramite un pulsante "aggiungi un altro elemento" che si traduce in una matrice di dati nel nodo.'aggiungi un altro elemento' in moduli Drupal non CCK

Mi chiedo se ci sia un modo semplice di adattare questo per un modulo non CCK che chiamerei da drupal_get_form. Preferirei non dover re-inventare la ruota con tecniche di forma multi-step.

Chiunque ha fatto questo?

risposta

6

Sarebbe bello se avessero incluso un esempio più ridotto, ma this Introduction to AHAH in Drupal, insieme a this post on adding dynamic form elements using AHAH dovrebbe coprire praticamente tutto ciò che serve (che, sfortunatamente, è un bel po ').

Il modo in cui CCK fa questo (principalmente in content_add_more_js() in content.node_form.inc) è un po 'più complicato, in quanto devono soddisfare la generalizzazione per diversi tipi di campo, oltre ad aggiungere alcuni elementi aggiuntivi per consentire una visualizzazione uniforme tablesort Trascinare la funzionalità di spostamento &. Quindi, se non è necessario il secondo, preferirei non lo uso come un esempio, come si arriva un po 'di confusione;)

2

Solo uno stub di una risposta, mi dispiace. Se nessun altro ti darà una risposta migliore e avrò tempo, domani elaborerò un po 'di più.

Credo che la funzionalità venga eseguita allegando un comportamento drupal (dalla libreria js standard di Drupal) al campo che si sta prendendo in considerazione. Se ho torto, allora è semplicemente una funzione jQuery "ad-hoc".

Tuttavia, questa è la parte facile! ;) Il difficile, è che la funzionalità viene raggiunta tramite AJAX e non semplicemente generando un campo modulo aggiuntivo lato client. Ciò è dovuto al fatto che l'API del modulo deve rigenerare completamente il modulo, altrimenti - all'atto dell'invio - campi aggiuntivi che, in origine, non inviati al browser verranno semplicemente ignorati (questo è inteso, al fine di prevenire l'iniezione).

HTH almeno un po '! Mi dispiace per essere così conciso.