Question

Comment puis-je obtenir hook_install () pour exécuter toutes les mises à jour que j'ai pour mon module? J'ai dans ce fichier mymod.install.

J'ai essayé

function mymod_install() {
  mymod_update_6001();
}

mais il ne semble pas faire quoi que ce soit. Si j'ai un mymod_update_6002 () que j'appeler encore 6001 (), appelez 6002 () ou appeler à la fois dans l'ordre 6001 (), 6002 ().

Je pensais que ce serait le bon sens pour exécuter toutes les mises à jour lors de l'installation d'un module par défaut.

Était-ce utile?

La solution

Vous ne devriez pas obtenir votre point d'installation des mises à jour d'exécution. Lorsqu'un module est installé pour la première fois aucune mise à jour ne devrait être nécessaire.

Mises à jour sont utilisés lorsque le module est déjà installé (la base de données ou variables ont été créées). Dans ce cas, vous ne voulez pas réinstaller le module car il effacera toutes les données, au lieu de créer vous update_N crochets. Drupal détecte les mises à jour nécessaires et celles-ci seront courir va update.php. Dans Drupal 6, il sera automatiquement sélectionner les mises à jour à faire, mais vous pouvez le changer, alors que cela est impossible dans Drupal 7.

Drupal Détecte les mises à jour sont nécessaires en mémorisant le numéro de la dernière mise à jour de l'exécution. Cela peut être des changements dans la base de données, ce qui permettra de relancer les mises à jour dans les mises à jour Drupal 7. réexécution est généralement une mauvaise idée et sera le plus souvent la cause des erreurs et peut, dans certains cas gâcher vos données.

Rappelez-vous toujours de sauvegarder votre base de données avant les mises à jour en cours d'exécution.

Autres conseils

Le but de ces crochets est différent.

  • hook_install () est appelé lorsqu'un module est installé; cela signifie que le module n'a pas été installé, et par conséquent, il n'a pas besoin d'être mis à jour.
  • hook_update_N () est appelé lorsqu'un module est déjà installé, et il doit être mis à jour.

S'il y a des tâches qui doit être fait à la fois lorsque le module est installé, et lorsque le module est mis à jour, le code doit être présent dans les deux crochets. Il n'y a aucun module qui appelle tous les crochets de mise à jour lors de l'installation, et qui serait particulièrement mal lorsque les fonctions de mise à jour de mettre à jour le schéma des tables de base de données utilisées à partir du module; hook_schema () doit toujours retourner le jour schéma et la mise à jour du schéma aussi avec les fonctions de mise à jour serait erroné.

Le code que vous avez écrit ne fonctionne pas parce que l'appel une des fonctions de mise à jour ne s'exécute pas automatiquement toutes les autres fonctions de mise à jour.
Appeler les fonctions de mise à jour de la mise en œuvre de mal de hook_install()is, comme il erroné d'appeler une fonction de mise à jour d'un autre; s'il y a un code qui doit être exécuté à partir de deux ou plusieurs fonctions de mise à jour, alors que le code doit être placé dans une fonction qui est appelée à partir des fonctions de mise à jour et de hook_install(), le cas échéant.

Le point d'installation est appelé uniquement lorsque le module est fraîchement installé, donc il n'y a pas besoin de mises à jour. Les mises à jour sont exécutées uniquement lorsque le module est déjà installé, il peut appliquer des modifications supplémentaires.

Pour forcer les fonctions de mise à jour à exécuter sur l'installation, vous avez à changer votre version de schéma, par exemple:

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();
}

Ou de l'exécuter drush:. drush -y updb

Voir aussi: Est-il possible de forcer le crochet de mise à jour de votre module pour exécuter

?

hook_install ne fonctionnerait pas avec dans le fichier mymod.module.

Vous devez placer hook_install et hook_uninstall dans un fichier séparé de mymod.install

Je suppose que hook_update_N() devrait également être placé dans mymod.install


Réponse après la question mise à jour:

Je cite un lien , S'il vous plaît vérifier votre numéro de version dans le fichier info.

  

Depuis que je suis en développement privé et non pour sa contribution, mon champ « VERSION » dans le fichier de mon module .info est vide ou inchangé lorsque je mets à jour un module. Je suis en fait en utilisant Subversive pour Eclipse PDT et donc mes fichiers d'information numéros de version ne sont jamais mis à jour. Ainsi, mon hook_update_6001 n'a PAS été appelé par update.php.

Licencié sous: CC-BY-SA avec attribution
Non affilié à drupal.stackexchange
scroll top