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';
koszi a tutorialokat, ma talalkoztam eloszor a cakephp fogalmaval, es mar elegge kepben vagyok 🙂 csak igy tovabb.
kar, hogy nem lehet letolteni, s kiprobalni
jalso: 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 🙂
Nem lehet aaz utf8 helyett latin2?
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.
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?
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.
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.