2013-04-02 5 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, 
    )); 
} 

И позовите эту DataProvider в поставщике данных 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

Я должен добавить, что у вас есть опечатка .. is 'if (Yii :: app() -> user-> id == 1) {' .. еще раз спасибо –

0

или добавить в модель

public $visible = True; 

в поиске добавить, если переключатель или

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

в вашем GridView

...

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

...

0

Я решил эту задачу кондиционирования CDbCriteria следующим образом,

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

Спасибо всем.