web-dev-qa-db-ja.com

$ delta引数の使い方は?

$deltahook_block引数を使用するにはどうすればよいですか?

使ってみましたが効果はありませんでした。

これを行う正しい方法は何ですか?

5
enjoylife
/**
 * Implementation of hook_block().
 */
function YOURMODULE_block($op = 'list', $delta = 0, $edit = array()) {
  switch ($op) {
    case 'list':
      $blocks[0]['info'] = t('Block #1 name');
      $blocks[1]['info'] = t('Block #2 name');
      return $blocks;
    case 'view':
      $block = array();
      switch ($delta) {
        case 0:
          $block['content'] = t('Hello for block #1');
          break;
        case 1:
          $block['content'] = t('Hello for block #2');
          break;
      }
      return $block;
  }
}
3
Nikit

他の場所で述べたように、$ deltaを使用すると、1つのモジュールで多くのブロックを返すことができます。 $ deltaは数値である必要がないことを覚えておくと、理解しやすくなります。これは単なる識別子です。

'list' $ opに応答するときは、最初に$ deltaを使用します。返される$ block配列の各キーは、その特定のブロックを構成またはレンダリングするために使用できる$ deltaになります。

switch ($op) {
    case 'list':
      $block['sidebar-links']['info'] = t('Sidebar Links');
      $block['footer-links']['info'] = t('Footer Links');
      return $block;

Drupalシステムが言っていることは、問題のモジュールに2つのブロックがあり、1つは「サイドバーリンク」で識別され、もう1つは「フッターリンク」で識別されることです。

これにより、admin/build/block configページに2つのブロックが配置されます。両方のブロックを有効にすると、識別キーを$ deltaとして 'view' $ opを呼び出すことでレンダリングされます。

    case 'view':
      switch ($delta) {
        case 'sidebar-links': 
          $block['subject'] = t('Sidebar Links');
          $block['content'] = "super weak";
          break;
        case 'footer-links':
          $block['subject'] = t('Footer Links');
          $block['content'] = "super weak";
          break;
      }
      return $block;
  }

追加のボーナスとして、ブロックにセマンティックキーを使用すると、CSS IDが読みやすくなります。 :)

9
Josh Koenig

HOOK_block()の実装には、複数のブロックを含めることができます。 $ delta引数は、出力するブロックを関数に指定します。例:

/**
 * Implementation of hook_block().
*/
function fightfi_block($op = 'list', $delta = 0) {
  $block = array();
  switch ($op) {
    case 'list':
      $block[0]['info'] = t('Sidebar Links');
      $block[1]['info'] = t('Footer Links');
      return $block;
    case 'view':
      switch ($delta) {
        case 0: 
          $block['subject'] = t('Sidebar Links');
          $block['content'] = "super weak";
          break;
        case 1:
          $block['subject'] = t('Footer Links');
          $block['content'] = "super weak";
          break;
      }
      return $block;
  }
} // end function fightfi_block
2
markdorison

すべての種類のdrupal examples .. http://drupal.org/project/examples のサンプルモジュールを確認することをお勧めします。ここにブロックの例があります。 ....

1
mohit_rocks