有効にすると、最新のモジュールが.installをロードしていないようです。要約は次のとおりです。
hook_menu()
とhook_views_data()
を実装する.moduleファイルがあります。
モジュールを有効にすると、どちらも正常に機能しているように見えます。メニューパスへの移動は期待どおりに機能し、新しいビューの基本タイプが表示されます。
hook_install()
hook_uninstall()
とhook_schema()
を実装する.installファイルがあります
インストールファイル内のどの機能も実行されていないようです。有効にした後、新しいテーブルは表示されず、エラーはログに記録されません。
Develを使用して.installファイル内の関数を手動で呼び出すと、未定義のエラーが発生します。インストールファイルがロードされていないと想定することしかできません。
コマンドラインから.installファイルを実行するとPHPインタープリターは構文エラーを発生させません.
モジュールが有効になっているときにファイルがスコープにロードされない理由を説明するのに迷っています。
何か助けていただければ幸いです。
hook schema()
のエラーであることが判明しました。残念ながら、関数は多かれ少なかれサイレントに失敗しました。例えば :
'description' => array(
'type' => 'varchar',
'size' => 'normal',
'not null' => TRUE,
'description' => 'Description of vaule type.',
),
失敗しました。
'description' => array(
'type' => 'varchar',
'size' => 'normal',
'length' => 255,
'not null' => TRUE,
'default' => '',
'description' => 'Description of vaule type.',
),
働いた。
この問題は、モジュールを無効にしてから再度有効にすると、システムテーブルからモジュールを削除するのではなく、インストールがトリガーされるという誤った考えによって悪化しました。
フィードバックを提供してくれたすべての人に改めて感謝します。
インストールファイルは、インストール、更新プロセス中、またはモジュール要件を確認するためにのみロードされます。 (必要なときに)オンデマンドでファイルをロードすると、実行時間、メモリ、および全体的なパフォーマンスが節約されます。
モジュールのインストールファイルを含めるには、最初にそれを含める必要があります。次に例を示します。
module_load_include('install', 'my_module');
.installファイルがロードされておらず、何が問題なのかを理解するのに時間がかかったので、後で参照できるようにこの回答を追加したいと思います。
いくつかの更新関数を定義しました。 hook_update_7101ですが、update.phpに移動すると、「保留中の更新はありません」と表示されていました。いくつかのデバッグステートメントを追加しましたが、get_defined_functions()を呼び出したときに関数が表示されないことがわかりました(これはphp関数です)。 PHPは更新機能を認識していなかったようです。
Drupalには私のモジュールの2つのバージョンがあったことがわかりました。 1つは/ sites/all/modulesにあり、もう1つは/ sites/sitename/modulesにあります。そのため、sites/sitenameにある古いバージョンのモジュールが、sites/allにある新しいバージョンを上書きしていました。
つまり、結論:
Check whether there are 2 versions of your module - one at sites/all/modules and another at sites/sitename/modules
古いバージョンのモジュールフォーム/ sites/sitenameを削除すると、期待どおりに更新が表示されました。
モジュールを有効にした後でインストールファイルを追加した場合:モジュールを無効にし、モジュールをアンインストールしてから、モジュールを有効にします。
hook_install()
は、モジュールが初めて有効になったとき、およびアンインストール後に有効になった場合にのみ実行されます。