ricarca parziale

Ragazzi vorrei riutilizzare la pagina "Manage User" creata attraverso Gii, ovvero ho creato un utente gli ho assegnato la pagina

“Manage User” duplicata ovviamente rinominata aggiunta nel controller e quindi funzionante ma vorrei che l’utente vedesse

solo alcuni utenti e non tutti, quindi vorrei applicare un filtro su una colonna, è possibile?

Non serve duplicarla: quello che devi fare, è semplicemente modificare il controller in modo tale che dia alla stessa view un model differente.

Io per esempio, nel controller delle News, volevo apparissero tutte le news attive ed ho fatto in questo modo:




  public function actionIndex() {

    if (!Yii::app()->user->isGuest) {

      $dataProvider = new CActiveDataProvider('News');

    } else {

      $dataProvider = new CActiveDataProvider('News', array(

                  'criteria' => array(

                      'condition' => "attiva = 1 ",

                  ),));

    }

    $this->render('index', array(

        'dataProvider' => $dataProvider,

    ));

  }

E’ il bello dell’MVC: non serve modificare la view, ma solo il model o solo il controller.

Io nel controller ho questo e vorrei poter filtrare la colonna "company" con un valore…

e non capisco dove dovrei aggiungere il filtro alla colonna, intanto ti ringrazio per la tua pazienza e

sprattutto per la tua disponibilità.

public function actionAdmin()

{


	$model=new User('search');


	$model->unsetAttributes();  // clear any default values


	if(isset($_GET['User']))


		$model->attributes=$_GET['User'];





	$this->render('admin',array(


		'model'=>$model,


	));


}

allora nella User.php ho

public function search()

{


	// Warning: Please modify the following code to remove attributes that


	// should not be searched.





	$criteria=new CDbCriteria;





	$criteria->compare('id',$this->id);


	$criteria->compare('username',$this->username,true);


	$criteria->compare('password',$this->password,true);


	$criteria->compare('salt',$this->salt,true);


	$criteria->compare('email',$this->email,true);


	$criteria->compare('company',$this->company,true);


	$criteria->compare('profile',$this->profile,true);





	return new CActiveDataProvider(get_class($this), array(


		'criteria'=>$criteria,


	));


}

quindi ho pensato di modificare il controller con

public function actionAdminhold() {

$model=new User('search', array(


              'criteria' => array(


                  'condition' => "company = azienda ",


              ),));





	$this->render('adminhold',array(


		'model'=>$model,


	));

}

ma non cambia nulla…

Nel tuo caso, credo sia meglio mettere mano al metodo search.


public function actionAdmin()

{

$model=new User('search');

$model->unsetAttributes(); // clear any default values

if(isset($_GET['User']))

$model->attributes=$_GET['User'];


$this->render('admin',array(

'model'=>$model,

));

} 

Se noti questa action carica il model User con il parametro search. Non ne sono sicuro ma credo tu debba mettere mano a quello del tipo:


public function search()

{

// Warning: Please modify the following code to remove attributes that

// should not be searched.


$criteria=new CDbCriteria;


$criteria->compare('id',$this->id);

$criteria->compare('username',$this->username,true);

$criteria->compare('password',$this->password,true);

$criteria->compare('salt',$this->salt,true);

$criteria->compare('email',$this->email,true);

$criteria->compare('company',NOME_COMPAGNIA,true);

$criteria->compare('profile',$this->profile,true);


return new CActiveDataProvider(get_class($this), array(

'criteria'=>$criteria,

));

}

Ti faccio anche notare che


$criteria->compare('company',NOME_COMPAGNIA,true);

equivale a


'criteria' => array(

'condition' => "company = 'NOME_COMPAGNIA' ",

),

mhmhm non funziona…

Ok risolto grazie mille!!!

illuminante come al solito!

Ci posteresti qui la tua soluzione? Non per ficcare il naso nel tuo codice, ma per condividerla con chi arriverà qui a leggere questo post e potrà trovarla. Se sbirci tra gli utenti di questo forum, scopri che c’è una quantità enorme di persone che si registra, legge, e non scrive quasi mai un post. Per loro, dobbiamo preoccuparci di postare anche le nostre soluzioni così da aiutarli e dare il nostro supporto a tutti.

Si hai ragione!

Nel models ho inserito come mi avevi detto quel codice solo che non mi veniva perchè non era una costante ma era relativa all’utente con cui mi loggavo.

Ho risolto in questo modo…

public function searchhold()

{


	// Warning: Please modify the following code to remove attributes that


	// should not be searched.


	


	


	$ushold=$this->thisUser();


	$criteria=new CDbCriteria;





	$criteria->compare('id',$this->id);


	$criteria->compare('username',$this->username,true);


	$criteria->compare('password',$this->password,true);


	$criteria->compare('salt',$this->salt,true);


	$criteria->compare('email',$this->email,true);


	$criteria->compare('company',$ushold->company,true);


	$criteria->compare('profile',$this->profile,true);





	return new CActiveDataProvider(get_class($this), array(


		'criteria'=>$criteria,


	));


}

private function thisUser()

{


	$user=User::model()->find('LOWER(username)=?',array(strtolower(Yii::app()->user->name)));


	return $user;


}

Sicuro che non ti basti usare il codice Yii::app()->user per ottenere tutte le informazioni dall’utente corrente?

Ottimo suggerimento ci provo