2013-03-11 1 views
5

Ho una pagina di ricerca che passa i dati alla funzione di rendering:YII: trasmissione di dati a un widget da un controller?

public function actionIndex() { 

    $this->render(
    'searchResults', 
    array(
     'dataProvider' => $dataProvider, 
     'searchQuery' => $searchQuery, 
    ) 
); 
} 

Il problema è, ho anche bisogno di passare questi dati da qui a un widget che appare nella barra laterale. Il widget è attualmente visualizzata nel layout/main.php in questo modo:

<?php 
    $this->widget('searchSidebar', array(
     'id' => 'searchSidebar', 
    )); 
?> 

Come potrei fare per il passaggio di dati a questo widet dal controller senza dover rifare nuovamente la query?

+0

Forse si poteva guardare eventi Yii. Sembra che questo possa portarti dove vuoi andare: http://www.yiiframework.com/forum/index.php/topic/24316-using-yii-events/ –

risposta

3

dataProvider ha già tutti i dati inclusi con

$dataProvider->data 
$dataProvider->getData() 

Per posizionarlo nel layout principale è possibile creare un'altra variabile nel controller

class Controller extends CController 
{ 
    public $data_exchange=''; 
    ... 
} 

Sarà facile da manipolare in tutta il codice con $this->data_exchange simile a breadcrumbs nel layout principale

$this->widget('searchSidebar', array(
    'id' => 'searchSidebar', 
    'data' => $this->data_exchange 
    /* where $this refer to any class which extends Controller */ 
)); 

Nel codice visualizzazione definire i dati come:

$this->data_exchange = $dataProvider->data