无需任何框架,打造类似WordPress的Widget系统
Create a Widget system like WordPress without any framework
我在这里和 Google 搜索了这个主题,但我只找到了 PHP 框架的解决方案(例如,YII 和 Laravel)
我正在开发一个简单的 CMS,我想添加像 WordPress 一样的小部件系统(最近评论、类别小部件)
- 列出可用的小部件。
- 用户可以激活小部件并在边栏中使用它们。
我的步数:
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 Pattern
或 Event Dispatcher Pattern 对于插件系统
安装插件时,不要忘记保存到数据库中
而且,要列出可用的小部件,您只需要查询数据库哪些插件可用或已激活。
我在这里和 Google 搜索了这个主题,但我只找到了 PHP 框架的解决方案(例如,YII 和 Laravel)
我正在开发一个简单的 CMS,我想添加像 WordPress 一样的小部件系统(最近评论、类别小部件)
- 列出可用的小部件。
- 用户可以激活小部件并在边栏中使用它们。
我的步数:
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 Pattern 或 Event Dispatcher Pattern 对于插件系统
安装插件时,不要忘记保存到数据库中
而且,要列出可用的小部件,您只需要查询数据库哪些插件可用或已激活。