CakePHP project építés 7. rész
cakephp, hogyan
A 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:

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';
Ez a bejegyzés rrd billentyűzetéből potyogott ki 2007 június 22. napján 14:12:22-kor. Eddig 2,204 olvasást ért meg. A visszajelzéseket nyomonkövetheted ezzel az RSS feed-el. Véleményt nyilváníthatsz, vagy trackbackolhatsz a saját oldaladon.
JólMegMondjad!
7 vélemény
-
jalso
2007 június 27. 21:01:35koszi a tutorialokat, ma talalkoztam eloszor a cakephp fogalmaval, es mar elegge kepben vagyok
csak igy tovabb.
kar, hogy nem lehet letolteni, s kiprobalni -
rrd
2007 június 28. 09:47:28jalso: az a lényeg, hogy aki nézegeti az ki is próbálja, és akkor már megvan neki a kód, így nem kell semmit letölteni
-
Kovács Zsolt
2007 augusztus 26. 10:50:34Nem lehet aaz utf8 helyett latin2?
-
rrd
2007 augusztus 27. 09:16:40Zsolt: 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.
-
Kovács Zsolt
2007 augusztus 29. 17:32:34Csak 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? -
rrd
2007 augusztus 30. 11:02:11Zsolt: 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.
-
Kovács Zsolt
2007 október 2. 18:25:19Hi!
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.



