【问题标题】:change block content更改块内容
【发布时间】:2009-11-09 22:27:16
【问题描述】:

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

【问题讨论】:

  • 对于 Drupal 7(我知道您的问题与 6 相关,但无论如何这可能会有所帮助) hook_block_alter 可以让您完全按照您的需要.所以你有一个选择是升级到 D7 :)

标签: drupal drupal-6


【解决方案1】:

根据你的需求,我可以想到各种可能的方式:

  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 代码。

另一方面,您可以通过将“块”的本质更改为更灵活的方式来完全改变解决问题的方法。我倾向于不鼓励这种方法,除非你真的发现一个简单的块不能做你需要的……但你应该知道这种可能性。您可以通过以下方式更改块的性质:

  • 使用nodeasblock module,它允许您将一个节点放入一个块中(因此可以在模板中使用比简单的$title$content 更多的变量。
  • 使用views module。这是任何认真的 drupal 用户/管理员都必须知道的……但是视图对这种特定情况的适用性会因您尝试生成的块的内容而有很大差异。
  • 使用panels module,它允许您创建块状内容并通过图形界面进行播放(请注意,这在开销方面是一个巨大的模块并且具有陡峭的学习曲线)。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多