Buongiorno,
implementando il lavoro già illustrato qualche settimana fa', http://www.drupalitalia.org/node/8189, ho avuto necessità modificare campi cck in base ad un particolare evento (ingresso di una pratica con rif. ad una precedentemente entrata). Ho dovuto capire dove piazzare il codice (e qui mi è ancora venuto in aiuto il modulo rules), come utilizzare la funzione db_query per ricercare il nodo interessato (in particolare sulla tabella content_type_pratica) e come rendere disponibili i dati da modificare (funzione db_fetch_object con cui ad. es. imosto il valore del campo cck field_stato a "chiuso"). Mi è parso di capire che il modo più corretto per riscrivere i dati sul db fosse attraverso la funzione drupal_write_record.
Il giro funziona in parte: riesco a modificare i dati sul nodo individuato ( ho verificato sul db ed anche attraverso l'uso di views tutto mi quadra) ciononostante quando visualizzo il nodo o vado in modifica vedo ancora i vecchi dati (ad es. il campo field_stato che com phpmyadmin vedo avere il valore "chiuso" mi si carica nel text field ancora con "aperto".
C'è quanche giro ulteriore che devo fare dopo drupal_write_record per riflettere il cambiamento a livello di visualizzazione del nodo?
un saluto
Franco
avendo fatto qualche altra prova inizio a rispondermi da solo:
Ho visto che pulendo la cache il nodo viene visualizzato correttamente. Significa che devo pulirla automaticamente in qualche modo ogni volta dopo che ha girato l'azione che modifica i campi cck?
Franco
Non ho molto tempo per leggermi tutto il tuo post (intendo il link che hai allegato), ma per modificare un campo di cck, devi semplicemente riassegnargli il valore che tu vuoi, tramite del codice simile a questo:
$node->field_email_destinatari[0]['value'] = 'quello che vuoi tu';
e poi fai il save_node($node);
Ovviamente $node è l'oggetto nodo in questione
Ora, siccome i campi cck ne esistono di vario tipo, le assegnazioni sono fatte in modo diverso, a seconda della struttura del campo cck stesso..... in parole povere, per vedere i nomi dei campi (es: $node->field_email_destinatari[0]['value']) puoi fare una print_r dell'oggetto $node oppure ti installi il modulo Devel che ti aiuta in questo ed altro.
Dove modificare il codice? da quel che ho visto al volo dal tuo post sopra, quel che tu devi fare, lo puoi mettere nella funzione di hook nodeapi di un tuo modulo che ti sviluppi, oppure come template (tpl) sotto la directory del tuo tema
P.S.
CCK ha i suoi pro e contro..... la problematica con cui ti sei scontrato è un "contro" dell'uso di cck
Ciao
Gianni