Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Moj novi projekat

[es] :: PHP :: Moj novi projekat

[ Pregleda: 2077 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

mitke013
As Divljine
Freelancer

Član broj: 231934
Poruke: 338
178.222.26.*



+34 Profil

icon Moj novi projekat08.03.2011. u 18:47 - pre 159 meseci
Moja bebica je konacno instalirana na http://youmicro.com

Malo tehnikalija: 48 tabela, minimum 150 foreign key-ova (i sedmog dana bog stvori innoDB ), preko 100 klasa modela, indexna pretraga, intenzivna validacija i... (tush muzika)... 100% multijezicka podrska! Ali prava, ne preko fajlova, vec se svaki dinamicki kreiran objekat moze prevesti.

Dodavanje novih jezika; par klikova. Cak se i format datuma moze podesiti iz admin dela; magija nasledjivanja na delu

Prevodjenje sajta; samo se ukljuci translation mode: ON, i frontpage tada prikazuje koje se reci koriste, koje jos i trepcu radi lakse uocljivosti. Sve sto je potrebno jeste locirati ih u admin delu.Ostali posetioci naravno vide sve normalno.

btw, klijenti su 350 reci preveli za nesto manje od satipo vremena.

Ali najkompleksnija relacija; kontrola bannera (slika 3). Sajt je podeljen u tri grupe stranica: landing page, Listen song i My functions. Svaka stranica koristi neku od ovih grupa. Stranica ima 4 pozicije za prikaz bannera, razlicitih velicina. Kad admin uplouje slike, program ce uraditi validaciju da li se velicine tih slika poklapaju sa velicinama odabranih pozicija.

Nije to sve; banner se moze podesiti da se prikazuje i prema odabranom jeziku posetioca! Cela relacija je:
Page je m2m sa Position
Banner je m2m sa Page_Position
Banner je m2m sa Translation
Banner je one2many sa Image

I sva ta validacija unutar banner klase: 20 linija koda. Yeah baby


Ima tu jos hiljadu i jedna stvar, ali ako nekog zanima, pitace valjda.









[Ovu poruku je menjao mitke013 dana 09.03.2011. u 20:27 GMT+1]
Preterah sa '150 foreign key-ova', a ima ih tacno 74. ups...

[Ovu poruku je menjao mitke013 dana 09.03.2011. u 20:28 GMT+1]
Prikačeni fajlovi
 
Odgovor na temu

Valerij Zajcev

Član broj: 40886
Poruke: 1374
*.dynamic.sbb.rs.



+2 Profil

icon Re: Moj novi projekat13.03.2011. u 08:59 - pre 159 meseci
Aplikacija izgleda odlicno.
1) Kako je radjen layout sa tabelama ili css?
2) Mozes li da izdvois jedan niz koda sa doctrine-om (ako si ga koristio), tipa kako uzimas ili snimas nesto iz baze?
 
Odgovor na temu

mitke013
As Divljine
Freelancer

Član broj: 231934
Poruke: 338
*.dynamic.isp.telekom.rs.



+34 Profil

icon Re: Moj novi projekat13.03.2011. u 19:12 - pre 159 meseci
Citat:
Valerij Zajcev: Aplikacija izgleda odlicno.

Izgled je najmanje bitan, on se lako menja. Funkcionalnost je ono na sta sam najvise ponosan.
Citat:

1) Kako je radjen layout sa tabelama ili css?

CSS. Ali kazem, izgled nije vazan, nisam ja pravio template. Ja nikad ne radim dizajn, klijent ga obezbedjuje i to je njegov problem. Doduse, dizajner mora da radi po nekim pravilima koje sam napravio, ali to je jedino moje mesanje. Primer je da hocu sprajtove za staticke stvari: ikone da add/edit/delete bude <a class="icon delete"></a> umesto <img> tagova.
Citat:
2) Mozes li da izdvois jedan niz koda sa doctrine-om (ako si ga koristio), tipa kako uzimas ili snimas nesto iz baze?

