has_many 页面网格字段草稿阶段

has_many Page gridfield draft stage

我有一个数据Object Product $has_many ProductPagesMyObject()->getComponents('SomePages') returns 与我的 Product object 关联的所有实时页面。

我需要知道附加到此 object 的所有页面(草稿和已发布),因为我想通过 GridField 内联编辑(以及更改其他页面)处理 un/publishing 它们URL 和标题等属性)。

我通过以下方式获得了所有草稿 ProductPage

$gridfieldList = Versioned::get_by_stage('ProductPage', 'Stage')
->filter(array(
  "ProductID" => $this->ID
));

这个 returns 产品页面的数据列表,但不知道我的关联产品上下文,这意味着当我尝试单击“保存”时,没有任何反应。

如果我使用 $this->getComponents('ProductPages') 填充 GridField,所有更改都会在提交表单时正确保存,但如果我尝试 un-publish 一个页面,它会从我的 "removed"网格字段。

所以我的问题基本上是,我可以在这里采用哪种方法让 Object 的关联页面填充我的 GridField,同时仍然知道它们的上下文(即成功保存更改)?

值得注意的是我在这个网站上 运行 SS 3.1.5 =/

哎呀,3.1.5 已经过时了,我刚刚在 3.1.12 中查找了一些有用的东西。

问题是,Versioned DataExtension 自动修改 SQL 查询以过滤当前阶段。并且任何页面都可以具有不同的状态,因此位于不同的数据库表中。幸运的是 Versioned 可以检查 DataQuery 参数,所以像这样的东西可能对你有帮助:

$this->MyRelation()
    ->setDataQueryParam('Versioned.mode', 'all_versions');

Versioned::augmentSQL()