我创建了另一个有3列的布局列,并且大部分时间都会呈现相同的信息,如果需要,它会更改,我已经在布局中创建了一个代码来完成我想要的工作做,但只是为了好奇,有可能渲染另一个控制器?
这是我的专栏/布局:
<?php
$this->beginContent('//layouts/main');
if(isset($_GET['user']))
$user = Users::model()->findByPk($_GET['user'])->attributes;
else
$user = Users::model()->findByPk(Yii::app()->user->getId())->attributes;
?>
<div class="col-md-3">
<div class="well well-success text-center">
<img src="<?php echo $this->renderImg($user['img_path']);?>" alt="User" class="img-rounded" width="90%" height="auto">
</div>
<div class="panel panel-success">
<div class="panel-heading">
<h2><?php echo $user['nombre']; ?></h2>
</div>
<div class="panel-body">
<?php echo $user['bio']; ?>
</div>
</div>
</div>
<div id="content" class="col-md-6">
<?php echo $content; ?>
</div><!-- content -->
<div class="col-md-3">
<div class="user">
<div class="well text-center">
<a href="#a">
<img src="<?php echo Yii::app()->request->baseUrl;?>/images/1D3.jpg" class="img-rounded" width="90%" height="auto">
</a>
</div>
<div class="panel-info panel">
<div class="panel-heading">
Anuncio del Restaurante
</div>
<div class="panel-body text-justu">
Lorem ipsum dolor sit amet, consectetur
adipisicing elit. Enim pariatur aliquid a nemo soluta dignissimos
minus accusamus porro natus autem cum error odio exercitationem
quidem veritatis itaque quas, laudantium ipsam!
</div>
</div>
</div>
<?php
$this->beginWidget('zii.widgets.CPortlet', array(
'title'=>'Operations',
));
$this->widget('zii.widgets.CMenu', array(
'items'=>$this->menu,
'htmlOptions'=>array('class'=>'operations'),
));
$this->endWidget();
?>
</div>
</div>
<?php $this->endContent(); ?>
这是一项正在进行中的工作,我想在我的第一个div.col-md-3中使用“此代码”,因为你可以看到我已经在那里制作了代码..
我希望调用的控制器(不同)将执行此操作:
public function actionPreview($id)
{
$model = $this->checkUser($id);
$this->renderPartial('preview', array(
'model'=>$model
));
}
并且此操作的视图将包含以下代码:
<div class="well well-success text-center">
<img src="<?php echo $this->renderImg($model->img_path);?>" alt="User" class="img-rounded" width="90%" height="auto">
</div>
<div class="panel panel-success">
<div class="panel-heading">
<h2><?php echo $model->nombre; ?></h2>
</div>
<div class="panel-body">
<?php echo $model->bio; ?>
</div>
</div>
就像位于布局中的第一个div一样。
我只是为了好奇而提出这个问题,我并不急于想要练习更多编码,如果有办法可以做到这一点,也许其他人会觉得这很有用
答案 0 :(得分:1)
重新阅读此http://www.yiiframework.com/doc/guide/1.1/en/basics.controller
在控制器中定义另一个动作
class PostController extends CController
{
public function actions()
{
return array(
'edit'=>'application.controllers.post.UpdateAction',
);
}
}
之后你可以在你的行动中像(AFAIK)那样召唤它
$this->edit();
因此,您应该执行独立操作以使其呈现。另请阅读有关renderPartial()
和widgets
的信息,也可以为您提供帮助。另一种方法是创建一个可以呈现所需的组件,但它看起来像Yii::app()->myComponent->getSomeHtml()
。
所以你可以用很多东西来做你想要的。
您也可以在布局上执行三个$content
变量。通过abstractController,您可以在每个控件中创建任何数据。在布局中需要加载抽象控制器的基础,在主控制器类中,您将选择将在每列中呈现的操作(这里您可以使用我之前展示的任何解决方案),您将获得任何自定义的列数。 ..
<强> ADDED 强>
class ControllerAbstract extends CController
{
public $layout = 'default';
public function setLayout($sLayout)
{
$this->layout = $sLayout;
return $this;
}
}
class Controller extends ControllerAbstract
{
public function actionIndex()
{
$this->setLayout('column_three');
// or without method
// $this->layout = 'column_three';
$aData = array(
'column1' => $this->getHtmlColumn(1),
'column2' => $this->getHtmlColumn(2),
'column3' => $this->getHtmlColumn(3),
);
$this->render('index', $aData);
}
public function getHtmlColumn($iType)
{
// here i won't show how call standalone action - read yii manual
$sHtml = '';
switch ($iType) {
case 1:
// here call some functions to get html
$sHtml = '1';
break;
case 2:
// here call some functions to get html
$sHtml = '2';
break;
case 3:
// here call some functions to get html
$sHtml = '3';
break;
default:
$sHtml = 'incorrect input, no data';
break;
}
return $sHtml;
}
}
也读这个(由yii原生) http://www.yiiframework.com/wiki/28/how-to-implement-multiple-page-layouts-in-an-application/