web-dev-qa-db-ja.com

.installファイルがロードされないのはなぜですか?

有効にすると、最新のモジュールが.installをロードしていないようです。要約は次のとおりです。

hook_menu()hook_views_data()を実装する.moduleファイルがあります。

モジュールを有効にすると、どちらも正常に機能しているように見えます。メニューパスへの移動は期待どおりに機能し、新しいビューの基本タイプが表示されます。

hook_install()hook_uninstall()hook_schema()を実装する.installファイルがあります

インストールファイル内のどの機能も実行されていないようです。有効にした後、新しいテーブルは表示されず、エラーはログに記録されません。

Develを使用して.installファイル内の関数を手動で呼び出すと、未定義のエラーが発生します。インストールファイルがロードされていないと想定することしかできません。

コマンドラインから.installファイルを実行するとPHPインタープリターは構文エラーを発生させません.

モジュールが有効になっているときにファイルがスコープにロードされない理由を説明するのに迷っています。

何か助けていただければ幸いです。

1
SMTF

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.',
        ),

働いた。

この問題は、モジュールを無効にしてから再度有効にすると、システムテーブルからモジュールを削除するのではなく、インストールがトリガーされるという誤った考えによって悪化しました。

フィードバックを提供してくれたすべての人に改めて感謝します。

2
SMTF

インストールファイルは、インストール、更新プロセス中、またはモジュール要件を確認するためにのみロードされます。 (必要なときに)オンデマンドでファイルをロードすると、実行時間、メモリ、および全体的なパフォーマンスが節約されます。

モジュールのインストールファイルを含めるには、最初にそれを含める必要があります。次に例を示します。

module_load_include('install', 'my_module');
0
kenorb

.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を削除すると、期待どおりに更新が表示されました。

0
littledynamo

モジュールを有効にした後でインストールファイルを追加した場合:モジュールを無効にし、モジュールをアンインストールしてから、モジュールを有効にします。

hook_install()は、モジュールが初めて有効になったとき、およびアンインストール後に有効になった場合にのみ実行されます。

0
Oswald