[RISOLTO]Modifica form:hook_form_alter

6 contenuti / 0 new
Ultimo contenuto
[RISOLTO]Modifica form:hook_form_alter

Salve a tutti,
ho un problemino sulla modifica di form su cui non mi ero mai scontrato.
Dunque ho creato un nuovo tipo di contenuto utilizzando la classica funzione "aggiungi tipo contenuto", inserendo due campi di testo e uno di data. Tutto Ok.
Il problema ora è questo.
Quando aggiungo un nodo usando il nuovo tipo di contenuto prima di visualizzare la form devo inizializzare i campi del form in base al contesto in cui mi trovo e all'utente loggato:admin, generico, anonimo.
Ho creato un modulo "miomodulo" e inserita la funzione miomodulo _form_alter(&$form, $form_state, $form_id) che viene correttamente chiamata. Il problema è che quando viene chiamata, nell'array $form non sono ancora presenti i campi che devo modificare. Mi chiedo allora quale funzione posso generare o chiamare per essere sicuro che al momento della chiamata tutti i campi della form siano disponibili nell'array $form?
Grazie

enzodrup wrote:
...Dunque ho creato un nuovo tipo di contenuto utilizzando la classica funzione "aggiungi tipo contenuto", inserendo due campi di testo e uno di data. Tutto Ok.

Drupal 6? Campi CCK? Penso di si.

enzodrup wrote:
Quando aggiungo un nodo usando il nuovo tipo di contenuto prima di visualizzare la form devo inizializzare i campi del form in base al contesto in cui mi trovo e all'utente loggato:admin, generico, anonimo.
Ho creato un modulo "miomodulo" e inserita la funzione miomodulo _form_alter(&$form, $form_state, $form_id) che viene correttamente chiamata.

Fin qui va benissimo...

enzodrup wrote:
Il problema è che quando viene chiamata, nell'array $form non sono ancora presenti i campi che devo modificare. Mi chiedo allora quale funzione posso generare o chiamare per essere sicuro che al momento della chiamata tutti i campi della form siano disponibili nell'array $form?
Grazie

Io non ho ancora capito bene come funziona il motore di Drupal - troppo codice, troppo poco tempo. Ma posso dirti che dai mie esperimenti, questi funzioni vengono chiamati più di una volta durante il ciclo di risposta.

Forse bisogna aspettare il momento 'giusto', usando Devel è il solito dsm():

<?php
if ($form['pezzo-che-mi-interessa']) {
 
dsm('Trovato:'. dprint_r($form['pezzo-che-mi-interessa']));
}
else {
 
dsm('Nada...');
}
 
?>

But I could be wrong ;-)

Altrimenti, il problema è più semplice. Se stai usando CCK bisogna vedere se ha un 'peso' inferiore del tuo modulo. Adesso non ricordo se l'ordine di chiamata ai hooks e per 'peso' del modulo (credo di si) o per nome del modulo - forse entrambi se hanno lo stesso peso. E ipoteticamente fattibile che Drupal sta chiamando il tuo modulo prima del hook di CCK, quindi non trovi mai 'sti campi. Cambi peso del modulo (numero positivo più grande) di CCK per esempio. CCK ha peso 0 (content), prova con 1 ;-)

John

Più imparo, più dubito.

Grazie John,
si il problema l'ho risolto proprio mettendo a 10000 il valore del campo weigth (peso) della tabella system sul record che descrive il mio modulo.
A questo punto la mia funzione miomodulo_form_alter() è chiamata per ultima e io mi posso sbizzarrire a modificare la $form.
Mi rimane il dubbio se ci sia un modo più elegante senza agire direttamente sulle tabelle di drupal. Forse esiste un modulo che consente di modificare i pesi dei moduli installati. Lo cerchèrò .....

________________________________________________________________________________________
Quando risolverai il problema, scrivi come hai fatto, e se puoi scrivi [RISOLTO]
Sarà utile ad altri. Grazie
enzoazzolini.it

Si, c'è. Sembra che il sistema più gettonato è di mettere codice che setta il peso nel hook_install del modulo:

<?php
 
function miomodulo_install() {
 
db_query("UPDATE {system} SET weight = 10 WHERE name='miomodulo' AND type='module'");
}
?>

John

Più imparo, più dubito.

Sì, il sistema è quello dell'hook_install. Ancora più elegante ed efficiente è leggere con una query il "peso" del modulo dopo cui vuoi caricare il tuo codice e aggiungere semplicemente 1, invece che inserire un numero arbitrario come 10.

Ciao a tutti, ho un problemino ulteriore da sottoporvi.
Io ho una vista con dei filtri esposti attraverso i quali l'utente specifica la ricerca.
La mia necessità è quella di preimpostare alcuni di questi filtri, però solo la prima volta che viene caricata la vista, in modo che l'utente possa modificarli.
Ho agito per la preimpostazione sul metodo hook_form_alter, ma quando imposto i filtri poi non risultano più modificabili.
Riuscite a darmi qualche dritta?
Grazie