9 Nézetek

Bevezetés

A Nézet egy oldal sablonja, általában az esemény (action) alapján elnevezve. Például a PostsController::add() nézete itt lenne megtalálható: /app/views/posts/add.thtml. A Cake nézetek sima PHP fájlok, szóval bármilyen PHP kódot használhatsz bennük. Bár a legtöbb nézet fájlod leginkább HTML kódot fog tartalmazni, azért ne feledd, hogy a nézet bármilyen módon ábrázolhat egy bizonyos adathalmazt, akár XML, képek, stb. formában is.


A nézet sablonban hozzáférhetsz a hozzátartozó modell adataihoz. A modell adatai egy $data nevű tömbben érhetőek el. Ezen felül bármilyen extra adat, amit a nézetnek a set() függvénnyel adtál át a vezérlőben, szintén elérhető.


Egy HTML segítő (helper) minden nézetből automatikusan elérhető, hisz a nézetekben ez a leginkább használt segítő. Ez nagyon hasznos űrlapok készítésénél, beleértve a szkripteket és egyéb médiákat, valamint link készítésénél és az űrlap ellenőrzésénél. A további részleteket megtalálod a Segítők fejezetben.


A legtöbb nézetekben használható függvényt ilyen segítők szolgáltatják. A Cake rengeteg segítővel érkezik, és te is megírhatod a sajátodat. Mivel a nézeteknek nem szabadna semmiféle logikát tartalmazniuk, nincs túl sok közvetlenül használható (publikus) függvény a nézet osztályban. Egy hasznos azonban akad, a renderElement(), amit a következő részben tárgyalunk részletesebben.


Oldaltervek (Layouts)

Az Oldalterv tartalmazza az összes megjelenítéssel kapcsolatos kódot, ami egy nézet köré épül. Bármi, amit minden egyes nézetedben látni szeretnél, az Oldaltervbe kell legyen pakolva.


Az Oldalterv fájlok itt találhatóak: /app/views/layouts. A Cake alapértelmezett Oldaltervét felül lehet bírálni a /app/views/layouts/default.thtml módosításával. Amint az alapértelmezett Oldalterv elérhető, a vezérlő nézetének kódja ebbe kerül, amikor az oldal generálásra megtörténik.


Amikor egy Oldaltervet készítesz, a Cake-nek tudnia kell, hogy hova tegye ezen belül a vezérlő a nézet kódját. Szóval bizonyosodj meg róla, hogy az Oldalterved tartalmazza a $content_for_layout (és esetleg a $title_for_layout) változókat. Íme egy példa:

<!-- ha azt akarod, hogy valamifele menu megjelenjen minden egyes nezetben, akkor azt ide ird -->
<div id="header">
    <div id="menu">...</div>
</div>

<!-- azt akarom, hogy a nezetem itt jelenjen meg -->
<?php echo $content_for_layout ?>

<!-- tegyunk egy footer-t minden egyes oldalra -->
<div id="footer">...</div>

</body>
</html>
  1. <!-- ha azt akarod, hogy valamifele menu megjelenjen minden egyes nezetben, akkor azt ide ird -->
  2. <div id="header">
  3. <div id="menu">...</div>
  4. </div>
  5. <!-- azt akarom, hogy a nezetem itt jelenjen meg -->
  6. <?php echo $content_for_layout ?>
  7.  
  8. <!-- tegyunk egy footer-t minden egyes oldalra -->
  9. <div id="footer">...</div>
  10. </body>
  11. </html>

Az Oldalterv címét a legegyszerűbb a vezérlőben beállítani, a $pageTitle változót használva.

{
    function viewActive()
    {
        $this->pageTitle = 'Aktiv felhasznalok listaja';
    }
}
  1. {
  2. function viewActive()
  3. {
  4. $this->pageTitle = 'Aktiv felhasznalok listaja';
  5. }
  6. }

Annyi Oldaltervet készíthetsz a jó kis Cake programodhoz, amennyit csak szeretnél - csak rakd be mindet a app/views/layouts könyvtárba. Ezek után pedig a vezérlőben kapcsolgass köztük a vezérlő $layout változóját, vagy a setLayout() függvényt használva.


Például, ha weboldalam egy része magában foglal egy kisebb reklámcsíkot, készíthetek neki egy kisebb hirdetési felületet - és megadhatom ezt, mint az Oldalterv a vezérlő összes eseményére valahogy így:

var $layout = 'default_small_ad';
  1. var $layout = 'default_small_ad';

Alapelemek

Sok alkalmazás apróbb prezentációs kódot tartalmaz, amit oldalról-oldalra meg kell ismételni, néha az Oldalterv más és más részén. A Cake segítségével ezeket az ismétlődő kódrészleteket könnyedén lehet kezelni. Az ismétlődő, többször használatos részeket alapelemeknek nevezzük. Reklámok, segítő szövegek, navigációs elemek, extra menük és callout(?)-ok gyakran vannak Cake alapemekként megvalósítva. Egy alapelem végülis csak egy mini-nézet, amit a többi nézetben fel lehet használni.


Az alapelemek a /app/views/elements/ könyvtárban találhatóak, és .thtml a kiterjesztésük.


Egy alapelemnek kiinduláskor nincs hozzáférése semmilyen adathoz. A szükséges adatokat egy hash-tömbként adhatjuk át neki.


Alapelem hívása paraméterek nélkül

<?php echo $this->renderElement('helpbox'); ?>
  1. <?php echo $this->renderElement('helpbox'); ?>

Alapelem hívása adatokkal

<?php echo
$this->renderElement('helpbox', array("helptext" => "Oh, this text is very helpful."));
 ?>
  1. <?php echo
  2. $this->renderElement('helpbox', array("helptext" => "Oh, this text is very helpful."));
  3. ?>

Az alapelem-ben az átadott változókat a hash kulcsainak segítségével érhetjük el (kb. úgy, mint ahogy a vezérlő set() függvénye működik a nézetekkel). A fenti példában a /app/views/elements/helpbox.thtml használhatja a $helptext változót. Persze sokkal értelmesebb lenne inkább egy tömböt átadni...


Az alapelemek összességében a nézetet sokkal átláthatóbbá tehetik, az ismétlődő részeket egy külön fájlba áthelyezve. Bizonyos sűrűn használt tartalmi részeket ide helyezve is segíthetnek még.