CakePHP project építés 7. rész

cakephpA biztonsági intézkedések után itt az ideje egy-két használhatósági átalakítást megejtenünk. Az adminisztrátor biztosan örülne, ha megjelenne neki egy Kilépek link, amivel ki tud lépni anélkül, hogy kézzel kéne neki valami URL-t begépelni. E melett főleg a karakterkódolási problémákat fogjuk orvosolni.

Az oldalszerkezet kialakítása

Biztosan feltűnt már pár olvasónak, hogy eddig a view fileoknál csak a html oldal belsejével foglalkoztunk, sem a head résszel, sem a html zárással. Páran biztosan belefutottak már a jelenlegi lapokon abba a problémába, hogy pár ékezetes betű helyett kérdőjelek jelennek meg. Ez amiatt van, hogy a cake nem mindig lövi be jól a használandó karakterkódolást.

A cake mielőtt megjelenítene egy oldalt megnézi, hogy a /app/views/layouts/default.thtml file létezik-e. Ha igen, akkor azzal dolgozik, ha nem akkor az alap cake filelal, ami a /cake/libs/view/templates/layouts/default.thml helyen csücsül. Mivel ugye a cake könyvtár alatti részekbe nem ildomos belepiszkálni, ezért ezt a filet nem bántjuk, hanem létrehozzuk a /app/views/layouts/default.thtml filet.

Tehát hozzuk létre a filet az alábbi tartalommal, ami az oldalaink vázaként fog szolgálni:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="hu" xml:lang="hu">
<head>

Eddig semmi érdekes. Állítsuk be a html charaterset-et utf-8-ra.

<?php print $html->charset('utf-8')?>

Ha szeretnénk a különböző oldalaknak különböző title-eket használni akkor ebben a következő sor fog segíteni:

<title><?php print $title_for_layout?></title>

Favicon és css definíciók. A cake generic egyenlőre bennmarad, hogy ne sokkolódjunk le egyből azon, hogy az összes design elveszett. Mivel a cake.generic van az első helyen, mögötte pedig a tulasi ezért a most létrehozandó /app/webroot/css/tulasi.css fileunkban bármit felüldefiniálhatunk.

<link rel="shortcut icon" href="favicon.ico" type="image/x-icon" />
<?php print $html->css('cake.generic')?>
<?php print $html->css('tulasi')?>
</head>
<body>
<div id="teljeslap">

A következő részben beteszünk egy kis részt ami csak akkor fog megjelenni ha a user be van jelentkezve.

  <?php if($session->read('User')){ ?>
    <div id="fejlec">
      <ul>
        <li>Be vagy jelentkezve: <?php print $session->read('User')?> néven</li>
        <li><?php print $html->link('Kilépek', '/users/kilep')?></li>
      </ul>
    </div>
  <?php }?>

Aztán kell némi helyet biztosítani a generlt tartalomnak is. Ide fog kerülni pl a /app/views/termekek/hozzaad.thml tartalma.

  <div id="tartalom">
    <?php print $content_for_layout?>
  </div>

aztán a magam részéről létrehozok egy oldalpanelt ami későbbiekben a menüt fogja magábafogadni.

  <div id="panel">
    <h3>Panel</h3>
    <ul>
      <li><?php print $html->link('Termékek','/termekek/'); ?></li>
      <li><?php print $html->link('Termékcsoportok','/termekcsoportok/'); ?></li>
    </ul>
  </div>

Lábléc a láblécnek.

  <div id="lablec"></div>
</div>
</body>
</html>

Lezárjuk a htmlt és kész.

Ezután ha megnézzük bármelyik oldalunkat akkor ezzel a felépítéssel fog rendelkezni.

MySql karakterkódolás

Figyelmes szemlélők észrevehetik, hogy az AB-ból érkező ékezetes betűk néhol még mindig hibásak. Ennek javítására a cake 1.2-es változata már a /app/config/database.php fileban lehetőséget fog biztosítani, de amíg ez nem lép stabil állapotba, addig valahogy az 1.1-es caket i rá kell vennünk a megfelelő karakterkódolás használatára. Mivel minden modellben ugyanazt a karakterkódolást akarjuk használni a /app/app_model.php filet kell létrehoznunk az alábbi tartalommal:

<?php
class AppModel extends Model{

