Вот что я мог бы сделать, используя модуль 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-адресов в большой массив, а затем добавляет этот массив в статическую очередь публикации. Очередь будет постепенно обрабатываться до тех пор, пока все затронутые страницы не будут переизданы.
Система событий позволяет добавить слой абстракции между повторной публикацией и триггерами для повторной публикации, но для чего-то простого вам необязательно использовать его. Вместо этого вы можете напрямую добавлять страницы в очередь. (Возможно, вам также понравится это прочитать blog post describing the StaticPublishQueue module)
thx! вы понимаете readme? например, я не вижу, как создать реализатор MyEventListener. readme говорит добавить функцию Object # MyEvent (событие $ event). Но где и что такое синтаксис? Я добавил это в config.php: StaticPagesQueueEvent :: register_event ('NewsUpdateEvent', 'NewsUpdateEventListener'); и что в новостях DataObject: public function onAfterWrite() { parent :: onAfterWrite(); StaticPagesQueueEvent :: fire_event (новый NewsUpdateEvent ($ this)); } с остальными Я все еще в темноте. Вы знаете больше? спасибо! – spierala