Domanda

Come posso ottenere hook_install () per eseguire tutti gli aggiornamenti che ho per il mio modulo? Ho in esso mymod.install di file.

Ho cercato

function mymod_install() {
  mymod_update_6001();
}

, ma non sembra di fare nulla. Se ho un mymod_update_6002 () dovrei ancora chiamare 6001 (), basta chiamare 6002 () o chiamare sia nell'ordine 6001 (), 6002 ().

Ho pensato che sarebbe stato il senso comune per eseguire tutti gli aggiornamenti durante l'installazione di un modulo di default.

È stato utile?

Soluzione

Non si dovrebbe ottenere la vostra installazione di gancio per gli aggiornamenti di esecuzione. Quando un modulo viene installato per la prima volta non gli aggiornamenti dovrebbero essere necessarie.

Gli aggiornamenti vengono utilizzati quando è già installato il modulo (sono stati creati il ??database o variabili). In tal caso, non si desidera reinstallare il modulo come si cancellerà tutti i dati, invece creare update_N ganci. Drupal rileverà che gli aggiornamenti sono necessari e di quelli sarà eseguito andando a update.php. In Drupal 6 sarà automaticamente selezionare quali aggiornamenti da fare, ma è possibile modificarlo, mentre questo non è possibile in Drupal 7.

rileva Drupal quali aggiornamenti sono necessari per salvare il numero dell'ultimo aggiornamento run. Questo può essere modifiche nel database, che permetterà di eseguire nuovamente gli aggiornamenti negli aggiornamenti Drupal 7. Riesecuzione di solito è una cattiva idea e la volontà più spesso causa di errori e in alcuni casi può rovinare il backup dei dati.

Ricordate sempre di effettuare un backup del database prima di eseguire gli aggiornamenti.

Altri suggerimenti

Lo scopo dei ganci è differente.

Se ci sono alcuni compiti che deve essere fatto sia quando è installato il modulo, e quando il modulo viene aggiornato, quindi il codice dovrebbe essere presente in entrambe i ganci. Non ci sono moduli che richiama tutti i ganci di aggiornamento durante l'installazione, e che sarebbe sbagliato soprattutto quando le funzioni di aggiornamento aggiornare lo schema delle tabelle di database utilizzati dal modulo; hook_schema () deve sempre riportare l'aggiornamento schema, e l'aggiornamento dello schema anche con le funzioni di aggiornamento sarebbe sbagliato.

Il codice che hai scritto non funziona a causa di chiamare una delle funzioni di aggiornamento non esegue automaticamente tutte le altre funzioni di aggiornamento.
Chiamando le funzioni di aggiornamento dalla realizzazione di hook_install()is sbagliato, come sbagliato chiamare una funzione di aggiornamento da un altro; se v'è un codice che deve essere eseguito da due o più funzioni di aggiornamento, quindi tale codice deve essere collocato in una funzione che viene chiamata dalle funzioni di aggiornamento, e da hook_install(), se necessario.

Il gancio installare solo è chiamata quando il modulo viene installato di fresco, quindi non c'è necessità di aggiornamenti. Gli aggiornamenti vengono eseguiti solo quando il modulo è già installato, in modo che possa applicare ulteriori modifiche.

Per forzare le funzioni di aggiornamento per l'esecuzione su di installare, devi cambiare la tua versione dello schema, per esempio:

function mymod_install() {
  // Reset the schema version, so our update hooks can be processed during the installation.
  drupal_set_installed_schema_version('mymod', '7000');
  // Then run the updates as usual.
  mymod_update_7001();
}

oppure eseguirlo dal Drush:. drush -y updb

Vedere anche: E 'possibile forzare il gancio di aggiornamento del modulo per eseguire

?

hook_install non avrebbe funzionato con in file di mymod.module.

Devi posto hook_install e hook_uninstall in un file separato mymod.install

Credo che hook_update_N() dovrebbe anche essere messi in mymod.install


Risposta dopo la domanda di aggiornamento:

link , Si prega di verificare il numero di versione nel file di informazioni.

Dal momento che sto sviluppando in privato e non per il contributo, il mio campo 'VERSIONE' in .info fascicolo di mio modulo è vuoto o invariato quando aggiorno un modulo. Sono in realtà usando Subversive per Eclipse PDT e quindi le mie informazioni sul file numeri di versione non vengono aggiornati. Così, la mia hook_update_6001 NON è stato chiamato da update.php.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a drupal.stackexchange
scroll top