SilverStripe 2.4.7 を使用。
私はいくつかの検索を行いましたが、これに対する答えを見つけることができないようです。すべてのユーザーではなく、dataobjectmanager のポップアップ ウィンドウにチェックボックスを含めたい。
あるユーザー用と別のユーザー用の 2 つの個別のページがあり、チェックボックスは一方にのみ必要です。if ステートメントで十分だと思いました。すばやく簡単ですよね?
public function getCMSFields()
{
$categories = array("Morning","Afternoon", "Evening", "Night");
return new FieldSet(
new TextField('Title'),
new DatePickerField('Date', 'Date'),
new ImageField('Photo', 'Photo'),
new MoneyField('AdultPrice', 'Adult Price'),
new MoneyField('ChildPrice', 'Child Price'),
new DropdownField('Category', 'Choose a Category', $categories)
);
これは、ifステートメントアプローチでの私の試みです
if($this->ClassName == 'Movie'){
$films= DataObject::get('Films');
if (!empty($films)) {
// create an array('ID'=>'Name')
$map = $films->toDropdownMap('ID', 'Name');
$fieldset->push(new CheckboxSetField(
$name = "Films",
$title = "Select Films",
$source = $map
));
}
}
基本的にこれは、getCMSFields_forPopup 内で使用すると機能しますが、getCMSFields だけでなく、checkboxsetfield をドロップダウンに変更します。
編集
DOM ポップアップが DOM (DataObjectManager) を含むページのクラス名を持つことができないという事実のために、私のアプローチが機能しないことがわかりました。これは単純な継承の問題であり、これまで見たことがないなんて信じられません。元のクエリをどのように解決したかの詳細については、以下の回答を参照してください。