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;
}
Другие вопросы по тегам