我有一个大约20页的Drupal 6网站。在每个页面中,我需要创建许多小部件,其中的信息存储在数据库中或来自外部Web服务。大多数情况下,“视图”(来自the view module)仅仅不足以解决需求。
到目前为止,每当我需要这样的小部件时,我都会创建一个实现hook_block的新模块。然后,我将这个新模块拖放到我想要的面板中。我需要创建大约20个模块。这非常好用。但是,我不确定这是否是正确的drupal策略,我很乐意收到经验丰富的Drupal开发人员的一些反馈。
答案 0 :(得分:3)
一个模块可以根据需要公开任意数量的块(理论上,admin / build / blocks会教你另外;)。
查看hook_block()的文档,您只需要扩展您的文件以返回多个块信息,然后根据$ delta决定显示哪一个。
因此,您不需要20个单独的模块,可能需要2-3个模块,并将这些模块组合在一起,因为只有一个模块可能难以维护。问题在于,每个模块都会使您的站点变得更慢(至少需要加载一个文件,module_implements()需要为每个钩子循环遍历每个模块,等等。)
如果没有更多信息,很难提供更好的建议。也许您可以将数据暴露给视图,或者编写视图插件以按照您希望的方式显示它,或者......
答案 1 :(得分:2)
尽管Berdir的回答相当不错,但我对其中的任何文档都没有任何链接印象深刻。 hook_block适用于多个块,它们可以共享构建其内容的功能。 API页面很好,它给出的示例一次定义了两个块。
您应该注意到每个已定义的块都有一个delta($ blocks数组中的一个键)。您可以拥有动态增量并使用其中的值来获取数据(例如,传递nid或uid以及获取相关内容)。