dynamic / viewable-dataobject
数据扩展,允许数据对象像页面一样轻松查看
2.0.0-beta2
2018-11-15 15:33 UTC
Requires
- silverstripe/recipe-cms: ^1.0 || ^4.0
- silverstripe/vendor-plugin: ^1.0
Requires (Dev)
This package is auto-updated.
Last update: 2024-08-25 04:22:32 UTC
README
数据扩展,允许数据对象像页面一样轻松查看
要求
- SilverStripe ^4.0
安装
composer require dynamic/viewable-dataobject
在 config.yml 中
MyDataObject: extensions: - Dynamic\ViewableDataObject\Extensions\ViewableDataObject
示例用法
在您希望将其视为页面的数据对象上
<?php use Dynamic\ViewableDataObject\VDOInterfaces\ViewableDataObjectInterface; class MyDataObject extends DataObject implements ViewableDataObjectInterface { public function getParentPage() { return MyDisplayPage::get()->first(); } public function getViewAction() { return 'myobject'; } }
在您希望查看数据对象的 Page_Controller 上
<?php use SilverStripe\Control\HTTPRequest; use SilverStripe\View\ArrayData; class MyDisplayPageController extends \PageController { public function myobject(HTTPRequest $request) { $urlSegment = $request->latestParam('ID'); if (!$object = MyDataObject::get()->filter('URLSegment', $urlSegment)->first()) { return $this->httpError(404, "The object you're looking for doesn't seem to be here."); } return $this->customise(new ArrayData([ 'Object' => $object, 'Title' => $object->Title, 'MetaTags' => $object->MetaTags(false), 'Breadcrumbs' => $object->Breadcrumbs(), ])); } }
控制器扩展
将控制器扩展添加到类中将允许使用自定义布局模板。
在 config.yml 中
MyControler: extensions: - Dynamic\ViewableDataObject\Extensions\ControllerExtension
而不是调用 render
,renderWith
或 customize
;renderWithLayout
可以传递一个布局模板列表和额外数据。
<?php use SilverStripe\Control\HTTPRequest; class MyDisplayPageController extends \PageController { public function myobject(HTTPRequest $request) { $urlSegment = $request->latestParam('ID'); if (!$object = MyDataObject::get()->filter('URLSegment', $urlSegment)->first()) { return $this->httpError(404, "The object you're looking for doesn't seem to be here."); } return $this->renderWithLayout([ MyDataObject::class, MyDisplayPage::class, ], [ 'Object' => $object, 'Title' => $object->Title, 'MetaTags' => $object->MetaTags(false), 'Breadcrumbs' => $object->Breadcrumbs(), ]); } }
renderWithLayout
将在模板列表末尾添加 \Page::class
。将使用数组中的第一个有效模板。