私はかなり初心者の質問があります、Drupal 7モジュールの例、具体的にはajaxウィザードフォームに従います。すべてのフォームの作成/操作は、ファイル属性で呼び出されるajax_example_graceful_degradation.incに含まれています。
// A classic multi-step wizard, but with no page reloads.
// See ajax_example_graceful_degradation.inc.
$items['examples/ajax_example/wizard'] = array(
'title' => 'Wizard (with graceful degradation)',
'page callback' => 'drupal_get_form',
'page arguments' => array('ajax_example_wizard'),
'access callback' => TRUE,
**'file' => 'ajax_example_graceful_degradation.inc',**
'weight' => 7,
);
次に、テンプレートに含めるブロックを作成します。 block_view関数にファイル属性を含めることができないようです。どうやってやるの?注:ajax_example_graceful_degradation.incのすべての機能を.moduleファイルに含めると、ブロックは正常に機能します。
@anil sagarの発言は正しいです。 hook_menu()
の機能を誤解していると思います。 hook_menu()
は、URLリクエストの処理方法を定義するためにモジュールがパスを登録できるようにすることを覚えておいてください。ブロックはノードのコンテンツの一部であるため、実際にはパスを登録しません(コンテンツ、記事、ブログなど)。その部分が理にかなっているといいのですが...そうでない場合はお知らせください。
そのため、ブロックにhook_menu()
関数は必ずしも必要ではありません(例外は常に発生する可能性があります)。ここでも、上記のフックhook_block_info()
とhook_block_view()
を使用して、my_cool_block.module
にコードを記述する必要があります。
ただし、他のカスタムモジュール固有のコードが含まれているファイルをinclude
することもできます。 drupalフックを常にmy_module.module
ファイルにフックしてコードを書く傾向があります。クラスまたは静的クラスのいずれかで書くサポートコード
Block_view関数にはそのような属性はありませんが、いつでもそのようなものを使用できます(すでにhook_block_info()を実装していて、独自のMYBLOCKDELTAを定義している場合):
function MYMODULENAME_block_view($delta = '') {
switch ($delta) {
case 'MYBLOCKDELTA':
$block['subject'] = t('This is my block');
module_load_include('inc', 'MYMODULENAME', 'my_inc_file');
$block['content'] = myblock_contents($delta);
break;
}
return $block;
}
次に、MYMODULENAMEモジュールフォルダーのmy_inc_file.incで関数myblock_contents($ delta)を定義します。
あなたの質問に対する答えを見つけてください。
コードを使用してブロックを埋め込む場合は、以下のコードを使用できる場所に!
$ block = module_invoke( 'module_name'、 'block_view'、 'block_delta'); print render($ block);
それがあなたを明確にすることを願っています!