drupal 7-创建自定义块并为其分配tpl

drupal 7-创建自定义块并为其分配tpl,drupal,drupal-7,themes,block,Drupal,Drupal 7,Themes,Block,我已创建了一个自定义块,并希望将其与关联模块中的tpl关联 目前,我只能将主题文件夹中的tpl文件关联起来 我希望它是模块的一个tpl,然后使用hook_菜单并将一些数据传递给它,就我所知,主题文件夹中的tpl是不可能的 这可能吗 如果这不可能,我想在我的主题中使用tpl作为容器,并使用hook_菜单传递其内容,但我不知道如何返回我将在模块中创建的tpl/主题 有人能帮我吗?我希望下面的例子能帮助你 function MYMODULEBLOCK_block_info() { $blocks[

我已创建了一个自定义块,并希望将其与关联模块中的tpl关联

目前,我只能将主题文件夹中的tpl文件关联起来

我希望它是模块的一个tpl,然后使用hook_菜单并将一些数据传递给它,就我所知,主题文件夹中的tpl是不可能的

这可能吗

如果这不可能,我想在我的主题中使用tpl作为容器,并使用hook_菜单传递其内容,但我不知道如何返回我将在模块中创建的tpl/主题


有人能帮我吗?

我希望下面的例子能帮助你

function MYMODULEBLOCK_block_info() {
  $blocks['MYMODULE_BLOCK_NAME'] = array(
    'info' => t('MYMODULE BLOCK TITLE'), 
    'cache' => DRUPAL_NO_CACHE, //there are a number of caching options for this
  );

  return $blocks;
}

function MYMODULEBLOCK_block_view($delta = ''){
  switch($delta){
    case 'MYMODULE_BLOCK_NAME':
      if(user_access('access content')){ //good idea to check user perms here
         $block['subject'] = t('MYBLOCK_TITLE');
         $block['content'] = MYMODULE_BLOCK_FUNCTION_ITEMS();
         return $block;
      }
      break;
  }
}

function MYMODULE_BLOCK_FUNCTION_ITEMS(){
  $items = array();
  $items['VAR_ONE'] = array('#markup' => 'VAR_ONE_OUTPUT'); //this is the simplest kind of render array
  $items['VAR_TWO'] = array(
                        '#prefix' => '<div>',
                        '#markup' => 'VAR_TWO_OUTPUT',
                            '#suffix' => '</div>',
                          );
// this is where the $items get sent to your default MYMODULE_BLOCK.tpl.php that gets 
// registered below
      return theme('MYMODULE_BLOCK_FUNCTION_ITEMS', array('items' => $items)); 
    }

//here you are registering your default tpl for the above block 
function MYMODULE_theme() {   
  $module_path = drupal_get_path('module', 'MYMODULE');
  $base = array(
    'path' => "$module_path/theme",   
  );
  return array(
    'MYMODULE_BLOCK_FUNCTION_ITEMS' => $base + array(
      'template' => 'MYMODULE_BLOCK',  //leave off .tpl.php
      'variables' => array('items' => NULL,),
    ),   
  ); 
}
函数MYMODULEBLOCK\u block\u info(){
$blocks['MYMODULE\u BLOCK\u NAME']=数组(
'info'=>t('MYMODULE块标题'),
'cache'=>DRUPAL\u NO\u cache,//有许多缓存选项可供选择
);
返回$blocks;
}
函数MYMODULEBLOCK\u block\u视图($delta=''){
交换机($delta){
案例“MYMODULE\u BLOCK\u NAME”:
if(user_access('access content'){//在这里检查用户perms是个好主意
$block['subject']=t('MYBLOCK_TITLE');
$block['content']=MYMODULE_block_FUNCTION_ITEMS();
返回$block;
}
打破
}
}
函数MYMODULE\u块\u函数\u项(){
$items=array();
$items['VAR_ONE']=array('#markup'=>'VAR_ONE_OUTPUT');//这是最简单的渲染数组
$items['VAR_TWO']=数组(
“#前缀”=>”,
“#标记”=>“变量二输出”,
“#后缀”=>”,
);
//在这里,$items将被发送到默认的MYMODULE_BLOCK.tpl.php,该MYMODULE_BLOCK.tpl.php
//登记如下
返回主题('MYMODULE_BLOCK_FUNCTION_ITEMS',数组('ITEMS'=>$ITEMS));
}
//在这里,您正在注册上述区块的默认tpl
函数MYMODULE_theme(){
$module_path=drupal_get_path('module','MYMODULE');
$base=数组(
“路径”=>“$module_path/theme”,
);
返回数组(
“MYMODULE\u BLOCK\u FUNCTION\u ITEMS”=>base+array(
'template'=>'MYMODULE_BLOCK',//离开.tpl.php
'variables'=>array('items'=>NULL,),
),   
); 
}
所有大写的东西(除了DRUPAL\u NO\u CACHE)都可以被命名为任何你想要的名字

然后在模块中名为theme/的子文件夹中,应该有一个名为MYMODULE_BLOCK.tpl.php的文件,其中可能包含以下内容:

<?php 

$items = $variables['items'];

print render($items['VAR_ONE']); 
print render($items['VAR_TWO']); 

我这样做的方式如下

function YOURMODULE_menu(){
    $items['somepage'/%] = array(
        'title' => 'Some page title',
        'page callback' => 'YOURMODULE_page',
        'page arguments' => array(1),
        'type' => MENU_CALLBACK,
        'access arguments' => array('access content'),
    );
    return $items;
}

function YOURMODULE_page($data){
    $output = 'value from YOURMODULE module! = '.$data;
    return theme('theme_file',array('results' => $output));
}

function YOURMODULE_theme() {
    $path = drupal_get_path('module', 'YOURMODULE');
    return array(
        'theme_file' => array(
            'variables' => array('results' => null),
            'template' => 'theme_file',
            'path' => $path, 
        ),
    );
}
将tpl文件theme_file.tpl.php放在模块目录中,并在其中使用以下代码

<?php print $results; ?>
将tpl文件theme_file.tpl.php放在主题目录中,并在其中放置以下代码

<?php print $results; ?>

去你的办公室看看结果

<?php print $results; ?>