首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >wordpress插件MVC页面结构

wordpress插件MVC页面结构
EN

Stack Overflow用户
提问于 2014-01-03 09:02:11
回答 1查看 1.1K关注 0票数 1

我正在工作一个wordpress插件,它占用整个页面,并计划一次旅行。

插件扩展并包含多个模块和超过10个“视图”(预订,计费,注册,我的个人资料,我的预订,我的评论,等等)。

我有一个强大的OOP和MVC背景,但是这个插件最初是在一个模板上创建的,每个模板都加载了ajax,而不是以一种有组织的方式:)

  • 在wordpress中组织大型插件(半小站点)的良好实践是什么?
  • 有办法为模块视图文件创建直接链接吗?类似于: domain.com/blog/wp/plugins/my_plugin/profile.php

Bounty:我在这里寻找有经验的人的指导方针。

EN

回答 1

Stack Overflow用户

发布于 2014-01-08 16:10:39

首先,要做到这一点并不容易,而且随着发展的进展,坚持下去也更难了。

我将试着先回答你的要点,然后再试着谈一些我试图坚持的架构问题。

  • 我把它们组织得尽可能接近正常。所以我通常会得到模型,控制器,视图的文件夹。尽可能多地编写应用程序,就像编写其他应用程序的方式一样。
  • 使用plugin_url()

如果您正在从事一个不会被分发的项目(即不是一个公开发布的插件),您就有了一些优势,因为您可以从Composer加载外部包,而不必担心来自其他地方的冲突。所以只要有可能,我建议把东西卸给作曲家。

我不喜欢PHP如何实现名称空间,但我非常喜欢将它们与自动加载结合使用。如果您使用某种形式的奥托罗定,即使它不与名称空间一起使用,也肯定会使您自己变得更容易。

由于WordPress使用的是函数钩子,除非你(结束了?)设计了很多东西,否则你总是会有一大堆钩子到处都是。通常,我的建议是尝试将它们放在一个文件中,并且不要将钩子放在类中,特别是构造函数中。把东西按逻辑分组。

真正的诀窍是尽量减少实际与WordPress交互的点的数量,以及其他任何地方都可以按照通常的方式编写代码,使用体面的设计模式等等。您必须有某些接触点(比如钩子之类的),您可能会发现自己对WordPress做出了一些让步,但即使在那里,您也可以通过将对象方法作为钩子回调加载,并将这些方法用作“正常”应用程序的起始点来减轻它的影响。

我对这个问题有一段时间感兴趣了。我在这方面有几个正在进行的项目。我把它放在一起的一件事是为了与GravityForms接口,它在github上。这并不复杂,但它可能有助于解释我是如何解决这个问题的。

我已经没有更多的细节需要补充了,但是如果你愿意的话,请随便给我留句话。正如我所说的,我真的很有兴趣解决这个问题,我认为如果WordPress持续并且继续像今天一样流行,我们将会有更好的解决方案。

我希望这是有帮助的!

编辑:-一个更具体的例子

我将在我最初共享的代码中指出一些内容。它有点专门化,但您可以将这些原则用于任何基于钩子的功能。正如您所看到的这里,我正在调用类GravityFormsHooks\Loader的方法来处理与对象的挂钩。在GravityFormsHooks\Loader中,我调用该类上的另一个静态方法来实际执行钩子。这个例子将采取行动或过滤器,但它是专门针对Gravityform的,所以YMMV。

本质上,这个GravityFormsHooks\Loader::hook()方法所做的就是实例化我们要链接到的类,并正常地生成钩子。

我从主插件文件中调用的类是GravityFormsHooks\Forms\Form。请注意,您挂接的任何方法都必须声明为public。如果我们要将自己发展成MVC模式,这里的方法将是您的控制器。从那里,你可以跳到注入模型,模板引擎,所有方式的酷东西。

正如我在最初的文章中提到的,我试图将我与WordPress的联系点保持在一个绝对的最低限度。我的意思不是说您应该编写WordPress已经有API的API,只是您的钩子应该是集中的和最小化的。它确实是一种有用的关注点分离,随着应用程序的增长,它将帮助您更容易地管理复杂性。

我提供的示例应该像Hook控制器一样工作得很好,只要进行最小的修改,就可以删除一些更专业的GravityForms内容。

如果你还有其他问题,请告诉我。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20899969

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档