Gridview Yii2 Basic-如何调用要在选项卡内显示的视图
我希望有人能帮我解决这个问题。 在我的视图中,我正在应用TabsX::widget,希望稍后我可以在每个选项卡中显示视图。以下是视图中显示的选项卡的代码:Gridview Yii2 Basic-如何调用要在选项卡内显示的视图,gridview,yii2,tabs,php-7,Gridview,Yii2,Tabs,Php 7,我希望有人能帮我解决这个问题。 在我的视图中,我正在应用TabsX::widget,希望稍后我可以在每个选项卡中显示视图。以下是视图中显示的选项卡的代码: <?= TabsX::widget( [ 'items'=>[ [ 'label'=>
<?= TabsX::widget(
[
'items'=>[
[
'label'=>'<i class="fas fa-home"></i> Home',
'content'=>'$content1',
'active'=>true
],
[
'label'=>'<i class="fas fa-user"></i> Profile',
'content'=>'$content2',
// 'linkOptions'=>['data-url'=>\yii\helpers\Url::to(['/site/tabs-data'])]
],
[
'label'=>'<i class="fas fa-list-alt"></i> Menu',
'items'=>[
[
'label'=>'Option 1',
'encode'=>false,
'content'=>'$content3',
],
[
'label'=>'Option 2',
'encode'=>false,
'content'=>'$content4',
],
],
],
],
'position'=>TabsX::POS_ABOVE,
'encodeLabels'=>false
]
) ?>
您可以轻松地使用。就在您拥有的地方,'content'=>“$content”
将其更改为:
'content'=> Yii::$app->controller->renderPartial("@frontend/views/tabs/mytab")
注:您知道您可以将@frontend/views/tabs/mytab
更改为要显示的视图地址。我的建议是将它们加载到主控制器中,在那里您调用操作,该操作使用renderjax()
方法加载选项卡视图
此方法将内容加载为渲染(包含所需的所有资源),但不包含布局
因此,在结束时,动作看起来像:
public function actionTabs(){
$tab1 = $this->renderAjax('tab1');
$tab2 = $this->renderAjax('tab2');
$tab3 = $this->renderAjax('tab3');
return $this->render('tabs', [
'tab1' => $tab1,
'tab2' => $tab2,
'tab3' => $tab3
]
}
没必要这么复杂地称呼它。在视图模板中,您可以使用完全相同的结果执行$this->渲染(@frontend/views/tabs/mytab”)
。控制器的renderPartial
方法只是该方法的包装,如果您需要渲染没有布局的视图,可以在控制器内部使用。@MichalHynčica请参阅yii2
的文档,您可以看到差异。如果只执行渲染
操作,您的资产将与模板一起再次加载。它们不会再次加载。在视图中,模板$this->render()
不调用控制器的render
方法,而是yii\base\view::render()
。这正是我们要做的。这篇关于视图的文章中也有描述。
public function actionTabs(){
$tab1 = $this->renderAjax('tab1');
$tab2 = $this->renderAjax('tab2');
$tab3 = $this->renderAjax('tab3');
return $this->render('tabs', [
'tab1' => $tab1,
'tab2' => $tab2,
'tab3' => $tab3
]
}