есть ли возможность инициировать обновление кеша, если 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 сделает это за вас.
В случае, если кто-то еще столкнется с этим и не хочет использовать модуль StaticPublishQueue вместо StaticPublisher, это кажется возможным в 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, чтобы указать точные страницы, которые необходимо обновить.