回答:
更新を実行するためのインストールフックを取得しないでください。モジュールを初めてインストールするとき、更新は必要ありません。
更新は、モジュールが既にインストールされている(データベースまたは変数が作成されている)ときに使用されます。その場合、すべてのデータを消去するため、モジュールを再インストールするのではなく、代わりにupdate_Nフックを作成します。Drupalは、どの更新が必要であるかを検出し、それらの更新を実行しupdate.php
ます。Drupal 6では、実行する更新を自動的に選択しますが、変更できますが、これはDrupal 7では不可能です。
Drupalは、最後に実行された更新の番号を保存することにより、必要な更新を検出します。これはデータベースの変更であり、Drupal 7で更新を再実行できます。通常、更新の再実行は悪い考えであり、ほとんどの場合エラーを引き起こし、場合によってはデータを台無しにします。
更新を実行する前に、必ずデータベースをバックアップしてください。
フックの目的は異なります。
モジュールのインストール時とモジュールの更新時の両方で実行する必要があるタスクがある場合、コードは両方のフックに存在する必要があります。インストール中にすべての更新フックを呼び出すモジュールはありません。また、更新機能がモジュールから使用されるデータベーステーブルのスキーマを更新する場合は特に間違っています。hook_schema()は常に更新されたスキーマを返す必要があり、更新関数を使用してスキーマを更新することは間違っています。
更新関数の1つを呼び出しても、他のすべての更新関数は自動的に実行されないため、作成したコードは機能しません。
の実装から更新関数hook_install()
を呼び出すのは間違っています。更新関数を別の関数から呼び出すのは間違っているためです。2つ以上の更新関数から実行する必要があるコードがある場合、そのコードは更新関数から呼び出される関数に配置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ファイルの「VERSION」フィールドは、モジュールを更新するときに空白または変更されていません。私は実際にEclipse PDTにSubversiveを使用しているため、情報ファイルのバージョン番号は更新されません。したがって、私のhook_update_6001はupdate.phpによって呼び出されていませんでした。