0

silverstripeバックエンドでは、ModelAdminを介して特定のPageTypeを管理しています。これまでのところ問題なく機能しています。私が理解できないのは、ページを保存するときに「公開」されるページを作成する方法だけです。

それが私のコードです:

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

現時点では、ModelAdminによって作成されたページがサイトツリーに表示されており、ドラフトモードになっていることがわかります。上記のコードを使用すると、次のエラーが発生します:... / framework / model/DataList.phpで最大実行時間が30秒を超えました

多くのthx、フロリアン

4

3 に答える 3

1

$this->doPublish();「最大実行時間を超えました」というメッセージが表示されるのは、を呼び出し$this->write();てからを呼び出すため$this->onAfterWrite();です。そして、そこにあなたの無限のループがあります。したがって、これを実行するonAfterWrite()か、実際にwrite()は機能しません

保存ボタンの代わりに保存と公開ボタンを表示するだけですが、言うのは簡単だと思います。ボタンを追加するのは実際にはほんの数行ですが、ボタンの指示どおりに機能する関数も提供する必要があります。

これは、モデル管理でページを適切に処理できる新しいモジュールを作成するための完璧な呼び出しのように聞こえます。私はSS2.4でこれを行い、SS3でそれを行う方法についてはかなり良い考えがありますが、今週は時間がないので、週末にシルバーストライプircチャネルで私を突いてください。週末に時間があるかもしれません。

于 2012-08-28T18:21:17.103 に答える
1

私は同じ必要性/不足を見つけました、そして私は私のために働くように思われる回避策を構築しました、多分それは役に立つかもしれません。

public function onAfterWrite()
{
if(!$this->isPublished() || $this->getIsModifiedOnStage())
{
    $this->publish('Stage', 'Live');
    Controller::curr()->redirectBack(); 
}
parent::onAfterWrite();
}
于 2012-11-15T10:00:25.700 に答える
1

のコンポーネントのアクションに公開ボタンを追加する関数を拡張ModelAdminおよび定義するクラスを作成します。updateEditFormGridFieldDetailFormGridField

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;
}

拡張機能が適用され、完了していることを確認してください。

または、 GitHubから必要なすべてのコードを取得することもできます。

于 2012-11-16T04:17:08.770 に答える