【问题标题】:SilverStripe canCreate on an ExtensionSilverStripe 可以在扩展上创建
【发布时间】:2016-11-09 13:22:48
【问题描述】:

对于必须始终在网站上的页面(只有 1 个,而不是更多,例如主页),我想进行扩展。该页面应该在我运行 dev/build 时创建,并且无法在 CMS 中创建、删除、取消发布或存档。不过可以编辑。

除了canCreate 函数外,一切似乎都运行良好。似乎这个函数在 CMS 上时并没有做太多(n)(数据)扩展。当我在 .../admin/pages/add 上时,我仍然可以根据需要多次创建页面。

如果我将 canCreate 移动到 HomePage 类,它确实有效。但我希望它在我的扩展中:-)

class OnePage extends DataExtension
{
    public function requireDefaultRecords()
    {
        if($this->canCreate()) {
            $page = $this->owner;

            $page->Title = $this->owner->className;
            $page->write();
            $page->publish('Stage', 'Live');
            $page->flushCache();
        }
    }

    public function canCreate($member = null)
    {
        return $this->owner->get()->count() == 0;
    }

    public function canDeleteFromLive($member = null)
    {
        return false;
    }

    public function canArchive($member = null)
    {
        return false;
    }
}


class HomePage extends Page
{
    private static $extensions = [
        'OnePage'
    ];
}

我这样做是正确的还是我错过了什么?

编辑

canCreate 方法效果很好,我可以这样解决;

class HomePage extends Page
{
    public function canCreate($member = null)
    {
        return $this->get()->count() == 0;
    }
}

这有预期的效果,就像一个魅力。但是,问题在于将canCreate 方法放入扩展中。这应该也行,对吧?

【问题讨论】:

    标签: php silverstripe


    【解决方案1】:

    好吧,$this->owner->get() 行不通。 $this->owner 始终返回实际对象,而不是 DataList。它应该像这样工作:

    public function canCreate() {
    
        $className = $this->owner->ClassName;
    
        return $className::get()->count() == 0;
    }
    

    顺便说一句:如果您打算发布此模块,请考虑另一个名称,我已经发布了 https://github.com/wernerkrauss/silverstripe-onepage/ 用于使用 SiteTree 制作简单的单页站点

    【讨论】:

    • 感谢您的回复,但get 功能确实有效。它是DataObject 上的method。它返回一个 DataList,所以你能在你的答案中改变它吗?除此之外,我不打算发布它,只是将它用于我自己的。这个答案并没有真正回答我的问题,因为我说过 canCreate 函数确实有效,如果你将它移动到实际的 HomePage 类
    • get 是一个静态方法,我怀疑你可以直接从扩展中调用它。
    • 将静态方法作为非静态方法调用is possible试试看。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多