Content management system 控制器中的Silverstripe 3 doPublish

Content management system 控制器中的Silverstripe 3 doPublish,content-management-system,silverstripe,Content Management System,Silverstripe,在旧的silverstripe安装(2.4)中,我有一个小计数器功能,基本上如下所示: class Page_Controller extends ContentController { public function countUp(){ $this->Counter = $this->Counter+1; $this->writeToStage('Stage'); $this->publish("Stage", "Live"); }

在旧的silverstripe安装(2.4)中,我有一个小计数器功能,基本上如下所示:

class Page_Controller extends ContentController {
  public function countUp(){ 
    $this->Counter = $this->Counter+1;
    $this->writeToStage('Stage');
    $this->publish("Stage", "Live");
  }
}
我想把它移到三年级。 不知何故,它不再工作,计数器属性在数据库中永远不会更新。 有人知道为什么吗

亲切问候,,
Florian

1-该方法应该在Page类(模型)上,而不是控制器上。然后可以调用$this->data()->countUp();从页面_控制器类


2-您需要行$this->write();在$this->writeToStage('Stage')之前

还有一件奇怪的事。。。计数器在表格页_Live中更新,但不在第页中更新。我现在用不同的方法解决了相反的问题。。。我将计数保存在每个页面的一个单独的数据对象中,因为更新和发布页面总是会在页面版本中创建一个新版本。这仍然很奇怪:计数器是在表页面中更新的,而不是在页面中更新的(我想这是阶段)。如果我在CMS中编辑页面,然后显示表格页面的计数器值(0)。发布会用0覆盖页面\活动计数器。我看到函数$this->writeToStage('Stage');正在更新页表。但是如果添加了$this->write();在此之前,只需更新Page_Live。这同样适用于所有3个函数(write、writeToStage、publish)。功能错误?您的
writeToStage()/publish()
代码是正确的。但是这个方法应该在
页面
类上,而不是
页面(控制器
谢谢,最后我用了一点不同的方法解决了这个问题。我创建了一个“计数器”——与每个页面相关的数据对象。因此,在更新计数时,不会创建页面的新版本(因为对于页面,版本控制当然是激活的)。