イベント用の getCMSField_forpopup フォームが 1 つあります。そのイベントに複数の日付を与えるために、その中に別のポップアップを作成しました(has_many関係を使用)。イベント「A」に2つの異なる日付/時刻を指定し、イベント「A」を保存した後、メインのgetCMSField_forpopupを開いて別のイベント「B」の詳細を入力すると、実際にあった日付/時刻(complextablefield)がすでに表示されますイベント「B」ではなく、イベント A の詳細に表示されることを意味します。新しいイベントごとではなく、Aのみのものを見たい. どうすればそれを可能にできますか?
1 に答える
あなたの問題は、1 つのイベントの日付を入力することですが、すべてのイベントでこの日付を確認できますか?
私には、これは、現時点であなたのイベントにIDがないため、日付のクエリ「WHERE EventID = x」が機能しないか、イベントのIDなしで日付が保存されるように思えます
日付にイベント セットの ID があるかどうか、データベースを確認するだけです。
イベントの ID が 0 の場合、問題はイベント ID を保存していないことです。これは、次のいずれかを意味します。
- イベントを保存する前に日付を作成しました。この場合、解決策は日付を追加する前にイベントを保存することです。保存されていないときに日付フィールドを非表示にすることもできます。以下の $this->isNew() を参照してください。
- または、silverstripe が EventID の保存に失敗します。この場合、日付の getCMSFields_forPopup に隠しフィールドを追加してイベント ID を保存することで修正できますが、この ID をポップアップに取得するのは少し難しいでしょう。
これが問題でない場合、問題は、新しいイベントを作成するときに ID がないため、ID でフィルター処理できないことです。イベントの getCMSFields_forPopup 内でこれを行うだけで済みます。
if (!$this->isNew()) { // add your ComplexTableField for Dates here so it only // gets added if this record has already been saved }
しかし、実際には、ネストされた DataObjectManager (DataObjectManager 内の DataObjectManager) を使用することをお勧めします (YouTube のチュートリアルを参照してください: http://youtu.be/eeXOTlXFmQQ )。
イベントをすでに一度保存している場合は、日付の DataObjectManager のみが表示されます。それ以外の場合は、最初に保存する必要があることがユーザーに通知されます。また、日付にイベント ID を設定します
または、さらに良いことに、GridField を使用できる SilverStripe 3 にアップグレードすることもできます。GridField は、DataObjectManager よりも優れた機能を発揮し、見栄えもよくなります。