x-ƒ (x_f)

S2 skatu tipi

piektdien, 4.06.2004 @1:40 pm | x-ƒ ([info]style)

S2 valodā visi žūrnāla skati (views) ir definēti vienā izkārtojumā (layout). Katru skatu skatu var aplūkot kā objektu, kas satur funcijas un mainīgos, kas var tikt izmantoti šim lapas tipam. "Page" pats par sevi ir kā lietussargs visiem pārējiem, saturot funkcijas un mainīgos, kas var tikt izmantoti visos skatos, un katrs skats var pievienot kaut ko īpašu (savas funkcijas un mainīgos) galvenajai lapai ("Page").

Page
"Page" ir pati augšējā klase visiem S2 skatiem. Tas nozīmē, ka visi pārējie "skati" izriet (rodas) no šī objekta. "Page" ir ievada klase skatiem: kad Tu pirmoreiz raksti kodu savam izkārtojumam (layout), funkcija, kas izvada visu informāciju, ir Page::print. Visi pārējie skati ir "Page" apakšklases. Visiem pārējiem lapu tipiem būs iespējams piekļūt un izmantot jebkuru "Page" klases funkciju vai mainīgo.
Šajā lapā aprakstītas visas funkcijas un mainīgie, kas pieejami "Page" klasei. Lai noteiktu, kādu lapu Tu tieši pašlaik skaties, katra "Page" apakšklase satur mainīgo "view", kurš nosaka kāds lapas tips pašlaik tiek aplūkots. Šim mainīgajam var piekļūt, izmantojot "view" mainīgo, kurš atrodas visos lapu objektos. (Tas nozīmē, ka jebkurā "Page" klasē vai apakšklasē var vienkārši piekļūt "$.view".)

RecentPage$.view == "recent"
Klases "Page" apakšklase. Šī ir pati žūrnāla lapa, nesenie ieraksti. Vecajā S1 stilu sistēmā to sauca par "LASTN" skatu. "RecentPage" klase satur dažas funkcijas un mainīgos, kas attiecas tieši uz šo lapu, piemēram, izvadāmo ierakstu masīvu.

FriendsPage$.view == "friends"
Klases "RecentPage" apakšklases. Šis ir draugu skats, kurā tiek attēloti visu Tavu draugu apkopotie ieraksti. Šī skata ieraksti satur nedaudz vairāk informācijas (draugu krāsas) un ir pieejama papildus nosaukuma teksts draugu lapai, kuru var noteikt līdz ar savu personālo informāciju. Visādi citādi nav nemaz lielu atšķirību starp draugu un žūrnāla lapu.
(Patiesībā var arī vispār iztikt bez FriendsPage klases izmantošanas, ja vien atceras, ka tā ir RecentPage apakšklase un savā kodā ievieto nepieciešamās "$.view" pārbaudes. Tad gan jāiztiek bez draugu iekrāsošanas.)

YearPage$.view == "archive"
"YearPage" ir tas pats, kas kalendāra skats vecajā S1 stilu sistēmā. Šis skatu tips satur informāciju par mēnešiem un katras dienas ierakstu skaitu. Šis ir vienīgais skats, kurš nesatur nekādu informāciju par pašiem ierakstiem, piemēram, ieraksta virsrakstu vai tekstu.

MonthPage$.view == "month"
"MonthPage" satur informāciju par visiem ierakstiem, kas veikti norādītajā mēnesī. Šis skatu tips satur šo ierakstu metadatus, lai gan tam nav pieejami ierakstu teksti vai lietotāja attēli. Šo skatu parasti izmanto, lai ģenerētu norādītā mēneša ierakstu virsrakstu sarakstu.

DayPage$.view == "day"
Šis skats attēlo visus vienas dienas ierakstus. Informācija par pašu ierakstu ir tieši tāda pati, kā RecentPage skatā. Tas nozīmē, ka tā satur ieraksta pilno tekstu, virsrakstu, lietotāja attēlu, metadatus u.t.t. Ieraksti šajā lapā pēc noklusējuma tiek kārtoti hronoloģiskā kārtībā, atšķirībā no apgriezti hronoloģiskās kārtības, kāda tiek izmantota draugu vai žūrnāla lapā.

