无需任何框架,打造类似WordPress的Widget系统

Create a Widget system like WordPress without any framework

我在这里和 Google 搜索了这个主题,但我只找到了 PHP 框架的解决方案(例如,YII 和 Laravel)

我正在开发一个简单的 CMS,我想添加像 WordPress 一样的小部件系统(最近评论、类别小部件)

  1. 列出可用的小部件。
  2. 用户可以激活小部件并在边栏中使用它们。

我的步数:

1.首先,我已经制作了一个管理工具作为截图打击(jQuery UI sortable 工作正常)

这是我的 php 代码:

$available_widgets = array(
    0 => array(

        'id' => 'recent-post',
        'title' => 'Latest Pots',
        'option' => array( 'display_count' => 5, 'multi_widget' => 0)

    ),
    1 => array(

        'id' => 'recent-comment',
        'title' => 'Recent Commets',
        'option' => array( 'display_count' => 5, 'multi_widget' => 0)

    ),
    2 => array(

        'id' => 'text-box',
        'title' => 'Text Box',
        'option' => array('multi_widget' => 1)

    )
);

查看

foreach ( $available_widgets AS $available_widget ) {

    if ( $available_widget['option']['multi_widget'] == 0 ) {
        echo '<li class="widget-box widget-single" data-widget-id="' . $available_widget['id'] . '" ><div class="widget-handle">' . $available_widget['title'] . '</div></li>';
    }
    else {
        echo '<li class="widget-box widget-multiple" data-widget-id="' . $available_widget['id'] . '" ><div class="widget-handle">' . $available_widget['title'] . '</div></li>';
    }
}

但我对下一步还没有想法,任何想法将不胜感激。 谢谢

更新:

对于第 2 步,我制作了一个简单的 EventDispatcher,如果其他人需要,我将 link 放在这里。 https://github.com/terrylinooo/PHP-EventDispatcher

您可能低估了这个问题的复杂性。如果您是从头开始执行此操作,则需要考虑几件事。

您是否正在创建所有小部件,然后只希望用户能够挑选他们想要显示的小部件?

如果是这样,我大概会:

  • 显然制作 html 侧边栏来放置小部件,由您的 css 设置样式。如果没有发布小部件,则将列宽设置为 0。

  • 当然,将所有小部件放在单独的文件中,可能在它们自己的文件夹中。

  • 数据库 table 至少包含小部件文件路径、"published" 布尔列和 "widget_order" 列。

  • 选择用户将在管理区域的哪个位置选择要显示的内容,并让它更改 table 中的 "published" 列,也许还有一个小文本他们可以在其中指定订单号的框或下拉列表。

然后在前端,在侧边栏中进行数据库查找,如果模块table中"published"的行数大于0,则'echo' 输出一个 css 值,它将为您的列提供正确的宽度(您选择的)而不是 0 宽度,否则如果启用 none 则保持隐藏。

数据库查找应该有 ORDER BY 子句跟在 'widget_order' 值之后。这显然是小部件按用户偏好顺序显示的方式。

现在每个小部件的功能都在每个文件中,所以将任何相关的 php、Javascript 等放在每个文件中,这将使它们易于开发和修改。显然,您可以在可行的情况下进行重构。

希望这能让你了解你正在玩什么哈哈..

看看Observer PatternEvent Dispatcher Pattern 对于插件系统

安装插件时,不要忘记保存到数据库中
而且,要列出可用的小部件,您只需要查询数据库哪些插件可用或已激活。