Drupal 7 - Блок модуля с пользовательским шаблоном не рендеринг
Кажется, я не могу получить свой собственный блок в моем модуле для рендеринга файла шаблона, который я создал. Вот мой код:
<?php
include_once 'e_most_popular.features.inc'; //this is from features module
function e_most_popular_block_info() {
$blocks['e_most_popular'] = array(
'info' => t('e_most_popular block TITLE'),
'cache' => DRUPAL_NO_CACHE, //there are a number of caching options for this
);
return $blocks;
}
function e_most_popular_block_view($delta = ''){
switch($delta){
case 'e_most_popular':
if(user_access('access content')){ //good idea to check user perms here
$block['subject'] = t('MYblock_TITLE');
$block['content'] = e_most_popular_block_function_items();
}
break;
}
}
function e_most_popular_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 e_most_popular_block.tpl.php that gets //registered below
return theme('e_most_popular_block_function_items', array('items' => $items));
}
//here you are registering your default tpl for the above block
function e_most_popular_theme() {
$module_path = drupal_get_path('module', 'e_most_popular');
$base = array(
'path' => "$module_path/theme", );
return array(
'e_most_popular_block_function_items' => $base + array(
'template' => 'e_most_popular_block',
'variables' => array('items' => NULL,),
),
);
}
Я подтвердил, что он читает файл шаблона, так как при неправильном названии произойдет ошибка, и я включил модуль и назначил блок боковой панели в меню блоков. Я также очищаю кеш после внесения изменений. Я до сих пор не получаю выходной. Вот файл шаблона:
Template file Test
<?php
$items = $variables['items'];
print render($items['VAR_ONE']);
Есть идеи, что я делаю неправильно?
1 ответ
Решение
Как я уже упоминал в своем комментарии, проблема в том, что вы не возвращаете переменную $block в вашем hook_block_view. Вот почему ничего не выводится.
Ознакомьтесь с документацией для hook_block_view.
Ваш hook_block_view должен выглядеть примерно так:
function e_most_popular_block_view($delta = ''){
$block = array();
switch($delta){
case 'e_most_popular':
if(user_access('access content')){ //good idea to check user perms here
$block['subject'] = t('MYblock_TITLE');
$block['content'] = e_most_popular_block_function_items();
}
break;
}
return $block;
}