x-ƒ (x_f)

Dažādo skatu piemērs 

piektdien, 4.06.2004 @1:41 pm | x-ƒ

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).

#############################################
## šīs funkcijas izvada saites uz senākiem un jaunākiem ierakstiem (žūrnāla
## un draugu lapā) vai uz iepriekšējo un nākošo dienu (dienas lapā) 

function Page::lay_print_skipsaites(){} ## definēju metodi

#########
## žūrnāla un draugu lapa
## rezultāts - «Senākie / Jaunākie», jebkurā gadījumā izvada vienādu tekstu, taču,
## ja ir pieejami senāki vai jaunāki ieraksti, tad attiecīgais vārds ir saite


function RecentPage::lay_print_skipsaites(){
 """<div id="skipsaites">\n""";
if ($.nav.backward_count > 0){
"""&laquo;<a href="$.nav.backward_url" title="Apskatīt $.nav.backward_count senākus ierakstus">$*text_skiplinks_back</a>""";
} else {
"""&laquo;$*text_skiplinks_back""";
}
""" / """;
if ($.nav.forward_count > 0){
"""<a href="$.nav.forward_url" title="Apskatīt $.nav.forward_count jaunākus ierakstus">$*text_skiplinks_forward</a>&raquo;""";
} else {
"""$*text_skiplinks_forward&raquo;\n""";
}

 if ($.view == "recent"){ ## lai saite uz kalendāru nebūtu redzama draugu lapā
"""<br />\n<a href="$.base_url/calendar/" title="Kalendāra skats" class="mazais_teksts">Rakstu krājums</a>""";
 }

 """</div>\n"""; ## aizverošais skipsaišu div
}


#########
## dienas skata lapa
## rezultāts - «Iepriekšējā diena / Nākošā diena», tāpat kā iepriekšējā funkcija
 

function
DayPage::lay_print_skipsaites(){
 
"""<div id="skipsaites">\n""";
if ($.prev_url != ""){
"""&laquo;<a href="$.prev_url" title="Apskatīt iepriekšējo dienu">$*text_day_prev</a>""";
} else {
  """&laquo;$*text_day_prev""";
}
""" / """;
if ($.next_url != ""){
"""<a href="$.next_url" title="Apskatīt nākošo dienu">$*text_day_next</a>&raquo;""";
} else {
"""$*text_day_next&raquo;\n""";
}
 """</div>""";
}

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. :)

(Ņem vērā, ka parasti neviens neizvēlas atbildēt uz pilnīgi anonīmiem komentāriem!)

No:
Lietotājvārds:
Parole:
Ievadi te 'qws' (liidzeklis pret spambotiem):
Temats:
Tematā HTML ir aizliegts
  
Ziņa:

Gandrīz jau aizmirsu pateikt – šis lietotājs ir ieslēdzis IP adrešu noglabāšanu. Operatore Nr. 65.