Moduli e tabelle DB

11 contenuti / 0 new
Ultimo contenuto
Moduli e tabelle DB

Ciao Ragazzi

Buon natale in anticipo!

Sto iniziando a smanettare un po' con D7... Anche se quello che vorrei sapere credo valga in generale anche per D6...

Quando installo un nuovo modulo contrib questo può o meno creare tabelle nel DB (credo di aver capito che lo fa attraverso la variabile $schema del file .install o qualcosa del genere...). Quello che mi chiedevo è se può anche alterare la struttura di altre tabelle (non intendo scrivere dati in altre tabelle, come system, che è logico... ma se può modificare/alterare la struttura della tabella stessa creando per esempio nuovi campi...)?

Perchè se così non fosse stavo pensando che quando disinstallo un modulo potrei andare a leggere nel file .install che tabelle ha creato ed eliminarle manualmente così da non avere tabelle vecchie nel DB...

E' un approccio sbagliato?
Vi va di spiegarmi come i moduli DB scrivono/modificano/popolano le tabelle?

Grazie per condividere le vostre conoscenze!

F.

Un modulo durante l'installazione può creare nuove tabelle o modificare quelle esistenti.

L'importante è che possa ripristinare quello che ha cambiato al momento della disinstallazione. Quello che cerchi esiste già e si trova a fianco dell'elenco dei moduli (in un tab della stessa pagina): ti permette di disinstallare i moduli non più usati, cioè di ripulire il db.

Angelo Turetta

Ciao Angelo,

grazie per la risposta ma non è esattamente qll che chiedevo. So che alcuni moduli (pochissimi) hanno la funzione per essere disinstallati da interfaccia grafica ma quello che mi chiedevo è se quando tale possibilità non c'è fosse possibile, dopo aver disabilitato il modulo, eliminare (drop) le tabelle ed eventuali modifiche che queste fa ad altre tabelle in base al file .install

Qualcuno ha capito cosa intendo o non mi sono riuscito a spiegare bene? E' un campo che sto sperimentando e quindi non conosco molto bene il linguaggio tecnico.

F

@fra_ore_90: in teoria ogni modulo che implementa l'hook_install() all'interno del file .install e che crei tabelle (definite nell'hook_schema()) dorebbe a sua volta avere implmentato l'hook_uninstall() che si occupa propri odi "ripulire il sistema dopo l'installazione.

Se questo non è fatto probabilmente è dovuto ad un errore del modulo, per cui si può far presente il problema all'autore.

Ciao
Marco
--
My blog
Working at @agavee

Mavimo a me sembra che quasi nessun modulo, anche quelli più famosi, abbiano l'hook_uninstall. Ho installato views, pathauto e altri e questi non dispongono dell'unistall..

Ma tornando alla prima domanda (mi sto divertendo questi giorni con questo libro a sviluppare un po') è possibile che un modulo modifichi la struttura di una tabella di un altro modulo?

Per esempio è possibile che un modulo qualsiasi (per esempio views) modifichi la struttura della tabella node aggiungendo per esempio un campo che serve a lui??

La cosa credo sia un po' pericolosa e pertanto poco reale... però io chiedo per informazione!

Grazie !!

Ciao fra_ore_90,
certo un modulo può alterare la struttura di una tabella sia sua che creata da un altro modulo, ovviamente però è una cosa che sarebbe meglio evitare!

p.s.: views e pathauto non hanno implementato l'hook_uninstall perché non creano nuove tabelle, quindi non c'è niente da elimare quando vengono disinstallati, e da interfaccia grafica puoi disinstallare solo i moduli che hanno l'hook_uninstall implementato

Lussoluca mi pare che views crei almeno 2 o tre tabelle...

Con quale funzione si altera lo schema di un'altra tabella? Mi potete fare un esempio?

Già, ha ragione, guardavo dentro hook_schema che nn crea nessuna, invece sono nei vari update (views_schema_6000).

Le funzioni per modificare le tabelle sono nel file includes/database/schema.inc, ad esempio addField (qui ci sono i metodi astratti, l'implementazione specifica stà all'interno della cartella relativa al database che usi, ad esempio includes/database/mysql/schema.inc, per mysql). Se quello che devi fare è aggiungere una colonna ad una tabella puoi usare la funzione db_add_field in database.inc, trovi un esempio di come si usa in system.api.php nella funzione hook_update_N

Grande Luca

Sto vedendo un po' qui e li sui forum in inglese queste funzioni...

Al volo ti viene in mente un esempio di modulo che altera una tabella..

No perchè questa cosa mi sembra un po' antipatica. Se io installo un modulo contrib magari non famosissimo come views o panel per fare delle prove e questo mi altera mettiamo 3 tabelle del core. Poi dopo un giorno lo vado a togliere perchè non è quello che mi serve mi restano 3 tabelle alterate senza senso... Giusto?

Pessimo no? (devo ammettere che non sono esperto di DB però per quel che ne so mi sembra una cosa poco funzionale...

Ho dato un occhio ad un mio sito e di moduli non core che fanno modifiche a tabelle core non ne ho trovati, comunque basta che fai una ricerca per "db_add_field" su tutto il sito e vedi chi e come lo usa. Per la tua domanda, ovviamente è responsabilità di chi scrive un modulo che modifica le tabelle riportare tutto allo stato iniziale quando viene disinstallato (e infatti esiste anche la funzione db_drop_field). Resta il fatto che modificare lo schema di tabelle non proprie è una pessima idea e tipicamente nessun modulo contrib con cui ho lavorato lo fa.

Ciao,
scusate l'intrusione, mi trovo in una sistuazione insolita, ho disinstallato il modulo flag per aggiornarlo alla nuova vers. visto che il sistema non rileva la nuova versione devo farlo a mano, tramite pannello "disinstalla" però il modulo risulta essere ancora presente, ho cancellato la cartella in sites/all/modules/flag ma nulla continuo a vedere la vecchia vers. del modulo flag.

Potreste dirmi come fare in questo caso?