DataObject が編集された場合、キャッシュの更新をトリガーする可能性はありますか? たとえば、News DataObject を更新すると、これらの NewsObject を表示しているページのキャッシュが更新されます。
どうもありがとう、フロリアン
DataObject が編集された場合、キャッシュの更新をトリガーする可能性はありますか? たとえば、News DataObject を更新すると、これらの NewsObject を表示しているページのキャッシュが更新されます。
どうもありがとう、フロリアン
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 モジュールについて説明しているこのブログ投稿もお読みください)
StaticPublisherQueueモジュールがそれを処理します。
他の誰かがこれに遭遇し、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 を使用して、更新する必要がある正確なページを指定します。