我在这里搜索了这个主题和谷歌,但我只找到了PHP框架的解决方案(例如,YII和Laravel)
我正在开发一个简单的CMS,我想像WordPress一样添加widget系统(最近的评论,类别小部件)
我的步骤:
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,如果其他人需要,我会把链接放在这里。 https://github.com/terrylinooo/PHP-EventDispatcher
答案 0 :(得分:2)
你可能低估了这个问题的复杂性。如果您从头开始这样做,将会有几件事需要考虑。
您是否正在创建所有小部件,然后只是希望用户能够选择他们想要的哪些可见?
如果是这样,大概我可能会:
显然要制作html侧边栏,它将容纳由你的css设计的小部件。如果没有发布小部件,请将列宽设置为0.
当然,您可以将所有小部件放在单独的文件中,也可以放在自己的文件夹中。
让数据库表至少包含窗口小部件文件的路径,“已发布”布尔列和“widget_order”列。
选择管理区域中用户将选择要显示哪些内容的位置,并让其更改表格中的“已发布”列,也可以选择一个小文本框或下拉列表,以指定订单号。
然后在前端,只需在侧边栏中进行数据库查找,如果模块表中“已发布”的行数大于0,则“回显”出一个css值,该值将为您的列提供正确的宽度(您选择的)而不是0宽度,如果没有启用则保持隐藏。
数据库查找应该有ORDER BY子句来跟随'widget_order'值。这显然是用户首选项按顺序显示小部件的方式。
现在每个小部件功能都在每个文件中,所以在每个文件中放入任何相关的php,Javascript等,这将使它们易于开发和修改。显然,你可以在可行的情况下进行重构。
希望这可以让你了解你将要进入的内容大声笑..
答案 1 :(得分:1)
看看Observer Pattern 或Event Dispatcher Pattern插件系统
安装插件时,不要忘记将其保存到数据库中 并且,要列出可用的小部件,您只需要查询数据库哪些插件可用或已激活。