Zend framework Zend框架内的小部件-它们应该去哪里?
我使用Zend框架(使用条令作为ORM)已经有一段时间了,并用它做了一些项目 在一些即将到来的项目中,我需要类似Wordpress的小部件。您有一个帖子/页面,它可能看起来像:Zend framework Zend框架内的小部件-它们应该去哪里?,zend-framework,wordpress,widget,Zend Framework,Wordpress,Widget,我使用Zend框架(使用条令作为ORM)已经有一段时间了,并用它做了一些项目 在一些即将到来的项目中,我需要类似Wordpress的小部件。您有一个帖子/页面,它可能看起来像: Subscribe to my newsletter: [subscribe/] View my events [events limit=5 sort=date/] View this page's comments [comments/] 比如说订阅小部件将被Blog::subscribeWidget替换,事件
Subscribe to my newsletter:
[subscribe/]
View my events
[events limit=5 sort=date/]
View this page's comments
[comments/]
比如说订阅小部件将被Blog::subscribeWidget替换,事件可以被events::eventsWidget替换,等等
在过去的几周里,我一直在思考我到底该怎么做???我提出了以下选项:
如果我理解正确,您的小部件将需要它们自己的操作控制器,这是它们获取要显示的数据、解析表单提交等的逻辑所在。在这种情况下,小部件和页面之间的区别在于其呈现方式,即作为HTML片段而不是整个页面;您可以使用来实现这一点
如果您的小部件包含表单,那么它可能应该使用AJAX将表单数据提交回服务器,这样使用小部件不会导致用户意外地离开页面。您可以通过在小部件的视图和/或操作中使用,将所需的JavaScript注入到包含小部件的页面中。我让Richards回答,问题和进一步的用例在我的脑海中酝酿了一段时间,最终找到了解决方案 我将拥有以下视图帮助程序和方法: Content; with methods: render, renderWidgets, renderWidget, renderCommentsWidget (comments). Event; with methods: renderEventsWidget (many events), renderEventWidget (one event) Subscription; with methods: renderSubscribeWidget (subscription form). 内容;使用方法:render、renderWidget、renderWidget、renderCommentsWidget(注释)。 事件方法:renderEventsWidget(多个事件)、renderEventWidget(一个事件) 订阅使用方法:renderSubscribeWidget(订阅表单)。 我的配置文件中将包含: app.widgets.comments.helper = content app.widgets.subscribe.helper = subscription app.widgets.events.helper = event app.widgets.comments.helper=内容 app.widgets.subscribe.helper=订阅 app.widgets.events.helper=事件 我还将拥有以下型号: Content for use for all pages. Event for use for all events. Subcriber for use for subscriptions to content 用于所有页面的内容。 用于所有事件的事件。 用于订阅内容的Subcriber 在我看来,我会这样做:
echo$this->content()->render($this->content)
然后Content::render()将执行任何内容呈现,然后通过传递到Content::renderWidgets()来执行小部件的呈现。在这里,我们将使用app.widgets的配置将widget bbcode标记链接到它相应的视图助手(使用命名约定“render”.ucfirst($tag)。“widget”)。因此,例如Content::renderCommentsWidget()将继续呈现注释
也许稍后我会决定为每个小部件提供一个小部件视图帮助程序,以及单独的视图帮助程序,例如ContentCommentsWidget视图帮助程序。但就目前而言,这只会增加额外的不必要的复杂性
现在来回答我提到的AJAX问题。比如评论小部件,允许通过ajax发布评论。它只需要在内容控制器中为它提供一个合适的方法。因此,我们也有一个事件和订阅控制器,与视图帮助器相对应。视图辅助对象和控制器之间的交互都将是硬编码的,而不是软编码
我希望这对其他人有所帮助,而目前的计划是让这个项目成为一个开源项目。所以也许有一天你会看到一切都在起作用
谢谢
更新: 您可以在以下存储库中找到这些想法的源代码:
- -这是实际的CMS,包含/application/modules/balcms/view/helpers中的小部件,并包含/application/modules/config/application/balcms.yaml中的配置
- -这是资源库,其中包含位于/lib/Bal/view/helper/widget.php的小部件视图帮助程序