:!: U IZRADI :!: ====== Setting Zend Framework as framework for modal applications (currently Croatian only) ====== This solution is implemented in loota2. ===== Uvod ===== Ideja je bila postaviti ZF tako da se aplikacije mogu dodavati u njega kao nezavisni modeli. Zamišnjeno je da samo iskopirate svoj modulu (applikaciju) u zadani direktorij i da ona odmh radi. ===== Struktura (aplikacije kao moduli) ===== Osnovni izlged strukture direktorija: {{php:directory_structure.jpg}} Direktori ''applications'' sadrzi applikacije. One strukturirane po tipicnoj ZF shemi za osnovnu (defaultnu) rutu. No da bi direktorij bio prepoznati kao modul mora imati file ''module.php''. Taj file mora imati implementiranu klasu slijedeceg imena ''direktoriapplikacijeModul'' koja mora implementirati ''loota2Module'' interface. Module loada objekt klase ''moduleManager.php''. Direkctori ''Core'' sadrzi sve sto je potrebno za osnovno funkcioniranje. To je u biti veza s aplikacijama (moduleManager), rad s layoutima (layoutMAnager) i osnovne radnje s korisnicima (AuthMaanger). Direktoriy ''library'' sadrzi externe biblioteke (ZF, ....). Direktori ''public'' sadrzi ZF bootstrap datoteku (index.php) te ostale public fileove (slike, .css i .js fileove) koji su potrebni za osnovno funkcioniranje ===== Dostupnost slika, .js i .css fileova u aplikacijama ===== Gotovo uvijek postoji potreba da aplikacije kao moduli imaju svoje public fileove (slike, .css, .js, ...). Da zadrze neovisnost i jednostavnost instalacije (da sve sto se tice jedne aplikacije bude u njenom folderu) trebalo je naci nacina da se ti fileovi mogu prikazati. Bile su dvije mogucnosti. Prva da se to napravi pomocu php ili druga pomocu samog apachea. Varijanta da to radi apache je bolja (brza i jednostavnija za implementaciju) pa sam se odlucio za nju. Za to je trebalo izmjeniti ''.htaccess'' file u ''public'' direktoriju. Iz: RewriteEngine on RewriteRule !\.(js|ico|gif|jpg|png|css)$ index.php U: RewriteEngine on RewriteRule !\.(js|ico|gif|jpg|png|css)$ index.php RewriteRule public/([a-zA-Z0-9]+)/(.+) ../applications/$1/public/$2 Nako ove izmjene svaka aplikacije u svoj ''puublic'' direktori moze stavljati javno dostupne fileove ovih extenzija: ''.js .ico .gif .jpg .png .css''. Tako ako sada imate npr. ''/applications/mojaapp/public/main.jpg'' njegov url je ''public/mojaapp/main.jpg''. :!: - ovo gore se jos mora istestirati i pogledati sama sigurnost rijesenja ===== layoutManager ===== :!: 31.01.2008. Izašao je officialna ZF layout klasa - probati cu je iskoristiti ovdije Posto ZF ne sadrži layout manager napravljen je nakakvi jednostavni layout mamanger baziran na Zend_View klasi. ===== Prijevodi ===== Prijevodi su rijeseni s ZF gettext-om. Za one koji ne znaju to je neovisna implementacija gettexta i nema nikakve veze s standardnim PHP gettextom. Core prijevode loada layoutManager klasa, a svaka aplikacija loada svoje prijevode tako da se zadrži neovisnost. ===== Baza ===== :!: 10.3.2009. - cini se da cu morati zamjenit propel necim drugim najverovatnije vratiti na staro (ZF DB klase). Naime pojevio se problem kada jedna aplikacija (modul) treba podatke iz druge applikacije odnosno kada ima svoje tablice vezane foreign key-evima na tablice u drugoj aplikaciji. Tada da bi se koristio propel treba generirati ponovo gererirati klase koje vec postoje u drugoj tablici tako da imamo dupliranje koda koje po mom svakako treba izbjeci. Nakon puno vremena odlucio sam koristiti [[http://propel.phpdb.org/trac/ | propel]] cisto radi neovisnosti o bazama. Posto je u igri obicno jedna baza i razne aplikacije (moduli) moraju moci dohvacati iste podatke mora se na neki nacin definirati ovisnost modula (gledano na bazu). Ono sto mi je cilj da to rijesim preko ajaxa ali vidjeti cemo. ===== User Interface (JavaScript) ===== Za UI odluka je pala na YUI (Yahoo UI) koji se pokazao najednostavniji i relativno dobro dokumentiran.