it-swarm.com.de

Ändern Sie die Layoutdatei in einer Ansicht in Yii2

Ich mache ein kleines Projekt mit Yii2.

Angenommen, ich habe dasselbe Layout (Kopfzeile, Fußzeile) in einer Ansicht (z. B. site), außer einem login.php in dieser Ansicht. Ich möchte eine andere oder keine Kopf-/Fußzeile in dieser Datei. Was kann ich tun, um die Kopf-/Fußzeile nur aus dieser Ansichtsdatei zu entfernen.

Alles, was ich konnte, um das Layout in verschiedenen Ansichten zu ändern. Ist es möglich, das Layout einer Ansicht in einer einzelnen Datei zu ändern?

15
Moid Mohd

Innerhalb der relativen Aktion: 

public function actionYourAction($id)
{

    $this->layout = 'yourNewLayout';

    return $this->render('yourView', [
        'model' =>$model,
    ]);
}
28
scaisEdge

Ich bin ein wenig zu spät zur Party, aber Sie ändern Ihr Layout aus Ihrer Sicht heraus CAN. Sie müssen es nicht in Ihrem Controller deklarieren. Ich persönlich denke, dass es besser ist, es in der Ansicht zu tun, da man später leicht sehen kann, was los ist. Wenn Sie HTML-Änderungen vornehmen, gehen Sie in die Ansichtsdatei und können leicht erkennen, welches Layout verwendet wird. Wenn Sie dies in den Controller einfügen, verpassen Sie (oder jemand später) die Layoutänderung, die in die Aktion Ihres Controllers eingebettet ist.

Da $this sich auf Ihre Ansicht in Yii2 bezieht und nicht wie in Yii1 auf Ihren Controller, ist der alte $this->layout aus Ihrer Sicht nicht mehr funktionsfähig.

Jetzt verweisen Sie in Yii2 mit $this->context aus Ihrer Ansicht auf den Controller.

$this->context->layout = 'your-layout';
10
Wade

In meinem Projekt wollte ich zwei Layouts: eines für die Site und eines für die Webapp. Da die main.php-Datei das Standardlayout ist, habe ich ein site.php-Layout erstellt und am Anfang des siteControllers kurz nach der Klassendeklaration habe ich eingefügt

public $layout = 'site';

Das Ergebnis ist, dass nur die von siteController gerenderten Ansichten das site.php-Layout verwenden. Es hat für mich funktioniert.

5
xav

Ich bin auch ein bisschen spät zur Party, habe aber heute mit diesem Zeug zu kämpfen gehabt ... Ein eigenes Layout zu erstellen, nur weil ich die Fußzeile oder den Header überspringen möchte, scheint viel Code für wenig Gewinn zu sein. Wenn ich mich an das Hauptlayout halten kann, kann ich einfach den Controller und die gerade geladene Aktion Abrufen und habe diesen Weg ausgelassen (schreibe dies in main.php):

$contr   = Yii::$app->controller->id;
$action  = Yii::$app->controller->action->id;
$skipFooter = $contr == 'site' && $action == 'login'; //...or enter here   what U want

... und dann später:

<?php if (!$skipFooter): ?> //Never at login...
    <footer class="footer">
        <div class="container">
            <p class="pull-left">&copy; YourSite.com <?= date('Y') ?></p>

            <p class="pull-right"><?= Yii::powered() ?></p>
        </div>
    </footer>
<?php endif; ?>
0
Perry J