创建一个像WordPress一样的Widget系统,没有任何框架

时间:2015-06-06 17:27:03

标签: php widget

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

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

  1. 列出可用的小部件。
  2. 用户可以激活小部件并在侧栏中使用它们。
  3. 我的步骤:

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

    enter image description here

    这是我的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,如果其他人需要,我会把链接放在这里。 https://github.com/terrylinooo/PHP-EventDispatcher

2 个答案:

答案 0 :(得分:2)

你可能低估了这个问题的复杂性。如果您从头开始这样做,将会有几件事需要考虑。

您是否正在创建所有小部件,然后只是希望用户能够选择他们想要的哪些可见?

如果是这样,大概我可能会:

  • 显然要制作html侧边栏,它将容纳由你的css设计的小部件。如果没有发布小部件,请将列宽设置为0.

  • 当然,您可以将所有小部件放在单独的文件中,也可以放在自己的文件夹中。

  • 让数据库表至少包含窗口小部件文件的路径,“已发布”布尔列和“widget_order”列。

  • 选择管理区域中用户将选择要显示哪些内容的位置,并让其更改表格中的“已发布”列,也可以选择一个小文本框或下拉列表,以指定订单号。

然后在前端,只需在侧边栏中进行数据库查找,如果模块表中“已发布”的行数大于0,则“回显”出一个css值,该值将为您的列提供正确的宽度(您选择的)而不是0宽度,如果没有启用则保持隐藏。

数据库查找应该有ORDER BY子句来跟随'widget_order'值。这显然是用户首选项按顺序显示小部件的方式。

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

希望这可以让你了解你将要进入的内容大声笑..

答案 1 :(得分:1)

看看Observer PatternEvent Dispatcher Pattern插件系统

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