Как получить hook_install () для запуска All Hook_update_n ()?

drupal.stackexchange https://drupal.stackexchange.com/questions/5194

  •  16-10-2019
  •  | 
  •  

Вопрос

Как я могу получить Hook_install () для запуска всех обновлений, которые у меня есть для моего модуля? У меня есть в этом файл mymod.install.

я пытался

function mymod_install() {
  mymod_update_6001();
}

Но, похоже, это ничего не делает. Если у меня есть mymod_update_6002 (), я бы все еще позвонил 6001 (), просто позвоните 6002 () или позвоните оба в заказе 6001 (), 6002 ().

Я подумал, что это будет здравый смысл запускать все обновления при установлении модуля по умолчанию.

Это было полезно?

Решение

Вы не должны получать свой крючок для запуска обновлений. Когда модуль установлен в первый раз, не требуется обновления.

Обновления используются, когда модуль уже установлен (база данных или переменные были созданы). В этом случае вы не хотите переустановить модуль, так как он будет уничтожать все данные, вместо этого вы создаете крючки update_n. Drupal обнаружит, какие обновления необходимы, и они будут запускаться update.php. Анкет В Drupal 6 он будет выбирать, какие обновления нужно делать, но вы можете изменить его, в то время как это невозможно в Drupal 7.

Drupal обнаруживает, какие обновления необходимы путем сохранения номера последнего обновления Run. Это могут быть изменения в базе данных, которые позволят повторять обновления в Drupal 7. Reerunning Updates, как правило, является плохой идеей и чаще всего вызовет ошибки и в некоторых случаях может испортить ваши данные.

Всегда не забудьте сделать резервную копию базы данных перед запуском обновлений.

Другие советы

Цель крючков отличается.

  • Hook_install () вызывается при установке модуля; Это означает, что модуль ранее не был установлен, и поэтому его не нужно обновлять.
  • Hook_update_n () вызывается, когда модуль уже установлен, и его необходимо обновить.

Если есть некоторые задачи, которые необходимо выполнить как при установке модуля, так и при обновлении модуля, то код должен присутствовать в обоих крючках. Не существует модуля, который вызывает все обновления во время установки, и это было бы особенно неправильно, когда функции обновления обновляют схему таблиц базы данных, используемые из модуля; Hook_schema () Всегда следует возвращать обновленную схему, и обновление схемы также с функциями обновления было бы неправильно.

Код, который вы написали, не работает, потому что вызов одной из функций обновления не автоматически выполняет все другие функции обновления.
Вызов функций обновления из реализации hook_install()неправильно, так как неправильно вызывать функцию обновления из другой; Если есть какой -то код, который необходимо выполнить из двух или более функций обновления, то этот код должен быть помещен в функцию, которая вызывается из функций обновления, и из hook_install(), если необходимо.

Установочный крючок вызывается только тогда, когда модуль установлен свежо, поэтому нет необходимости в каких -либо обновлениях. Обновления выполняются только тогда, когда модуль уже установлен, поэтому он может применить дополнительные изменения.

Чтобы заставить функции обновления работать при установке, вы должны изменить версию схемы, например:

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

Или запустить его от Drush: drush -y updb.

Смотрите также: Можно ли запустить крюк вашего модуля?

Hook_install не будет работать в mymod.module файл.

Вы должны разместить hook_install а также hook_uninstall в отдельном файле mymod.install

я думаю что hook_update_N() Также следует поместить в mymod.install


Ответ после обновления вопроса:

Цитируя из а ссылка на сайт, Пожалуйста, проверьте номер версии в файле информации.

Поскольку я разрабатываю в частном порядке, а не для вклада, поле моей «версии» в файле моего модуля .Info является пустым или неизменным при обновлении модуля. Я на самом деле использую Subversive для Eclipse PDT, и поэтому номера версий моих файлов информации никогда не обновляются. Таким образом, мой kuk_update_6001 не был вызван update.php.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с drupal.stackexchange
scroll top