代码之家  ›  专栏  ›  技术社区  ›  Sarfraz

PHP:创建可扩展CMS系统[关闭]

  •  8
  • Sarfraz  · 技术社区  · 15 年前

    我已经被赋予了一个新的任务,从客户基本上是建立一个演员/歌手和类似的CMS的客户将出售给他们。

    • 添加插件/小部件
    • 添加模板/主题

    我以为 Observer Pattern 可能有用,但我不太确定。你们建议如何创建这种灵活/可扩展的CMS:

    • 能够添加插件(例如WordPress)
    • 能够添加主题/模板(例如WordPress)
    • 设计模式
    1 回复  |  直到 8 年前
        1
  •  19
  •   Charles    15 年前

    观察者很好,但你必须考虑超越基本模式。规范的观察者/主语模式只将主语对象发送给观察者,而不发送其他对象,甚至不发送 正在通知。

    一开始,解决方案似乎还包括向观察者发出通知的原因,但最后可能会通知那些不关心某些通知的观察者。一个更好的解决方案可能是要求观察者同时要求提供他们希望收到的通知列表。

    愚蠢的 .

    所以,我们很快就找到了一个规范的PHP插件实现:“hooks”。hook使用与Observer/Subject相同的概念,但是实现在一个非常重要的方面是不同的:实际的观察者不是为了观察主题而实例化的。相反,主题会向各种中央存储库发送通知。此存储库配置了所有 已安装并激活 插件(观察者),并包含每个插件想要接收的所有事件的列表。只有在事件发生时才通知每个插件,通常是通过静态方法,而不是通过创建插件实例并通知它。 call_user_func_array 一个好的自动装弹机让这件事变得微不足道。

    因此,您可以为所有插件创建一个简单的接口来实现。您需要的方法包括但不限于:

    • 获取有关插件的数据,如名称、作者、官方网站、版本等。
    • 返回插件想要订阅的事件的方法。
    • 卸载方法也可能很方便。

    取决于你对插件概念的理解程度,你最终可能会得到具有用户可配置选项的插件。你可能需要考虑到这一点。沿着这条路走的是疯狂和配置系统。

    到处 ,并经常与最终用户合作,在需要的地方添加新的挂钩。

    小部件可以很容易地以类似的方式工作,就像在页面呈现之前被调用的插件一样。


    主题/模板,哦,天哪。你可能有两个很大的选择。

    1. Smarty或类似的模板引擎。或者你自己的不是PHP模板引擎。
    2. PHP模板。

    这个决定将由您的最终用户决定。Smarty的限制是难以置信的,但是如果您想确保只有经过批准的代码才能在模板中运行,那么它可能是一个可行的选择。此外,允许在应用程序本身中编辑Smarty模板也不是不安全的。

    虽然这涉及到HTML的创建,但是您还应该考虑CSS。您的最终用户能够直接操作CSS吗?他们愿意吗?如果您的默认模板包含足够多的语义类,那么如果它们知道自己在做什么,就可以不用花太多精力就完成大量的样式设置。另一方面,您的最终用户可能不知道CSS是什么,所以他们可能想要,哦,比方说,颜色选择器和预构建的颜色方案,以及颜色方案选择器,以及其他类似的烦人的东西来构建。现在最好想想那些恐怖事件。


    杂七杂八的东西。

    没有草案和出版国的概念,任何CMS都是不完整的。我没有任何建议给你,除了 . 如果您的客户或最终用户想要任何类型的历史归档、管理审批机制,或者任何其他使草稿/发布不再是简单状态字段的内容,您需要尽快知道(我被这个咬得很厉害。我们围绕一个简单的已发布/未发布模型设计了整个系统,当我们意识到它不起作用时,我们通过规范构建和相关的原型代码完成了大约9/10的工作,我们必须做一些非常复杂的事情才能真正满足客户的需求。重建粗略的计划是迄今为止我们遇到的最大的一次时间消耗。)

    你会用ORM吗?如果没有,请确保使用适当的数据库接口库。PDO,或者梨子里的东西,或者ZendëDb。你必然会有一个客户 坚持 代码在Oracle或MSSQL上运行。或SQLite。告诉他们这是可以做到的(需要一些努力)。插件作者也会感谢你的理智。 你自己滚吧。

    推荐文章