3

DataObject が編集された場合、キャッシュの更新をトリガーする可能性はありますか? たとえば、News DataObject を更新すると、これらの NewsObject を表示しているページのキャッシュが更新されます。

どうもありがとう、フロリアン

4

3 に答える 3

2

StaticPublishQueueモジュールを使用してできることは次のとおりです。NewsDataObject.php で:

function onAfterWrite() {
    parent::onAfterWrite();

    $url = array();
    $pages = $this->Pages(); //has_many link to pages that include this DataObject
    foreach($pages as $page) {
        $pagesAffected = $page->pagesAffected();
        if ($pagesAffected && count($pagesAffected) > 0) {
            $urls = array_merge((array)$urls, (array)$pagesAffected);
        }
    }
    URLArrayObject::add_urls($urls);
}

これは、DataObject を参照する各ページを取得し、そのすべての URL と関連ページ (そのページを参照する仮想ページなど) の URL を要求し、すべての URL を大きな配列にコンパイルしてから、その配列を静的ページに追加します。パブリッシュ キュー。影響を受けるすべてのページが再公開されるまで、キューは徐々に処理されます。

イベント システムを使用すると、再発行と再発行のトリガーとの間に抽象化のレイヤーを追加できますが、単純なものについては、必ずしもそれを使用する必要はありません。代わりに、キューにページを直接追加できます。( StaticPublishQueue モジュールについて説明しているこのブログ投稿もお読みください)

于 2013-10-24T08:54:03.583 に答える
0

StaticPublisherQueueモジュールがそれを処理します。

于 2013-10-15T05:03:27.460 に答える
0

他の誰かがこれに遭遇し、StaticPublisher の代わりに StaticPublishQueue モジュールを使用したくない場合は、StaticPublisher で可能であるように見えますが、次のように機能します。

function onAfterWrite() {
    parent::onAfterWrite();

    $urls = array();

    $pages = Page::get();
    foreach($pages as $page) {
        $urls[] = $page->Link();
    }

    $sp = new FilesystemPublisher();
    $sp->publishPages($urls);
}

最後の 2 行に注意し、Page::get を使用して、更新する必要がある正確なページを指定します。

于 2014-05-06T16:02:27.200 に答える