has_many 页面网格字段草稿阶段
has_many Page gridfield draft stage
我有一个数据Object Product
$has_many
ProductPages
。 MyObject()->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');
我有一个数据Object Product
$has_many
ProductPages
。 MyObject()->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');