質問

DELETEボタンは、CGgridView CButtonColumn(またはカスタム削除ボタンを作成する)でのみアクティブになっている(またはuser=='admin'またはstatus=='draft'の場合)に照らされます。何か案は?ありがとう!

役に立ちましたか?

解決

「Visible」パラメータを使用 -

 'buttons'=>array
    (
        'delete' => array
        (
            'label'=>'Delete',
            //other params
            'visible'=>!Yii::app()->user->checkAccess('admin'),
        ),
.

他のヒント

'visible'=>'$data->status=="draft" || Yii::app()->user->checkAccess("admin")'
.

PHP>= 5.3 の場合は、匿名関数を使用することもできます。

'visible'=>function($row, $data) {
    return Yii::app()->user->checkAccess('admin') || 'draft' == $data->status;
}
.

ZUUPSとしてMUKESH POSTでは、一重引用符を使用する必要があります。そして、Statusがモデルインスタンスのプロパティである場合には、user1584901が答えて正しいです。だから、

'visible'=>'$data->status=="draft" || Yii::app()->user->checkAccess("admin")',
.

が正しいです。 (下部の説明)

私はあなたができるいくつかの興味深いものを追加したいです。 たとえば、資産を持つユーザーを検討してください。この場合、削除ボタンをアセットがないユーザーにのみ追加します。

この場合は、などのユーザーモデルに関係を作成できます。

'haveAssets' = array(self::STAT,'Asset', 'asset_id','select'=>'1')
. ユーザーが資産がある場合は1を返します。 可視パラメータをとして定義します。
'visible' => '!$data->haveAssets',
.


これが(0x7FFFFFFFFの依頼されているとおり)このうち(0x7FFFFFFFFFで尋ねる)は、ボタン(RenderButton)をレンダリングする関数内でevaluateExpression関数に適用するように定義されている文字列を使用するためです。

から: https:// github.com/yiisoft/yii/blob/1.1.14/framework/zii/widgets/grid/cbuttoncolumn.php 337

protected function renderButton($id,$button,$row,$data)
    {
            if (isset($button['visible']) && !$this->evaluateExpression($button['visible'],array('row'=>$row,'data'=>$data)))
                      return;
. componentクラスで定義されている

https://github.com/yiisoft/yii/blob. /1.1.14/framework/base/ccomponent.php 行607

public function evaluateExpression($_expression_,$_data_=array())
    {
            if(is_string($_expression_))
            {
                    extract($_data_);
                    return eval('return '.$_expression_.';');
            }
            else
            {
                    $_data_[]=$this;
                    return call_user_func_array($_expression_, $_data_);
            }
    }
.

基本的に、evaluateExpression関数が変数$データ(問題の行のモデルインスタンスである)と$ ROW(extract関数を使用することによってすべてのもの)を使用可能にし、PHPとして文字列式を評価することです。コード。そのため、$ DATAまたは$ ROWへの言及は、このスコープのEvaluteExpression関数によって既に設定されている変数を使用します。 そのため、それぞれの行のそれぞれのモデルインスタンス($ data-> status、または$ Data-> EvaueSets)のそれぞれのモデルインスタンスを使用することができます。 文字列は、ボタンの可視性を判断するためのブール値を返す式であるべきです。

文字列を一重引用符で囲む必要がある理由は、二重引用符を使用している間、PHPは$で始まる文字列が変数であり、それをその変数値と置き換えるようにします。範囲では$ DATA変数が意味がない(または定義されている可能性がある)ので、エラーをスローしたり、誤って交換したりします。この動作をするのを防ぐための一重引用符を使用する。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top