Есть ли способ создать «заполнитель» внутри основного файла представления для рендеринга других файлов вида с указанными данными с помощью Yii?Можно ли отображать визуализированную страницу с помощью Yii?
Я хочу индивидуально обрабатывать данные в контроллере, а затем помещать их в указанное место в файле вида перед рендерингом.
Вот виджет пример:
Виджет класс:
class MyWidget extends CWidget
{
public $someData;
public $mainData;
public function init()
{
}
public function run()
{
$this->render('mainView',array('data'=>$someData));
foreach($data as $dat)
{
if(dat["color"]=="red")
{
$display = 4;
}
else if(dat["color"]=="blue")
{
$display = 6;
}
etc....
//this is the fictional method for that purpose
$this->addToPage('mainView','subView','placeholderName',
array('display'=>$display,'mainData'=>$main));
}
}
}
MainView файл:
echo("<div class='someDesign'>");
echo($data);
$this->placeholder('placeholderName');
echo("</div>");
подпанель файл:
if($display>0 && $display<=4)
echo("<div class='dataColorG'>");
else if($display>0 && $display<=4)
echo("<div class='dataColorD'>");
echo $mainData;
echo("</div'>");
Решение, основанное на ответ Николы:
Класс виджета:
class MyWidget extends CWidget
{
public $someData;
public $mainData;
public function init()
{
}
public function run()
{
$output ="";
foreach($data as $dat)
{
if(dat["color"]=="red")
{
$display = 4;
}
else if(dat["color"]=="blue")
{
$display = 6;
}
//If it's a widget we need to use $this->controller->renderPartial() instead of $this->renderPartial()
$output.= $this->controller->renderPartial('subView',array('display'=>$display,'mainData'=>$main),true);
}
$this->render('mainView',array('subView'=>$output,'data'=>$someData));
}
}
Файл MainView:
echo("<div class='someDesign'>");
echo($data);
echo($subView); //the 'placeholder'
echo("</div'>");
Файл подпанель:
if($display>0 && $display<=4)
echo("<div class='dataColorG'>");
else if($display>0 && $display<=4)
echo("<div class='dataColorD'>");
echo $mainData;
echo("</div'>");
Спасибо за помощь. Да, я сказал «ранее сделанный файл», но это тоже нормально, если контроллер загружает основной вид, добавляет данные дескриптора в местозаполнитель (используя файл подзадачи), а затем отображает результат в браузере. Это тоже возможно? – Crabman
Да. Проверьте дополнение к ответу! – nazim
Еще раз спасибо! Еще один вопрос: в образце я использовал foreach для обработки массовых данных и добавлял каждый из них в основное представление с помощью _subview, и мне интересно, что мне нужно поместить foreach в mainView с обработкой ifs или возможно каким-то образом вызывать renderPartial из контрольного файла foreach, потому что я хочу, чтобы представления были простыми и ориентированными на дизайн, и я хочу обрабатывать такую обработку в контроллере. – Crabman