wordpress插件MVC页面结构

 荆州房产网 发布于 2023-02-06 19:23

我正在制作一个wordpress插件,它占用了整个页面,并且是关于计划旅行的.

该插件展开并包含几个模块和超过10个"视图"(预订,计费,注册,我的个人资料,我的预订,我的评论等).

我有一个强大的OOP和MVC背景,但这个插件最初是在一个模板上创建的,所有东西都加载了ajax而不是有条理的方式:)

在wordpress中组织大插件(半小网站)的好习惯是什么?

有没有办法为模块视图文件创建直接链接?类似于:domain.com/blog/wp/plugins/my_plugin/profile.php

赏金:我在这里寻找有经验的人的指导方针.

1 个回答
  • 首先,这并不容易,随着开发的进展,它更难坚持下去.

    我会首先尝试回答你的要点,然后尝试谈谈我试图坚持的一些架构.

    我尽可能接近正常组织它们.所以我通常最终得到模型,控制器,视图的文件夹.尝试以与其他任何方式相同的方式尽可能多地编写应用程序.

    使用plugin_url().

    如果您正在处理一个不会分发的项目(即不是公开发布的插件),那么您可以获得一些优势,因为您可以从Composer加载外部包而不必担心来自其他地方的冲突.所以,只要有可能,我建议将内容卸载到Composer.

    我不是PHP如何实现命名空间的粉丝,但我非常喜欢将它们与自动加载结合使用.如果您使用某种形式的自动加载,即使它没有与命名空间一起使用,您肯定会让自己更轻松.

    因为WordPress是在函数钩子之外工作的,除非你(过度?)设计很多东西,否则你总是会在这个地方找到一堆钩子.一般来说,我的建议是尝试将它们保存在一个文件中,并且永远不要将钩子放在类中,尤其是构造函数.将东西保存在逻辑组中.

    诀窍在于最大限度地减少你实际与WordPress进行交互的点数,以及在其他任何地方实际编写你的代码,就像通常那样,使用体面的设计模式等.你必须要有某些联系点(比如钩子等),你可能会发现自己对WordPress做出了一些让步,但即使在那里你也可以通过加载对象方法作为钩子回调来缓解它,并将它们用作跳跃-off指向"正常"应用程序.

    我一直对这个问题感兴趣.我在这方面有几个正在进行的项目.我扔在一起的一件事是与GravityForms接口,它在github上.这真的不复杂,但它可能有助于解释我如何解决问题.

    我已经没有具体的内容了,但如果你愿意,请随时给我留言.正如我所说,我真的很有兴趣解决这个问题,我认为如果WordPress持续并且继续像今天这样流行,我们将有更好的解决方案.

    我希望这是有帮助的!

    编辑:一个更具体的例子

    我会在我最初分享的代码中指出一些内容.它有点专业,但你可以使用任何基于钩子的功能的原则.正如你在这里看到的,我正在调用一个类GravityFormsHooks\Loader来处理挂钩对象的方法.在GravityFormsHooks\Loader,我正在调用该类的另一个静态方法来实际执行钩子.此示例将采用动作或过滤器,但它专门针对Gravityforms定制,因此YMMV.

    基本上这个GravityFormsHooks\Loader::hook()方法的作用是实例化我们挂钩的类,并正常生成钩子.

    我从主插件文件中调用的类是GravityFormsHooks\Forms\Form.请注意,您挂钩的任何方法必须声明为public.如果我们要把自己变成一个MVC范例,这个方法就是你的控制器.从那里,你可以跳到注入模型,模板引擎,各种酷炫的东西.

    正如我在原帖中所提到的,我尽量将与WordPress的联系点保持在最低限度.我并不是说你应该编写API来做WordPress已经有API的东西,只是你的钩子应该集中并最小化.它确实是一个有用的关注点分离,随着应用程序的增长,它将帮助您更轻松地管理复杂性.

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

    如果您有任何其他问题,请告诉我.

    2023-02-06 19:26 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有