Технический вопрос...

Изучаю пример создания блога в yii.

Имеем такую вот последовательность действий:

1.

[b]$dataProvider=new CActiveDataProvider(‘Post’);

    $this->render('index',array('dataProvider'=>$dataProvider,)


                 );[/b]

Здесь все относительно ясно - представление index рендится множеством записей таблицы Post.

По видимому, функция render() сама организовывает цикл на множестве записей, а может и не сама,

пока это не важно для понимания.

2. Открываем представление index:

[b]<?php $this->widget(‘zii.widgets.CListView’, array(‘dataProvider’=>$dataProvider,‘itemView’=>’_view’,)

               ); ?&gt;[/b]

Здесь виджету передается переменная $dataProvider и уж он точно организовывает цикл по множеству

записей, каждую из которых выводит в предварительный шаблон используя представление _view.

3. Открываем представление _view:

[b]<b><?php echo CHtml::encode($data->getAttributeLabel(‘id’)); ?>:</b>

&lt;?php echo CHtml::link(CHtml::encode(&#036;data-&gt;id), array('view', 'id'=&gt;&#036;data-&gt;id)); ?&gt;


&lt;br /&gt;[/b]

Понятно, что в представление _view для поступившей на вход конкретной записи таблицы Post

формируется отображение для браузера типа-

атрибут1 = значение

атрибут2 = значение

Ясно, что getAttributeLabel() - родительский метод модели Post,

а $data - представляет очередной экземпляр записи.


[color="#FF0000"][b]Вопрос такой - где происходит определение переменной $data, т.е. кто и где

ее вводит и присваивает ей в качестве значения экземпляр записи таблицы Post ?[/b]

[/color]

Эта переменная принадлежит контроллеру PostController, но где она получает значение ?

в файле CListView.php

там, где public function renderItems() ?

А зачем тебе это, если не секрет?

Согласен с Mougrim. Зачем? По крайней мере, посетители форума не обязаны знать всей внутреннеей работы виджета. Если вам интересно - откройте файл “framework/zii/widgets/CListView.php” и изучайте :)

Не секрет.

Пытаюсь сформировать для себя более/менее логически завершенную

картину работы yii. А поскольку багаж мой весьма скуден, часто и густо методы/конструкции,

применяемые создателями yii, ставят меня в тупик.

В данном случае, будто с неба упала переменная $data, да еще и со значением равным

экземпляру записи.

Сейчас вот, наконец, сообразил, что этот вот текст-

<b><?php echo CHtml::encode($data->getAttributeLabel(‘id’)); ?>:</b>

<?php echo CHtml::link(CHtml::encode($data->id), array(‘view’, ‘id’=>$data->id)); ?>

<br />

принадлежит методу $this->widget(…), как и сама переменная $data.

А поскольку виджету передается такая вот информация [b]‘dataProvider’=>$dataProvider

[/b], то, разумеется, он может присвоить переменной $data значение равное экземпляру записи.

Вот собственно и все. Ничего в вопросе военного нет - этот вопрос, скорее грамматический чем семантический.