2013-04-02 105 views
0

我在我的yii CGridview中有三行,並有兩種類型的用戶登錄。我必須根據用戶的類型隱藏三行中的一行。請幫助。Yii CGridview隱藏行

+1

網格視圖的數據通常來自數據提供者。根據登錄類型修改創建數據提供者或其數據源的行爲不同的代碼。 – DCoder

回答

1

使用條件語句是這樣的:

public function newsearch() 
{ 
    $id= Yii::app()->user->id; 
    if($id = Your conditon){ 
     $criteria=new CDbCriteria; 

     $criteria->compare('id',$this->id); 
     Your Criteria to display 
    } else { 
     $criteria=new CDbCriteria; 

     $criteria->compare('id',$this->id); 
     Your Criteria to display 
    } 
    return new CActiveDataProvider($this, array(
     'criteria'=>$criteria, 
    )); 
} 

,並呼籲該數據提供程序在你的GridView的數據提供商。

1
在模型中添加

公共靜態方法 例如:

class Post extends CActiveRecord { 

    public function tableName() { 

     return 'posts'; 
    } 

    public function rules() { 

     return array(); 
    } 

    public function attributeLabels() { 

     return array(); 
    } 

...

public static function rulesUser() { 
     if (Yii::app()->user->id = 1) { 
      return True; 
     } else { 
      return False; 
    } 
} 

添加在你的GridView的行:

$this->widget('zii.widgets.grid.CGridView', 
    array(
'id' => 'posts-grid', 
'dataProvider' => $model->search(), 
'filter' => $model, 
'emptyText' => '', 
'columns' => array(
     'id', 
     'title', 
     'post', 
     'date_create', 
        array(
        'name' => 'status', 
        'visible' => Posts::rulesUser(), 
        ) 
     array(
     'class' => 'CButtonColumn', 
     ), 
    ), 
    ) 
); 
+0

你能解釋一下嗎? –

+1

是的,我編輯答案。 –

+0

我必須補充說,你有一個錯字..是'if(Yii :: app() - > user-> id == 1){'..再次感謝 –

0

或添加模型

public $visible = True; 

在你搜索如果添加或你的GridView

切換

public function search() 
{ 
$criteria = new CDbCriteria; 
    ... 
    if (any if){ 
$this->visible = 1; 
    } 
return new CActiveDataProvider($this, array(
     'criteria' => $criteria, 
    )); 
} 

...

array(    
'name'  => 'value', 
'visible'=>$model->visible, 
) 

...

0

我已經通過調理解決的任務CDbCriteria如下,

if(!Yii::app()->session["admin"]) 
{ 
    $criteria->condition='t.unique_id!="i-8874c6e3"'; 
} 

謝謝大家。