hook_load()
と がモジュール フックではないため、コードが機能しませんhook_view()
。それらはノード フックです。呼び出しは、モジュール名ではなく、コンテンツ タイプ名に基づいています。
そのため、最初に次を使用してコンテンツ タイプを宣言する必要がありますhook_node_info()
。
function mymodule_node_info() {
$items = array();
$items['nodetype1'] = array(
'name' => t('Node Type 2'),
'module' => 'mymodule_nodetype1',
'description' => t("Nodetype 1 description"),
);
$items['nodetype2'] = array(
'name' => t('Node Type 2'),
'module' => 'mymodule_nodetype2',
'description' => t("Nodetype 2 description"),
);
$items['nodetype3'] = array(
'name' => t('Node Type 2'),
'module' => 'mymodule_nodetype3',
'description' => t("Nodetype 3 description"),
);
return $items;
}
hook_node_info()
次に、ノード フック用に宣言されたコンテンツ タイプごとに指定したモジュールの名前を使用する必要があります。つまり、、、mymodule_nodetype1_load()
などmymodule_nodetype2_view()
です。
編集
ノードが表示またはロードされたときに非ノードベースのモジュールを起動しようとしている場合は、次を使用する必要がありますhook_nodeapi()
。
function mymodule_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) {
switch ($op) {
case 'view':
mymodule_view_function($node);
break;
case 'load':
mymodule_load_function($node);
break;
}
}
mymodule_load_function()
とmymodule_load_function()
を、オブジェクトに作用するように設計された独自のカスタム関数に置き換え$node
ます。
編集 2
実装の構文エラーに加えて、hook_load()
提供しているものの外にコードの一部があり、正しい呼び出しを妨げています。次のコードは機能します (nodetype1 ノードを作成すると、「mymodule_nodetype1_load が呼び出されました」というメッセージがノードに表示されます): おそらく、コード全体を比較して、不足しているものを確認できます。
function mymodule_node_info() {
return array(
'mymodule_nodetype1' => array(
'name' => t('nodetype1'),
'module' => 'mymodule_nodetype1',
'description' => t('....'),
'has_title' => TRUE,
'title_label' => t('Title'),
'has_body' => TRUE,
'body_label' => t('Body'),
),
'mymodule_nodetype2' => array(
'name' => t('nodetype2'),
'module' => 'mymodule_nodetype2',
'description' => t('....'),
'has_title' => TRUE,
'title_label' => t('Title'),
'has_body' => TRUE,
'body_label' => t('Body'),
),
);
}
function mymodule_nodetype1_form(&$node, $form_state) {
// nodetype1 form elements go here
return $form;
}
function mymodule_nodetype2_form(&$node, $form_state) {
// nodetype2 form elements go here
return $form;
}
function mymodule_nodetype1_load($node) {
$additions = new stdClass();
drupal_set_message('mymodule_nodetype1_load invoked');
return $additions;
}
function mymodule_nodetype2_load($node) {
$additions = new stdClass();
drupal_set_message('mymodule_nodetype2_load invoked');
return $additions;
}
モジュールの変更後に環境をリセットしていない場合は、キャッシュの問題が発生している可能性があります。クリーンな Drupal インストールにリセットできるサンドボックス環境でコードをテストして、以前の不適切なノード実装の古い問題に集中していないことを確認する必要があります。
さらに、hook_nodeapi()
モジュールで定義されていないコンテンツ タイプを操作しようとしている場合にのみ使用する必要があります。コンテンツ タイプは、ノード フック ( 、 など) を使用する必要がありhook_load()
ますhook_view()
。
最後に、設計されていない場所で発火することを期待しているため、間違ったフックを使用している可能性があります。上記のすべてを実行した場合は、達成する予定の機能とフックが発生すると予想される場所で投稿を更新してください。