【问题标题】:silverstripe static publisher - pages affected by DataObject Changessilverstripe 静态发布者 - 受 DataObject 更改影响的页面
【发布时间】:2013-07-16 02:11:46
【问题描述】:

如果 DataObject 被编辑,是否有可能触发缓存更新? 例如更新新闻数据对象应该更新显示这些新闻对象的页面缓存。

多谢, 弗洛里安

【问题讨论】:

    标签: caching content-management-system silverstripe


    【解决方案1】:

    这是我可以使用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

    【讨论】:

      【解决方案2】:

      StaticPublisherQueue 模块将为您处理。

      【讨论】:

      • 谢谢!你了解自述文件吗?例如,我看不到如何创建 MyEventListener 的实现者。自述文件说要添加函数 Object#MyEvent(Event $event)。但是确切的语法在哪里以及是什么?我将此添加到 config.php: StaticPagesQueueEvent::register_event('NewsUpdateEvent', 'NewsUpdateEventListener');以及新闻数据对象: public function onAfterWrite() { parent::onAfterWrite(); StaticPagesQueueEvent::fire_event(new NewsUpdateEvent($this)); } 其余的我仍然在黑暗中。你还知道吗?谢谢!
      【解决方案3】:

      如果其他人遇到这种情况,并且不希望使用 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);
      }
      

      注意最后两行,并使用 Page::get 指定需要更新的确切页面。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-01-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-11-20
        • 1970-01-01
        相关资源
        最近更新 更多