dynamic/viewable-dataobject

数据扩展,允许数据对象像页面一样轻松查看

安装次数: 11,415

依赖: 3

建议者: 0

安全性: 0

星标: 3

关注者: 6

分支: 9

开放性问题: 5

类型:silverstripe-vendormodule

2.0.0-beta2 2018-11-15 15:33 UTC

This package is auto-updated.

Last update: 2024-08-25 04:22:32 UTC


README

Build Status Scrutinizer Code Quality Code Coverage Build Status codecov

Latest Stable Version Latest Unstable Version Total Downloads License Monthly Downloads Daily Downloads

数据扩展,允许数据对象像页面一样轻松查看

要求

  • 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

而不是调用 renderrenderWithcustomizerenderWithLayout 可以传递一个布局模板列表和额外数据。

<?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。将使用数组中的第一个有效模板。