web-dev-qa-db-ja.com

Drupal 7ブロックビューインクルードファイル

私はかなり初心者の質問があります、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ファイルに含めると、ブロックは正常に機能します。

3
Jim

@anil sagarの発言は正しいです。 hook_menu()の機能を誤解していると思います。 hook_menu()は、URLリクエストの処理方法を定義するためにモジュールがパスを登録できるようにすることを覚えておいてください。ブロックはノードのコンテンツの一部であるため、実際にはパスを登録しません(コンテンツ、記事、ブログなど)。その部分が理にかなっているといいのですが...そうでない場合はお知らせください。

そのため、ブロックにhook_menu()関数は必ずしも必要ではありません(例外は常に発生する可能性があります)。ここでも、上記のフックhook_block_info()hook_block_view()を使用して、my_cool_block.moduleにコードを記述する必要があります。

ただし、他のカスタムモジュール固有のコードが含まれているファイルをincludeすることもできます。 drupalフックを常にmy_module.moduleファイルにフックしてコードを書く傾向があります。クラスまたは静的クラスのいずれかで書くサポートコード

1
au_stan

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)を定義します。

2
qnd

あなたの質問に対する答えを見つけてください。

  • hook_block_info() および hook_block_view($ delta = '') を使用してブロックを作成できます
  • フックは、モジュール内の他のファイルではなく、.moduleファイルに書き込む必要があります。
  • したがって、モジュールからカスタムブロックを公開するために、上記の2つのフックを実装するyour.moduleファイルに2つの関数を作成します。
  • ブロックの管理ページを使用して作成したブロックを有効にする必要があります。
  • コードを使用してブロックを埋め込む場合は、以下のコードを使用できる場所に!

    $ block = module_invoke( 'module_name'、 'block_view'、 'block_delta'); print render($ block);

それがあなたを明確にすることを願っています!

1
Anil Sagar