Naravno, drage mi je sto si pitao:

Za stranicu gde se slusa neka pesma, ovo je query:
Code (php):

          /**
          * For listen->song() page
          *
          * @param mixed $id
          * @return Song
          */

          public function findForListenSong($id)
          {
               // tacka 1

               $query = $this->createQuery('o')->select('o.*')  ;
               $this->addAlbum($query) ;
               $this->addLanguage($query) ;
               $this->addCreator($query) ;
               $this->addStatistics($query) ;
               $this->addCategory($query) ;
               $this->addCountry($query) ;
               $this->addActiveContest($query) ;
               

               // tacka 2
               if (User::isLogged())
                    $query->addSelect('ar.*')->leftJoin('o.AbuseReports ar WITH ar.creator_id=?', User::getLogged()->id) ;

               // tacka 3
               $query->addSelect('j.*')->leftJoin('o.Locationstatistics j') ;
               return $query->addWhere('o.id=?', $id)->fetchOne() ;
          }
 

Stranica u pitanju je http://www.youmicro.com/listen...alien-ant-farm-smooth-criminal .
Ovo je malo kompleksniji query. Stvari za takmicenje (Contest) sam izbacio jer ih trenutno nema na live serveru.

tacka1: kreira query a zatim dodaje stvari koje ce se prikazivati na stranici. Vidis da tamo ima statistike (zvezdice), imas ime zemlje, jezik, da li je pesma u nekom takmicenju (nije, ali bice jednog dana)
Statistika ti je ovo:
Code (php):

          /**
          * Add statistics to query object:
          *
          * nr_of_votes,  nr_of_views, nr_of_stars
          *
          * @param Doctrine_Query $query
          */

          protected function addStatistics(Doctrine_Query $query)
          {
               $query->addSelect('s.voted AS nr_of_votes, s.viewed AS nr_of_views, ROUND(s.percentage/20) AS nr_of_stars')->leftJoin('o.Statistics s') ;
          }
 

tacka2: ako je korisnik ulogovan, leftJoin sa AbuseReport-om. Posle koristim $song->isReportedByVisitor() da bih znao da li treba da ispisem 'Vec si prijavio ovu pesmu' ili da vodi na stranicu za login. Ovako kako radi je iskljucivo zelja klijenta.
tacka 3: Ona google mapa sto je vidis, ce da se joinuje sa Song-om. To posle koristim da izvucem zemlje posetioca, posaljem GooglemapAPI klasi (helper klasa, ne model) i u templatu-u uradim $map->show()

Posto je skoro svaki objekat visejezican npr. ime zemlje, ime kategorije, imam ovakve metode:
Code (php):

          /**
          * Add country as property:
          *
          * country_name
          *          
          * @param Doctrine_Query $query
          */

          protected function addCountry(Doctrine_Query $query)
          {
               $query->addSelect('e.name as country_name')
                    ->leftJoin('o.Country y')
                    ->leftJoin('y.CountryTranslation e WITH e.translation_id=?', Translation::getForVisitor()->id) ;
          }
 


U .tpl ime zemlje izvlacim sa $song->country_name .

Translation::getForVisitor() ce mi vratiti instancu jezika koju posetioc koristi. To jest, ako je ulogovan, vratice se jezik koji koristi preko User::getLogged()->translation_id . Ako nije ulogovan (User::isLogged()), potrazice u cookies. Nemoj da kreiras nalog vec samo promeni jezik gore desno i videces na sta mislim.
Ako se ni cookie ne nadje, vratice defaultni jezik koji se podesava iz admin-a. Naravno, to se kesira; koliko god puta da pozoves Translation::getForVisitor(), samo se prvi put pristupa bazi.




Prikačeni fajlovi
 
Odgovor na temu

[es] :: PHP :: Moj novi projekat

[ Pregleda: 2077 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.