阻止/主题不'返回$输出

时间:2011-08-23 21:50:04

标签: php drupal-6 drupal-modules drupal-hooks

这就是问题所在。

我有一个名为'用户收藏夹'的块 它位于“First Sidebar”区域 “第一边栏”出现在头版。
该函数应该从f25_favorites表中获取数据并将其列在块内。现在这个表是一个空数组 当我return $output时,我的div或其他任何东西都没有输出 当我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()'的输出 并在'if'

中打印文本

所以,这是我的主题:

/*
 * 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 个答案:

答案 0 :(得分:1)

这可能是与地区有关的问题。尝试切换到Garland并将块添加到普通的旧Garland区域,看看它是否出现。

如果您在Garland中看到它,那么请确保您的子主题确实定义了“First Sidebar”区域,然后实际在tpl文件中打印其变量。

(FWIW我在Garland上尝试了你的代码并且显示块很好。)

此外,您可能希望更改函数调用:

theme_f25_favorites_my_favorites($mypaths)

到:

theme('f25_favorites_my_favorites', $mypaths)

...如果你想保持代码的灵活性(即让Drupal调用任何预处理函数并允许其他人或将来自己覆盖模板的输出)