改变块内容

anr*_*ru 5 drupal drupal-6

我想改变里面的内容$block->content,我应该实现哪个Drupal钩子?

mac*_*mac 9

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

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

换句话说,您可以通过将"块"的本质更改为更灵活的内容来完全改变问题的方法.我倾向于劝阻这种方法,除非你真的发现一个简单的块不会做你需要的......但是你应该知道这种可能性.您可以通过以下方式更改块的性质:

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