3

カスタム ブロックのテーマを設定するためのカスタム .tpl ファイルを作成する drupal の方法は何ですか? 具体的には、プログラムでブロックを作成し、ビュー コードをモジュール php コードから分離する方法を見つけようとしています。それがページの場合、Drupal の theme() はこれを実現するための非常に効率的な方法です。ただし、カスタム ブロックに対して同じことを行う Drupal の方法がわかりません。hook_theme() を使用しようとしましたが、うまくいきませんでした。

    //implementation of hook_block_info
    function mymodule_block_info() {
      $blocks = array();
      $blocks['myblock'] = array(
        'info' => t('My Block Title'),
      );

      return $blocks;
    }

    //implementation of hook_block_view
    function mymodule_block_view($delta='') {
      $block = array();

      switch($delta) {
        case 'myblock' :
          $block['content'] = mymodule_get_block_view();
          break;
      }
      return $block;
    }

    function mymodule_get_block_view(){
        $variables=array();
        return theme('mytemplate', $variables);

    }

    //implementation of hook_theme
    function codefactory_theme() {
      return array(
        'mytemplate' => array(
          'variables' => array(),
          'template' => 'mytemplate',
        ),
      );
    }
4

2 に答える 2

3

これはうまくいくようです。

//implementation of hook_block_info
function mymodule_block_info() {
  $blocks = array();
  $blocks['myblock'] = array(
    'info' => t('My Block Title'),
  );

  return $blocks;
}

//implementation of hook_block_view
function mymodule_block_view($delta='') {
  $block = array();

  switch($delta) {
    case 'myblock' :
      $variables = array(); //do stuff here
      $block['content'] = theme('mytemplate', $variables);
      break;
  }
  return $block;
}


//implementation of hook_theme
function mymodule_theme() {
  return array(
    'mytemplate' => array(
      'variables' => array(),
      'template' => 'mytemplate',
    ),
  );
}
于 2013-12-17T21:41:04.017 に答える
3

次の提案に従います: block_ MODULE _DELTA。上記の例に従って、ブロックが 1 つしかない場合は block--mymodule.tpl.php、ブロックが複数ある場合はblock--mymodule--1.tpl.phpという名前を付けてみます。

参照: api.drupal.orgおよびdrupal.org

于 2013-05-26T05:03:36.513 に答える