Gabrov blogja

2009. június 24. szerda

Kohana dokumentáció – nézetek

Filed under: Kohana — Címkék: — Koga @ 14:59

Nézetek (Views) – Eredetiben

(Ha mélyebb információt szeretnél a nézetekről, nézd meg a View class dokumentációját.)

Áttekintés

A nézetek olyan fájlok, melyek adatokat jelenítenek meg az alkalmazásodban. Általában Html, Css és Javascript típusúak, de bármi lehet, amit szeretnél pl. XML vagy Json az Ajax kimenethez. A nézetek külön tartják az adatmegjelenítést az alkalmazás logikájától könnyebben újrahasznosítható és tisztább kódot eredményezve.

A nézetek maguk tartalmazhatnak kódot, ami segíti őket a kapott adatok megjelenítésében. Pl. ciklusban végiglépked egy tömb elemein, hogy mindegyik elemet egy új táblasorban írja ki. A nézetek ettől még rendes PHP fájlok. A nézetek a Controller névtérben hajtódnak végre és egy nézetben a hívó kontroller minden erőforrását elérheted a $this objektummal.

When this view is rendered….

Nézetek készítése

A nézeteket a views könyvtárban kell elhelyezni. A fájlnév a kiterjesztés nélkül a nézet neve. A nézet alkönyvtárba is helyezhető, de ekkor a hívásakor a könyvtár nevét is meg kell adni.

Példák

// Filename home.php
$view = new View('home');

// Filename list.php in sub-directory 'products'
$view = new View('products/list');

Nézetek betöltése

Háromféleképpen lehetséges egy nézetet betölteni. Fontos megjegyezni, hogy egy nézet példányosítása még nem jeleníti meg a nézetet. Ez csak a rendereléskor történik meg.

Új objektum

Új példány készítése a nézetből.

$view = new View('welcome');
Factory

A factory() static metódus használata. Ez lényegében ugyanaz, mint az új példány készítése kivéveit is immediately returned so method chaining is possible.

$view = View::factory('welcome');

Adatok átadása a nézetnek

Az adatokat a kontroller a nézetnek objektumon keresztül adja át.
Lássuk a kontrollert.

class Welcome_Controller extends Controller {

    function index() {
        // Load the view as an object
        $view = new View('yourview');

        // Adding variables to the object that will be displayed in the view
        $view->title   = "Welcome to Kohana !";
        $view->heading = "My Heading";
        $view->content = "My content here.";

        // Render the view
        $view->render(TRUE);
    }
}

Nézzük a nézet fájlt.

<html>
    <head>
        <title><?php echo $title;?></title>
    </head>
    <body>
        <h1><?php echo $heading;?></h1>
        <p><?php echo $content;?></p>
    </body>
</html>

Megjegyzés: tömbök használata (CodeIgniter stílus) is lehetséges a Kohanában, lásd az alábbi példákat.

Nézetek egymásba ágyazása.

Nézet beágyazása másik nézetbe.

// Example of code inside your Controller
$view = new View('template');

$view->header  = new View('header');
$view->content = new View('content');
$view->footer  = new View('footer');

$view->header->title     = 'Title of page';     // string for variable $title in view header.php
$view->content->heading  = 'Heading of your page'; // string for variable $heading in view content.php
$view->footer->copyright = 'Copyright';         // string for variable $copyright in view footer.php

$view->render(TRUE);

A template,php nézet.

<?php echo $header; ?>
<?php echo $content; ?>
<?php echo $footer; ?>

A header.php nézet.

<html>
<head>
	<title><?php echo $title; ?></title>
</head>

A content.php nézet.

<body>
	<h1><?php echo $heading; ?></h1>

A footer.php nézet.

	<?php echo $copyright; ?>
</body>
</html>

A kimenet.

<html>
  <head>
    <title>Title of page</title>
  </head>
  <body>
  <h1>Heading of your page</h1>
  Copyright
  </body>
</html>

Természetesen használhatók stíluslapok a nézetekben. Lehet, hogy helpereket is kell használnod a navigációhoz, dinamikus tartalmakhoz stb.
Megjegyzés: Nézd meg a Template_Controller-t, ami összefésüli a header.php-t és a footer.php-t egy fájlba.

Renderelés

Végrehajtja a render() metódust, ami indítja a megjelenítést.
1. példa – View példány megjelenítése

$view = new View('sample');
$view->render(TRUE);

2. példa – factory() megjelenítése

View::factory('sample')->render(TRUE);

Teljes példa

Kontroller: products.php

$products = array(
    array(
        'name' => 'Product1',
        'quantity' => '3'
    ),
    array(
        'name' => 'Product2',
        'quantity' => '7'
    )
);

$view = new View('products/list');
$view->title = 'Products';
$view->set('products', $products);
$view->render(TRUE);

A product adatok tömbben találhatóak. The products list view is loaded and the variables title and products are set. The view is rendered and outputted straight to the browser.
Nézet: products/list.php

<html>
<head>
    <title><?= $title ?></title>
</head>
<body>
    <h1><?= $title ?></h1>
    <table>
        <? foreach ($products as $product): ?>
            <tr><td><?= $product['name'] ?></td><td><?= $product['quantity'] ?></td></tr>
        <<? endforeach; ?>
    </table>
</body>
</html>

A title változó kiírva. A products tömb ciklusban kiírva.

Kimenet:

<html>
<head>
    <title>Products</title>
</head>
<body>
    <h1>Products</h1>
    <table>
        <tr><td>Product1</td><td>3</td></tr>
        <tr><td>Product2</td><td>7</td></tr>
    </table>
</body>
</html>

2 hozzászólás »

  1. Szia.
    Erdeklodve olvastam cikkeidet a Kohana rol. Sajnos eleg keves a magyar doksi, de meg az angol is neha hianyos. Tehat a kerdesem az lenne, ha pl egy dataGridnek kuldesz json adatot, azt egy nezeten keresztul viszed ki s ott alakitod at json -a vagy mar a kontrollerben adsz neki egy print json -t majd die() -t?
    Csak azert kerdem, mert a ZF ben elore vannak definialva a kulonboz taratalmu oldalak. Enn regebben mikor meg CI -ben dolgoztam adtam a kontrollerben egy print json majd die().
    Csunya megoldas volt de ment hiba nelkul :) .

    Hozzászólás by Gomby — 2009. június 29. hétfő @ 17:42

  2. Szia!
    Lehet mondani, kezdő php programozó vagyok. Csak most ismerkedem a keretrendszerekkel. Átfutottam a CakePhp-n és a CodeIgniteren és kikötöttem a Kohana-nál. Úgy gondoltam, hogy a legjobb, ha elkezdem lefordítani a dokumentációját, így sokat tanulhatok. A ZF-et nem ismerem. Kérdésedre így nem tudok válaszolni.

    Sokban hasonlít a Kohana a CI-hez, így lehet, hogy ugyanúgy megy.

    Hozzászólás by Koga — 2009. június 29. hétfő @ 21:23

RSS hírcsatorna a bejegyzéshez kapcsolódó hozzászólásokról. TrackBack URL

Szóljon hozzá most!

Powered by WordPress