私はYii2を使用して小さなプロジェクトをしています。
ビューに同じレイアウト(ヘッダー、フッター)があります(たとえば、site
)がlogin.php
このビュー。このファイルに別のヘッダーまたはフッターがないことを希望します。このビューファイルからのみヘッダー/フッターを削除できますか?.
さまざまなビューでレイアウトを変更できました。ビューの単一ファイル内のレイアウトを変更することは可能ですか?
相対アクション内:
public function actionYourAction($id)
{
$this->layout = 'yourNewLayout';
return $this->render('yourView', [
'model' =>$model,
]);
}
私はパーティーに少し遅れましたが、あなたは[〜#〜] can [〜#〜]ビュー内からレイアウトを変更します。コントローラで宣言する必要はありません。個人的には、後で何が起こっているかを簡単に確認できるため、ビューで実行する方が良いと思います。 HTMLを編集する場合は、ビューファイルに移動し、使用しているレイアウトを簡単に確認できます。これをコントローラーに入れると、あなた(または後で誰か)がコントローラーのアクションにネストされたレイアウトの変更を見逃す可能性があります。
$this
はYii1のようにコントローラーではなくYii2のビューを参照するため、古い$this->layout
はビュー内からはもう機能しません。
Yii2では、$this->context
を使用してビューからコントローラーを参照します。
$this->context->layout = 'your-layout';
私のプロジェクトでは、サイト用とwebapp用の2つのレイアウトが必要でした。 main.phpファイルがデフォルトのレイアウトであるため、site.phpレイアウトを作成し、siteControllerの最初に、クラス宣言の直後に、
public $layout = 'site';
その結果、siteControllerでレンダリングされたビューのみがsite.phpレイアウトを使用します。それは私のために働いた。
私もパーティーに少し遅れていますが、今日このようなことに苦労しています...私にとって、フッターやヘッダーをスキップしたいという理由だけで別のレイアウトを作成することは、ほとんど勝てない多くのコードのようです。メインレイアウトに固執できる場合は、コントローラーと現在ロードされているアクションを取得し、この方法を省略できます(これをmain.phpに記述します)。
$contr = Yii::$app->controller->id;
$action = Yii::$app->controller->action->id;
$skipFooter = $contr == 'site' && $action == 'login'; //...or enter here what U want
...そしてその後:
<?php if (!$skipFooter): ?> //Never at login...
<footer class="footer">
<div class="container">
<p class="pull-left">© YourSite.com <?= date('Y') ?></p>
<p class="pull-right"><?= Yii::powered() ?></p>
</div>
</footer>
<?php endif; ?>