2012-08-28 35 views
0

在銀條紋後端我通過ModelAdmin管理某些PageTypes。到目前爲止,這工作得很好,我唯一不知道的是如何在保存頁面時使頁面「發佈」。Silverstripe dopublish功能ModelAdmin託管頁面

那是我的代碼:

class ProjectPage extends Page { 
    public function onAfterWrite() { 
     $this->doPublish(); 
     parent::onAfterWrite(); 
    } 
} 

目前,我仍然可以看到在Sitetree中的ModelAdmin創建的頁面,我可以看到他們是在草稿模式。如果我使用上面的代碼我得到這個錯誤:在 ... /框架/型號超過30秒 最長執行時間/ DataList.php

許多THX, 弗洛裏安

+0

現在有一些模塊用於管理ModelAdmin中的頁面類型,例如, https://github.com/Little-Giant/silverstripe-catalogmanager – wmk

回答

1

爲什麼你的理由「超出最大執行時間」是因爲$this->doPublish();調用$this->write();,然後調用$this->onAfterWrite();。在那裏你有無盡的循環。 這樣算下來,在onAfterWrite()write()並未真正發揮作用

你應該只顯示保存&發佈按鈕,而不是保存按鈕 但我想它談何容易。 添加一個按鈕實際上只是幾行,但我們還需要提供按鈕所做的功能。

這聽起來像是創建一個允許在模型管理員中正確處理頁面的新模塊的完美要求。我已經在SS2.4中做到了這一點,並且我對SS3中的如何操作有了一個很好的想法,但本週沒有時間,週末在銀河系irc頻道上戳我,也許我有周末的時間。

+0

有一個模塊,這將是偉大的!我在2.4中使用了unclecheese中的'remodeladmin'方法;猜測事情應該爲3.0工作。有一個快速的看,並認爲這一個在這裏可能有助於添加「發佈/ unpublish」的行動:https://github.com/silverstripe/sapphire/pull/526 – schellmax

+0

你好!謝謝!另一件可以幫助我的事情是,在控制器中執行此操作時也可以獲取未發佈的頁面:$ projectPages = ProjectPage :: get(); – spierala

+0

這不是一個模塊,但請參閱[我的回答](http://stackoverflow.com/a/13410320/1017611)瞭解一個現成的擴展,它應該能夠滿足您的需求。 – drzax

1

我發現相同的需求/缺乏,我建立了一種解決方法,似乎對我有用,也許它可以是有用的。

public function onAfterWrite() 
{ 
if(!$this->isPublished() || $this->getIsModifiedOnStage()) 
{ 
    $this->publish('Stage', 'Live'); 
    Controller::curr()->redirectBack(); 
} 
parent::onAfterWrite(); 
} 
1

創建擴展ModelAdmin一個類,並定義一個updateEditForm功能的發佈按鈕在GridFieldGridFieldDetailForm組件添加到操作。

public function updateEditForm($form) { 

    if (! singleton($this->owner->modelClass)->hasExtension('Versioned')) return; 

    $gridField = $form->Fields()->fieldByName($this->owner->modelClass); 
    $gridField->getConfig()->getComponentByType('GridFieldDetailForm')->setItemEditFormCallback(function ($form) { 
     $form->Actions()->push(FormAction::create('doPublish', 'Save & Publish')); 
    }); 
} 

然後創建一個擴展GridFieldDetailForm_ItemRequest提供您的發佈按鈕操作處理程序類。

public function doPublish($data, $form) { 
    $return = $this->owner->doSave($data, $form); 
    $this->owner->record->publish('Stage', 'Live'); 
    return $return; 
} 

確保擴展已應用完成。

或者,你可以只grab all the code you need from GitHub