2011-03-15 93 views
1

我有一个约20页的Drupal 6网站。在每个页面内部,我需要创建大量小部件,这些小部件的信息既可以存储在数据库中,也可以存储在外部Web服务中。大多数时候,“观点”(来自the view module)仅仅不足以解决这一要求。到目前为止,任何时候我需要这样一个小部件,我创建一个实现hook_block的新模块。然后,将这个新模块拖放到我想要的面板内。我将需要创建约20个模块。这工作很好。但是,我不确定这是否是正确的drupal策略,我很乐意从经验丰富的Drupal开发人员处获得一些反馈。Drupal 6 - 为每个动态信息块创建一个模块?

回答

3

模块可以根据需要显示尽可能多的块(理论上,admin/build/blocks会教你另外;))。

看看hook_block()的文档,你只需要扩展你的返回多块信息,然后根据$ delta决定显示哪一个。

所以你不需要20个独立的模块,也许2-3个模块以某种方式组合在一起,因为只有一个模块可能难以维护。问题是,每一个模块都会让你的站点慢一点(至少要加载一个文件,module_implements()需要遍历每个模块的每个模块,等等)。

没有更多的信息,很难给出任何更好的建议。也许你可以公开你的数据到视图,或者写一个视图插件以你想要的方式显示它,或者...

+0

谢谢!现在我有一个名为“myapp”的模块,里面有一个名为“myapp_block”的函数。如何在同一模块内创建和调用其他块?他们是否生活在不同的功能中,还是需要一些开关语句?我如何将参数传递给我的模块? – jdecuyper 2011-03-15 20:21:30

+0

+1这两个建议,尤其是暴露在一个观点,因为它似乎已经够好了,但并不完全。自定义视图代码可以非常强大。我已将ajaxified“添加到购物车”按钮作为视图字段。很值得学习的初始投资。 – 2011-03-15 20:27:16

+0

请参阅hook_block()的文档:http://api.drupal.org/api/drupal/developer--hooks--core.php/function/hook_block/6(和barraponto的答案) – Berdir 2011-03-15 21:01:12

2

虽然Berdir的回答很不错,但我留下了深刻的印象,没有链接到任何文档它。 hook_block适用于多个区块,它们可以共享构建其内容的功能。 API页面很好,它给出的例子一次定义了两个块。

您应该注意到每个定义的块都有一个delta($ blocks数组中的一个键)。您可以拥有动态增量,并使用其中的值来获取数据(例如,传递nid或uid并获取相关内容)。

+0

是的,忘了补充说明,更新了我的答案,并向上投票。 – Berdir 2011-03-15 21:03:07

+0

为链接+1,这两个块的例子很清楚。 – jdecuyper 2011-03-16 00:59:03