【问题标题】:how to override $block->content in drupal?如何在 drupal 中覆盖 $block->content?
【发布时间】:2011-03-16 01:39:20
【问题描述】:

现在,如果我想覆盖由 Book 模块生成的 $block->content ......我该如何覆盖它并自定义标题列表?谢谢。

【问题讨论】:

    标签: drupal drupal-6


    【解决方案1】:

    可以使用 preprocess_block 函数

    function phptemplate_preprocess_block(&$vars) {
      if (isset($vars['block'])) {
          print_r($vars);
        }
      }
    

    并深入研究这些结果。

    关于内容,这是一个模块生成的块吗,我希望$content是使用theme()函数的渲染器,所以你只需要改变它。

    【讨论】:

    • 区块由 book 模块生成。我应该怎么做?谢谢
    • 我建议使用 Devel 模块并使用它提供的 dpm() 函数来更容易阅读调试输出。
    【解决方案2】:

    $vars 参数将包含有关主题块的所有信息。在您的情况下,您希望模块是“书”。

    function phptemplate_preprocess_block(&$vars) {    
        if (isset($vars['block'])) {
          if($vars['block']->module == 'book') {
            $vars['block']->content = "My new content";
          }
        }
      }
    

    【讨论】:

    • 好一个 PPC 代码,我知道 phptemplate_preprocess_node,但 phptemplate_preprocess_block 看起来很有趣。 drupal 中的所有实体都有预处理功能吗?
    • 它们只适用于作为模板实现的主题钩子(普通主题函数没有预处理器)。看到这个stackoverflow.com/questions/2383865/…
    • PPC-Coder,对不起,我在我的主题的 template.php 中编码,但它无法工作。
    • 什么不起作用?我刚刚在我的页面中添加了一个图书导航块,并且能够将其内容更改为“我的新内容”。
    • 我已经安装了 DHTML 菜单,并使其对书籍导航块生效。
    【解决方案3】:

    你可以使用 preprocess_block 函数

    function yourthemename_preprocess_block(&$vars)
    {
         if(isset($vars['block']))
         {
              //i have override a footer_block 
              if($vars['block']->region == 'footer_block')
              {
                  $vars['content] = "Please Enter Some data";
              }
         }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-28
      • 1970-01-01
      • 1970-01-01
      • 2011-06-06
      相关资源
      最近更新 更多