EntryPage$.view == "entry"
Atsevišķs ieraksts un šim ierakstam pievienotie komentāri. Šis skats satur pilnu ieraksta informāciju, kā arī informāciju par visiem lietotāju atstātajiem komentāriem. Šis ir viens no skatiem, kurš nosaka, kā ieraksti patiesībā izskatīsies.

ReplyPage$.view == "reply"
Lapa, lai atbildētu uz žūrnāla ierakstu vai komentāru. Šī lapa nosaka, kā Tavs žūrnāls rīkosies, kad Tu atstāsi komentāru vai atbildēsi uz citu komentāru. Tā satur īpašas funkcijas, lai ģenerētu atbildes formu, kā arī informāciju par to, kā formatēt atbildes.

Tulkots no S2 HOWTO kopienas, Saitesaite.

Šis jau reiz tika publicēts, taču atkārtot der. :)
 Page
   |– RecentPage
   |      |
   |   FriendsPage
   |– EntryPage
   |– ReplyPage
   |– YearPage
   |– MonthPage
   |– DayPage

x-ƒ (x_f)

Dažādo skatu piemērs

piektdien, 4.06.2004 @1:41 pm | x-ƒ ([info]style)

Es centīšos pavisam vienkārši paskaidrot savu iepriekšējo pukstu ar elementāru un praktisku piemēru par klašu mantošanu un dažādajiem skatiem. Kods būs no mana slāņa, tāpēc ir skaidrs, ka tas darbojas. :)

Vienmēr jāatceras, ka, ja Tu vēlies savā slānī definēt klases metodi, tad tās nosaukumam jāsākas ar lay_. Šeit – lay_print_skipsaites(). Tas tā ir tamdēļ, lai nerastos problēmas ar vienādiem funkciju nosaukumiem, ja nu gadījumā core slānim tiek pievienotas jaunas klašu funkcijas.

Manā piemērā tiek izvadītas saites, kas ļauj pārvietoties pa žūrnāla ierakstiem. Piemēram, žūrnāla un draugu lapā tās norāda uz senākiem vai jaunākiem ierakstiem (skip=20, piemēram), bet dienas skata lapā – uz nākošo un iepriekšējo dienu. Tieši tāpat ir iepējams izveidot jaunu metodi, kas darbotos katra ieraksta lapā. Vai arī, piemēram, mēneša lapā. Man tas nelikās vajadzīgs, bet tas ir iespējams (EntryPage un MonthPage).

S2 koda paraugs )

Pēc tam, lai izsauktu šo funkciju, vajadzīgajā vietā savā S2 slānī vienkārši jāieraksta $this->lay_print_skipsaites().
Manā stilā tā tiek izsaukta no šādām vietām – RecentPage::print_body, DayPage::print_body(), RecentPage::lay_print_minicalendar(). (Tikpat labi es to būtu varējis izsaukt tikai no Page::lay_print_skipsaites(), taču man bija vajadzīgs, lai saites atrastos dažādās vietās. Tāpēc tā.) Tā tiks iedarbināta jebkurā skatā, pat "reply", bet, tā kā klasē "Page" šī funkcija ir tukša (neko nedara) un atsevišķi priekš ReplyPage tā nav definēta, tad, lai gan tā izpildīsies, tā reāli nemaz nenostrādās. Skaidrs?
Protams, es būtu varējis arī definēt atsevišķi to draugu lapai (FriendsPage::lay_print_skipsaites()), taču tas īsti nav nepieciešams, jo FriendsPage klase tiek atvasināta no RecentPage.

Piezīme Klašu funkcijām ir jāatrodas kodā pirms to izsaukšanas (augstāk), citādi kompilators ziņos, ka nav atrodama tāda funkcija. Vispirms definē, pēc tam izsauc. Šķiet, ka ar globālajām funkcijām tā nav. Un vispār – galvenais, lai Page::lay_.. būtu pirms izsaukšanas. DayPage::lay_.. un citi var droši būt arī zemāk.

Ceru, ka kādam tas viesa skaidrību un noderēs. [info]wasted? :)

Labots Izlaboju dažas koda kļūdas un neprecizitātes paskaidrojumos. Atvainojos par sagādātajām neērtībām. :)