改变块内容

时间:2009-11-09 22:27:16

标签: drupal drupal-6

我想更改$block->content内的内容,Drupal应该实现哪些内容?

2 个答案:

答案 0 :(得分:9)

根据您的需求,我可以考虑各种可能的方式:

  1. 使用template_preproces_block():这个钩子基本上“拦截”了到块的路上的变量,并让你有机会干预这些变量。这是一种非常有效的方式。
  2. Creating your own template file for the block:这可以让您获得更多技巧,但就速度而言并不是最好的(通过.tpl.php文件,比使用函数慢5倍),我读到了)
  3. 通过实施hook_block()创建自己的全新闪亮块。正如Henrik建议的那样,您可以轻松地将原始模块中的代码作为启动器来处理。如果您的更改必须影响网站上使用的所有可能主题,这是一个很好的方法,如果它只需要影响一个主题(尽管您可能根据天气使用给定主题实现某些逻辑或不,但这在我看来非常不优雅。)
  4. 如果块显示表单或其他具有自己的挂钩组的内容,那么您也可以通过这种方式更改内容。例如:如果您尝试修改登录块(显示要进行身份验证的表单),则可以实现hook_form_FORM_ID_alter()hook_form_alter()
  5. Using jQuery:如果块的内容需要从页面的其余内容异步(或依赖)更改,这是一个很好的解决方案。请记住,旧版浏览器(或搜索引擎)不会触发jQuery代码。
  6. 另一方面,您可以通过将“块”的本质更改为更灵活的内容来完全改变问题的方法。我倾向于劝阻这种方法,除非你真的发现一个简单的块不会做你需要的......但是你应该知道这种可能性。您可以通过以下方式更改块的性质:

    • 使用nodeasblock module,它允许您将节点放入块中(因此能够在模板中使用比简单$title$content更多的变量。< / LI>
    • 使用views module。对于任何严重的drupal用户/管理员来说,这是必须知道的...但是视图对这个特定情况的适用性变化很大,这取决于你试图产生的块的内容。
    • 使用panels module,它允许您创建类似于块的内容并通过图形界面进行播放(记住,这是一个巨大的开销模块,并且学习曲线陡峭)。 / LI>

答案 1 :(得分:4)

AFAIK,没有“真正的”钩子来改变块内容。您可以实现yourModule_preprocess_block()函数,检查/操作传入的$ variables数组。或者,由于块实现通常很短,您可以将原始块生成逻辑复制到您自己的hook_block()实现中,从而为您自己的版本提供所需的自定义。