arillo / silverstripe-dataobject-preview
显示数据对象预览,类似于页面预览。
Requires
This package is auto-updated.
Last update: 2024-09-25 16:53:21 UTC
README
显示数据对象预览,类似于页面预览。适用于 GridField 和 ModelAdmin。仅适用于 Versioned DataObjects。
为了使预览功能正常工作,您需要在您的 DataObject 上实现 CMSPreviewable 接口,并声明 getMimeType、CMSEditLink 和 PreviewLink($action = null) 方法。
您还需要通过将适当的静态变量设置为 true 来声明此 DataObject 应在预览窗格中显示的阶段。
PreviewLink 是我们唯一感兴趣用于预览工作的链接。DataObjectPreviewController 将监听此链接,在您的主题/templates/* 目录中使用 MyDataObject.ss 模板渲染 MyDataObject。
由于激活此功能有点复杂,我们还需要为我们的 CustomModelAdmin 定义一个自定义模板。
需求
SilverStripe CMS ^4.0
对于此模块的 SilverStripe 3.x 兼容版本,请参阅 1 分支或 1.x 版本线。
安装
composer require arillo/silverstripe-dataobject-preview:2.0.*
示例
<?php namespace Arillo\DataObjectPreview\Models; use SilverStripe\ORM\CMSPreviewable; use SilverStripe\ORM\DataObject; class MyDataObject extends DataObject implements CMSPreviewable { ... private static $show_stage_link = true; private static $show_live_link = true; private static $extensions = array( Versioned::class ); private static $versioning = array( "Stage", "Live" ); public function PreviewLink($action = null){ return Controller::join_links(Director::baseURL(), 'cms-preview', 'show', urlencode($this->ClassName), $this->ID); } public function getMimeType() { return 'text/html'; } public function CMSEditLink(){ ... } ... }
如果我们的 CustomModelAdmin 看起来像这样
<?php namespace Arillo\DataObjectPreview\Admins; use Arillo\DataObjectPreview\Models\MyDataObject; class CustomModelAdmin extends ModelAdmin { private static $managed_models = array ( MyDataObject::class ); }
我们需要在 mysite/templates/Arillo/DataObjectPreview/Admins/Includes/CustomModelAdmin_PreviewPanel.ss 中创建相应的模板,内容从 silverstripe/cms 模块的 4.7.0 版本复制过来。(请注意,这可能会根据版本而变化,并且可能会随着时间的推移而更改。)
<div class="cms-preview fill-height flexbox-area-grow" data-layout-type="border" > <div class="panel flexbox-area-grow fill-height"> <div class="preview-note"> <span><!-- --></span><%t SilverStripe\CMS\Controllers\CMSPageHistoryController.PREVIEW 'Website preview' %> </div> <div class="preview__device"> <div class="preview-device-outer"> <div class="preview-device-inner"> <iframe src="about:blank" class="center" name="cms-preview-iframe" ></iframe> </div> </div> </div> </div> <div class="toolbar toolbar--south cms-content-controls cms-preview-controls" ></div> <div class="cms-preview-overlay ui-widget-overlay-light"></div> </div>
使用方法
默认情况下,数据对象预览将在模板文件夹中直接查找具有数据对象类名的模板。所以对于上面的示例,它将在 themes/yourtheme/templates/Arillo/DataObjectPreview/Models/MyDataObject.ss 中查找。如果您想自定义此行为,您可以在 DataObject 上实现自己的 renderPreview 方法。
namespace Arillo\DataObjectPreview\Models; class MyDataObject extends DataObject implements CMSPreviewable { ... public function renderPreview() { // this will look for themes/yourtheme/templates/Arillo/DataObjectPreview/Models/MyDataObject.ss return $this->renderWith(MyDataObject::class); } }
您可以通过将其放置在 themes/yourtheme/templates/PreviewDataObject.ss 或 mysite/PreviewDataObject.ss 来覆盖主模板。
- PreviewDataObject.ss -> MyDataObject 预览容器(类似于主 Page.ss)
由于 SilverStripe 4.11 支持更好的数据对象预览,您可能想通过此模块禁用旧代码注入。可以通过以下方式关闭:
SilverStripe\DataObjectPreview\Extensions\PreviewGridFieldDetailFormExtension:
inject_legacy_code: false
提示:如果您使用 silverstripe-gridfield-betterbuttons,可以禁用数据对象预览链接,因为它们不再需要。只需将其添加到您的 config.yml 中即可。
BetterButtonsActions:
edit:
BetterButtonFrontendLinksAction: false
versioned_edit:
BetterButtonFrontendLinksAction: false
变更日志
V 2.0.2
- 添加了 ModelAdmin 支持
V 2.0.0
- 将方法 previewRender 重命名为 renderPreview