View

View

Views bieten verschiedene Werkzeuge, welche das Generieren der Ausgabe vereinfachen. Dabei stehen verschiedene View-Typen zur Verfügung (z. B. HTML, CSV usw.), die für das jeweilige Ausgabe-Format optimiert sind. Das in diesem Kapitel Beschriebene gilt für alle View-Typen – die Beispiele werden aber alle anhand von Html-Views aufgezeigt. Mehr über die verschiedenen View-Typen findest du in den Unterkapiteln.

  1. Views definieren
  2. Templates
  3. Panels
  4. Meta

Views definieren

Views haben im Gegensatz zu normalen Klassen-Dateien eine erweiterte Dateiendung [type].php, werden aber vom n2n nicht anders behandelt. n2n stellt bereits die Typen "html", "xml", "csv" und "json" zur Verfügung. Fehlende View-Typen kannst du auch selbst entwickeln. Es empfiehlt sich, für Views einen eigenen Namespace anzulegen. Definieren wir also die View hello.html im Namespace atusch\view. Hierzu musst du im Ordner des entsprechenden Namespaces eine Datei hello.html.php anlegen:

<?php
    $msg = $view->getParam('msg');
?>
<h1>Hello</h1>
<p><?php $html->out($msg) ?></p>
$html->out() maskiert deine Ausgabe und wird im Kapitel HTML genauer erklärt.

Über ControllerAdapter::forward() kannst du eine View aufrufen:

class ExampleController extends ControllerAdapter {
    
    public function index(ParamGet $msg) {
        $this->forward('..\view\hello.html', array('msg' => $msg));
    }
}

Als ersten Parameter erwartet forward() den View-Namen relativ zum Controller-Namespace. Du kannst den View-Namen auch mit absolutem Namespace angeben, indem du ihm ein "\" voransetzt (z. B. \atusch\view\hello.html). Dies wäre zum Beispiel nötig, wenn du eine View eines anderen Moduls aufrufen willst. Als weitere Möglichkeit kannst du den View-Namen auch relativ zum Modul-Namespace angeben, indem du ihm ein "~" voransetzt (z. B. ~\view\hello.html). Über den zweiten Parameter kannst du ein Array mit Werten übergeben, auf die du in der View über $view->getParam() zugreifen kannst.

Auf dieselbe Weise kannst du mit $view->import() in Views weitere Views einbinden:

<div>
    <?php $view->import('foo.html', array('param' => 'foo')) ?>
</div>

Templates

Mit $view->useTemplate() kannst du das Template bestimmen, welches deine View umgeben soll. Die Anwendung unterscheidet sich dabei nicht von  $view->import():

<?php
    $view->useTemplate('template.html', array('heading' => 'Template Heading'));
?>
<h2>View Heading</h2>
<p>View Content</p>

Mit $view->importContentView() kannst du in template.html nun bestimmen, wo die View platziert werden soll.

<!DOCTYPE html>
<html>
    <head>
        <title>Example</title>
        <meta charset="utf-8" />
    </head>
    <body>
        <h1><?php $html->out($view->getParam('heading')) ?></h1>
        <div>
            <?php $view->importContentView() ?>
        </div>    
    </body>
</html>

Panels

Du kannst den Inhalt deiner View in verschiedene Panels aufteilen, welche in Templates an unterschiedlichen Orten ausgegeben werden können.

<?php
    $view->useTemplate('template.html');
?>

<h2>View Heading</h2>
<p>View Content</p>

<?php $view->panelStart('aside') ?>
    <h2>Aside Heading</h2>
    <p>Aside Content</p>
<?php $view->panelEnd() ?>

<?php $view->panelStart('aside2') ?>
    <h2>Aside 2 Heading</h2>
    <p>Aside 2 Content</p>
<?php $view->panelEnd() ?>

Nutze im Template  $view->importPanel(), um das jeweilige Panel auszugeben. Panels werden anhand ihres Namens identifiziert.

<!DOCTYPE html>
<html>
    <head>
        <title>Example</title>
        <meta charset="utf-8" />
    </head>
    <body>
        <h1>Example</h1>
        <div>
            <?php $view->importContentView() ?>
        </div>
        
        <aside>
            <?php $view->importPanel('aside') ?>
        </aside>
        
        <?php if ($view->hasPanel('aside2')): ?>
            <aside>
                <?php $view->importPanel('aside2') ?>
            </aside>
        <?php endif ?>
    </body>
</html>

Meta

In jeder View werden folgende Helper zur Verfügung gestellt, die über Variablen zugegriffen werden können:

Variable Typ
$view n2n\ui\view\View
$request n2n\http\Request
$response n2n\http\Response

Je nach View-Typ werden diese mit weiteren Helper ergänzt.

« Murl Caching »

comments_title

post_login_to_create

questions_title