  //a következő sorok a mysql ab kapcsolat karakterkészletét állítják be
  //a cake 1.2-ben nem lesz rá szükség
  static $utf8IsSet = false;
  function __construct(){
    if(!self::$utf8IsSet) {
      $this->execute("SET NAMES 'utf8'");
      self::$utf8IsSet = true;
      }
    parent::__construct();
    }
  }
?>

Amint látható ez a megoldás csak php5-tel fog működni. HA valaki elkészítené ennek a php4-es változatát akkor azt is kitenném ide, mivel az a tapasztalatom, hog nagyon sok szolgáltató nem váltott még php5-re webszervereiken.

CSS alakítgatások

Ezen a ponton már érdemes kicsit pofozgatni a saját CSS-ünkön. A miértekre itt nem akarok kitérni, hiszen ennek semmi köze a CakePHP-hez. Szóval gyártsunk egy /app/webroot/css/tulasi.css nevezetű filet az alábbi tartalommal:

body{margin: 0;padding:0;text-align:left;}
#teljeslap{width:900px;}
#fejlec{}
#tartalom{width:700px;float:right;}
#panel{width:200px;}
#lablec{clear:both;}

#fejlec ul li{display:inline;}

#panel h3{margin-left:1em;}

Ezzel csupán egyenlőre annyit érünk el, hogy a Panel ne a lap alján, hanem annak jobb oldalán legyen.

Jelen stádimban a projectünk úgy áll, hogy bevonhatunk valakit az adatbevitelbe. A termékek és termékcsoportok kezelésére szánt rész működőképes, tehát a termékek felvitelére használható mindne különösebb szakértelem nélkül. Esetleg annyit megtehetünk, hogy a bake script által generált views-ekben az angol kifejezéseket (List, hibaüzenetek, stb) megmagyarítjuk. Ehhez a view fileokat kell szerkeszteni, de szerintem mindenki meg fog vele küzdeni. Kis állítgatás után valami ilyesmit kéne kapnunk egy hibás rögzítési kísérlet után:
www.tulasi.hu - első állapot

Ezen felül beállíthatjuk az egyes lapok title elemét. Ehhez a laphoz tartozó controller metódusban kell megadnunk a $this->pageTitle értékét. Példásul én a termekek_controller.php fileba ezt tettem:

  function szerkeszt($id = null) {
    $this->pageTitle = 'Tulasi ::: Termék adatok módosítása';

7 thoughts on “CakePHP project építés 7. rész

  1. Zsolt: Lehet, csak nem szabad elfelejteni, hogy akkor az sql-nek is abban kell lennie. De mit nyersz vele? Volt pár régebbi projectek latin2-ben, ha hozzájuk kelett nyúlnom mindig az volt az első, hogy konvertáltam az adatbázist utf8-ra.

  2. Csak azért kérteztem, mert az ékezetes karakterekel sokszor megygyűlt a bajom. Aztán találtam egy megoldást, ami így néz ki:
    $conn = mysql_connect($HOST , $PORT , $USER, $PASS);
    mysql_select_db($DB);
    mysql_query(“SET NAMES ‘latin2′”);
    Ez nekem szokott működni. Ezt nem lehet valahol beállítani?

  3. Zsolt: De lehet. Ezzel kezdődik a Mysql karakterkódolás című rész itt egy kicsit fentebb. Csak kicsit át van pofozva, hogy illeszkedjen a cake-hez.

  4. Hi!
    Kipróbáltam a cake 1.2-t. Sajnos a karakterkódolás beállítására ott sincs más lehetőség, mint az app_modelben való ügyködés. Sajna az itt leírt dolog nem működött 1.2 alatt, de egy kis guglizással szerencsére megtaláltam a megoldást. Egy német nyelvű blog-on találtam meg, és gondoltam leírom ide. Tehát:
    class AppModel extends Model {
    function __construct() {
    parent::__construct();
    if(!defined(‘GLOBAL_UTF8’)) {
    $this->query(‘SET NAMES “UTF8″‘);
    define(‘GLOBAL_UTF8’, TRUE);
    }
    }
    }

    Ha már itt vagyok megkérdezem. Nem tudja-e valaki, hogy az 1.2-ben, hogy tudom működésre bírni a smarty-t? Eddig működött ezzel a verzióval: 1.1.16.5421. Most nem sikerül beüzemelni.

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöljük.