Блок / тема не "возвращает" вывод $ - PullRequest
0 голосов
/ 24 августа 2011

Это проблема.

У меня есть блок под названием «Блок избранного пользователя»
Он расположен в регионе «Первая боковая панель»
«Первая боковая панель» появляется на первой странице.
Предполагается, что функция извлекает данные из таблицы f25_fabilities и выводит их внутри блока. Сейчас таблица представляет собой пустой массив.
Когда я return $output, ни один из моих элементов или ничего не выводится.
Когда я делаю print($output), все отображается.

Это мой тестовый код, показывающий, что мой оператор if возвращает true. http://d.pr/zDph

/*
 * f25_favorites_my_favorites theme
 */
function theme_f25_favorites_my_favorites($mypaths) {
  dsm($mypaths);
  print_r(count($mypaths));
  $output .= 'n<div id="f25-favorites">n';
    $output .= '<div id="f25-favorites-list">n';
      if (count($mypaths) == 0) {
        $output .= "No favorites have been added";
        print "No favorites have been added";
      }
      else {
        foreach ($mypaths as $indpath) {
          $output .= l($indpath->title, $indpath->path, $attributes = array());
        }
      }
    $output .= '</div>n';
    $output .= '<div id="f25-favorites-add">n';
    $output .= '</div>n';
  $output .= 'n</div>n';
  return $output;
}

Это выводит это: http://d.pr/Uhrs
IF test

Обратите внимание на 0 в левом верхнем углу, это вывод 'count ()'
И печать текста внутри «если»

Итак, это моя тема:

/*
 * f25_favorites_my_favorites theme
 */
function theme_f25_favorites_my_favorites($mypaths) {
  /*dsm($mypaths);
  print_r(count($mypaths));*/
  $output .= '\n<div id="f25-favorites">\n';
    $output .= '<div id="f25-favorites-list">\n';
      if (count($mypaths) == 0) {
        $output .= "No favorites have been added";
      }
      else {
        foreach ($mypaths as $indpath) {
          $output .= l($indpath->title, $indpath->path, $attributes = array());
        }
      }
    $output .= '</div>\n';
    $output .= '<div id="f25-favorites-add">\n';
    $output .= '</div>\n';
  $output .= '\n</div>\n';
  return $output;
}


Вызывается с помощью этой функции hook_theme ():

/*
 * Implentation of hook_theme().
 */
function f25_favorites_theme () {
  return array(
    'f25_favorites_my_favorites' => array (
    'arguments' => array ('mypaths' => array())
   ),
  );
}


Который вызывается с помощью этой функции hook_block ():

/*
 * Implementation of hook_block().
 *
 */
function f25_favorites_block($op = 'list', $delta = 0, $edit = array()) {
  if ($op == 'list') {
    $blocks = array();
    $blocks['f25-favorites'] = array(
      'info' => t('User Favorites Block'),
      'cache' => BLOCK_NO_CACHE,
    );
    return $blocks;
  }

  if ($op == 'view') {
    switch ($delta) {
      case 0:
        $mypaths = f25_favorites_user_favorites();
        $block = array(
          'subject' => t('User Favorites Block'),
          'content' => theme_f25_favorites_my_favorites($mypaths)
        );
      return $block;
    };
  }
}

Примечательно

Моя тема является «подтемой» темы под названием «Дзен»
У Zen есть block.tpl.php, который выглядит так: http://d.pr/AaO1

Вот полный код моего модуля: http://d.pr/cGqc

1 Ответ

1 голос
/ 24 августа 2011

Это может быть проблема, связанная с регионом. Попробуйте переключиться на гирлянду и добавьте блок в обычный старый регион гирлянды, и посмотрите, появится ли он.

Если вы видите это в Garland, убедитесь, что ваша подтема действительно определяет этот регион «Первая боковая панель», а затем фактически печатает его переменную в файлах tpl.

(FWIW Я попробовал ваш код на Garland, и он отлично отображает блок.)

Кроме того, вы можете изменить вызов функции с:

theme_f25_favorites_my_favorites($mypaths)

до:

theme('f25_favorites_my_favorites', $mypaths)

... если вы хотите сохранить гибкость кода (т. Е. Сделать так, чтобы Drupal вызывал любые функции предварительной обработки и позволял другим или вам самим в будущем переопределять вывод шаблона)

...