0

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) を含むページのクラス名を持つことができないという事実のために、私のアプローチが機能しないことがわかりました。これは単純な継承の問題であり、これまで見たことがないなんて信じられません。元のクエリをどのように解決したかの詳細については、以下の回答を参照してください。

4

1 に答える 1

0

結局、答えは非常に単純でした。私は次のことをしました、そして誰かがこれが役に立つと思うことを願っています。

通常どおり、ページにチェックボックスセットを作成します

if(Permission::check("ADMIN")){
        if (! empty($values)) 
        {
            $checkBox = new CheckboxSetField(                                           
                $name = "Values",
                $title = "Select Value",
                $source =  $values
            );
            $fieldset->push($checkBox);
        }
    }

Permission :: check( "ADMIN")を指定したifステートメントは、管理者がログインしているかどうかを確認し、ログインしている場合にのみチェックボックスセットを表示します。

また、このメソッドに$ fieldset-> pushを含めて、cmsに追加する必要があります。ADMINは、セキュリティパネルで作成した任意のユーザーグループに変更できるため、これは適応可能なアプローチです。

私はこれが私にとって最良の方法だと思いましたが、誰かがそれを改善したり、より良い解決策を提供したりできるなら、私はそれについて聞いてみたいです。

于 2012-10-25T12:10:34.190 に答える