bedezign / yii2-desktop
基于jqDesktop的Yii2组件
Requires
- yiisoft/yii2: dev-master
This package is not auto-updated.
Last update: 2024-09-14 16:55:27 UTC
README
多年前,Nathan Smith提出了一种jQuery/jQuery-UI的概念证明,这是一种在浏览器中运行的类似Windows桌面的功能。他称之为"jqDesktop"。
我非常喜欢它,可以想象它作为网站管理页面的一个非常好的工具。
我决定尝试将其与我选择的框架相结合,以便于使用。
还有很多工作要做,但到目前为止,它已经可以使用。你所要做的就是创建一个Desktop实例,并给它提供一些Application实例。默认情况下,它将在桌面上为它们创建图标。
每个Application都与一个URL相关联。当应用程序启动时,它将通过iframe加载实际的URL。
如果您向Desktop实例提供一个eventUrl,JavaScript部分将回发所有桌面相关更改到该URL。
如果您将此与桌面具有将自身序列化和从数组数据中恢复的能力结合起来,您可以做一些很酷的事情。
待办事项
显然有很多事情要做。原始的PoC包含像背景、菜单等东西。我的想法是实现类似MacOS的功能。
使用方法
一个可能的(非常基本的)配置
public function actionIndex()
{
echo $this->loadDesktop()->run();
}
public function actionDesktopEvent()
{
$desktop = $this->loadDesktop();
if ($desktop->event())
$_SESSION['desktop'] = serialize($desktop->toData());
}
public function loadDesktop()
{
if (!isset($_SESSION['desktop'])) {
// No saved version yet, create the desktop
$desktop = \Yii::createObject(['class' => '\bedezign\yii2\desktop\Desktop', 'id' => 'admin', 'eventUrl' => \yii\helpers\Url::to(['/admin/default/desktop-event'])]);
$desktop->registerApplication(\Yii::createObject(['class' => '\bedezign\yii2\desktop\Application', 'id' => 'testing', 'title' => 'Test Application', 'route' => '/admin/users']));
}
else
$desktop = \bedezign\yii2\desktop\Desktop::createFromData(unserialize($_SESSION['desktop']));
return $desktop;
}
就是这样。这会显示一个带有单个图标(默认图像)的桌面。当打开时,iframe将包含你的admin UsersController::actionIndex()返回的内容。
如果你启用了CSRF,你必须为桌面事件操作禁用它,因为它不会包含令牌并被阻止。
public function beforeAction($action)
{
if ($action->id == 'desktop-event') this->enableCsrfValidation = false;
return parent::beforeAction($action);
}
请注意,这没有定义图标,所以将包含默认图标。如果你想添加自定义图标,你只需要在应用程序创建时指定一个'icon' => '<image path>'
(或者在Icon
或GlyphIcon
的实例中),你就可以做到了。