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>
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
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