Pregunta

¿Cómo puedo obtener hook_install () para ejecutar todas las actualizaciones que tengo para mi módulo? Tengo en él mymod.install archivo.

He tratado

function mymod_install() {
  mymod_update_6001();
}

pero no parece hacer nada. Si tengo una mymod_update_6002 () ¿Todavía llamar 6001 (), llame a 6002 () o llamar tanto en el orden de 6001 (), 6002 ().

pensé que iba a ser el sentido común para ejecutar todas las actualizaciones durante la instalación de un módulo por defecto.

¿Fue útil?

Solución

No debe recibir su gancho instalación de actualizaciones de estreno. Cuando se instala un módulo por primera vez no hay actualizaciones deben ser necesarias.

Las actualizaciones se utiliza cuando el módulo ya está instalado (la base de datos o variables se han creado). En ese caso, usted no desea volver a instalar el módulo, ya que limpiar todos los datos, en su lugar crear update_N ganchos. Drupal detectar qué cambios son necesarios y los que se va a ejecutar update.php. En Drupal 6 se auto seleccionar qué cambios hay que hacer, pero se puede cambiar, mientras que esto no es posible en Drupal 7.

Drupal detecta las actualizaciones que se necesitan guardando el número de la última ejecución de las actualizaciones. Esto puede haber cambios en la base de datos, lo que permitirá volver a ejecutar cambios en las actualizaciones de Drupal 7. Volver a ejecutar es por lo general una mala idea y lo más a menudo causa errores y en algunos casos pueden estropear sus datos.

Recuerde siempre una copia de seguridad la base de datos antes de ejecutar las actualizaciones.

Otros consejos

El propósito de los ganchos es diferente.

Si hay algunas tareas que debe hacerse tanto cuando está instalado el módulo, y cuando se actualiza el módulo, a continuación, el código debe estar presente tanto en los ganchos. No hay módulo que llama a todos los ganchos de actualizaciones durante la instalación, y que sería especialmente mal cuando las funciones de actualización actualiza el esquema de las tablas de bases de datos utilizadas en el módulo; hook_schema () siempre debe devolver el actualizan esquema, y ??actualizar el esquema también con las funciones de actualización sería un error.

El código que escribió no funciona porque llamando a una de las funciones de actualización no se ejecuta automáticamente todas las demás funciones de actualización.
Llamando a las funciones de actualización de la aplicación de hook_install()is mal, ya que un error llamar a una función de actualización de otro; si hay algún código que debe ejecutarse a partir de dos o más funciones de actualización, a continuación, que el código debe ser colocado en una función que se llama desde las funciones de actualización, y desde hook_install(), si es necesario.

El gancho instalar sólo se llama cuando el módulo está recién instalado, así que no hay necesidad de cualquier actualización. Las actualizaciones se ejecutan sólo cuando el módulo ya está instalado, por lo que se puede aplicar cambios adicionales.

Para forzar las funciones de actualización para ejecutarse en instalar, usted tiene que cambiar su versión de esquema, por ejemplo:

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

O ejecutarlo desde drush:. drush -y updb

Ver también: ¿Es posible forzar el gancho actualización de su módulo para ejecutar

?

hook_install no funcionaría con mymod.module en el archivo.

Hay que hook_install lugar y hook_uninstall en un archivo separado mymod.install

supongo que hook_update_N() también debe ser colocado en mymod.install


respuesta después de la pregunta actualización:

enlace , por confirmar su número de versión en el archivo de información.

Desde que estoy desarrollando privada y no por la contribución, mi campo 'VERSION' .info en el archivo de mi módulo está en blanco o sin cambios cuando actualizo un módulo. De hecho, estoy usando subversivo para Eclipse PDT y por lo tanto mis ficheros Info números de versión no se actualizan. Por lo tanto, mi hook_update_6001 no estaba siendo llamado por update.php.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a drupal.stackexchange
scroll top