it-swarm.it

Il modo migliore per eliminare un campo da un tipo di contenuto

Qual è il modo migliore per rimuovere un Drupal 7 da un tipo di contenuto definito tramite la GUI? Voglio usare hook_update_N in modo che le modifiche possano essere propagate a più server quando si esegue update.php. Tuttavia Non riesco a trovare una soluzione. Db_drop_table () avrebbe senso per me per schemi definiti personalizzati, ma non per un tipo/campo di contenuto definito attraverso la GUI.

20
amateur barista

Esistono due funzioni API per eliminare i campi:

Se non si desidera riutilizzare il campo, potrebbe essere un po 'più pulito eliminare l'intero campo invece di eliminare solo l'istanza di esso sul tipo di contenuto in questione. Solo tu puoi essere il giudice di quello.

18
googletorp

Sì, field_delete_instance () è la funzione per eliminare le istanze del campo.

Nota che field_delete_instance() chiama automaticamente field_delete_field() se non ci sono istanze rimanenti, quindi field_delete_instance() è molto probabilmente tutto ciò di cui avrai mai bisogno.

_update_7000_field_delete_instance() è progettato per le funzioni di aggiornamento principali. Esempio: nella funzione di aggiornamento x_update_7000(), si sta utilizzando field_delete_instance(). Quindi in x_update_7001(), si modifica la tabella {field_config} In modo incoerente e field_delete_instance() ovviamente deve essere modificato.

Ma ora la chiamata di x_update_7000() a field_delete_instance() comporterebbe un errore perché la tabella è ancora nella vecchia struttura. Tuttavia, la situazione per i moduli contribuiti è diversa, poiché dovrebbero sempre essere eseguiti dopo tutti gli aggiornamenti di base e quindi devono funzionare con la versione di base più recente.

Ma questo è uno schema che potresti voler usare per le tue funzioni API che stai usando nelle funzioni di aggiornamento.

Inoltre, queste funzioni _update non eseguono hook perché il risultato non è prevedibile (ad esempio perché il modulo per il quale viene eseguito l'aggiornamento potrebbe essere disabilitato).

9
Berdir