2017-08-21 17 views
1

私は$has_manyProductPagesのDataObject Productを持っています。 MyObject()->getComponents('SomePages')は、Productオブジェクトに関連付けられたすべてのライブページを返します。has_manyのページgridfieldドラフト段階

このオブジェクトに添付されているすべてのページ(Draft and Published)を知っておく必要があります。GridFieldのインライン編集(URLやタイトルなどの他のページプロパティの変更だけでなく、

私は実行して、すべてのドラフトProductPage Sを得ることができた:

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

これは、製品ページのデータリストを返しますが、私の関連する製品のコンテキストの知識がないと、私は[保存]をクリックしますしようとすると、何も起こりませんを意味します。

GridFieldにデータを埋め込むために$this->getComponents('ProductPages')を使用すると、フォームの送信時にすべての変更が正しく保存されますが、ページを公開しないとGridFieldから「削除」されます。

は、だから私の質問は、私は、オブジェクトの関連ページはまだ彼らのコンテキスト(すなわち、変更が正常に保存された)を意識しながら、私のGridFieldを移入持ってここに取ることができたアプローチで、基本的にはありますか?

私はこのサイト上のSS 3.1.5を実行していることは注目に値する=/

答えて

1

ふう、3.1.5はかなり古くなって、私は3.1.12で検索し、有益な何かを発見しました。

問題はVersioned DataExtensionが自動的に現在のステージをフィルタリングするSQLクエリを修正すること、です。また、どのページも異なるステータスを持つことができ、したがって異なるデータベーステーブルに存在することができます。幸いなバージョン管理はDataQueryパラメータをチェックすることができるので、このようなものはあなたを助けるかもしれない: `latest_versions「all_versions'`は私が`、探していたものではなかった」ながら

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

は、Versioned::augmentSQL()

+0

おかげで@wmkを参照してください。 「それは私のためにやったよ。乾杯。コードのコメントから – leomeloxp

+1

@leomeloxpは:かかわらず、彼らが特定の段階にあるかどうかの、最新バージョンのインスタンスを返します : 'latest_versionは一歩を持っています。これにより、「削除された機能を含むすべての機能を表示」 – wmk