Jump to content
php.lv forumi

PHP template engine


CryRat
 Share

Recommended Posts

Neviens jau nesaka ka nevar.. Var izmantot ne to vien utt..

 

Runa/diskusija gaaja par aatrdarbiibu (vismaz no mana viedoklja) - pie kam ne aatrdarbiibu vai eertiibu no koda labotaaja/dizainera puses bet gan servera jo vinjam tas viss buus "jasagremo"

Link to comment
Share on other sites

  • Replies 31
  • Created
  • Last Reply

Top Posters In This Topic

hehe... A pienjemsim, ka lapa ir ljoti sarezhgjiita ar daudziem cikliem un nosaciijumiem... echo un print dara vienu - output - aizsuuta textu browserim, tagad iedomaajies kaa vinjsh meklee tavaa kodaa daudzos echo un aizsuuta vienu peec otra taa paleenaam... Vai tik ar nesanaak kaada bremzeeshana un ilgaaks celjsh no servera liidz browserim. Un taa bremzeeshana, kas attiecas uz templatiem, vareetu notikt tikai uz servera, tachu serverim ir jaabuut aatram! Peec tam ar vienu vieniigu echo aizlidina visu saturu uz browseri! Un viss saturs atnaak vienlaiciigi uz browseri! :) Vai tad taa nav? Pie tam, vai tik ar echo nevar rasties kaadas Output Buffering probleemas...?

Link to comment
Share on other sites

Nu pat tu sarakstiiji pilniigu sviestu..

 

Kaa tad tu taisies izvadiit templeitu nedrukaajot uz (ekraanu/stdout) info?

 

Output bufering ir veel lielaaks performances miinus kaa viss ieprieksheejais, bet atbildot uz jautaajumu - nee probleemu nav.

 

Un taa bremzeeshana, kas attiecas uz templatiem, vareetu notikt tikai uz servera

 

Ne par kaadu citu bremzeeshanu neviens arii nerunaa.. php neveido noslodzi klienta galaa..

 

Kas attiecaas uz kontenta vienlaiciigu nonaakshanu uz browseri tas tikuntaa tiek paarsuutiits pa gabaliem (chunkiem) (neeksistee taads "vieniigu echo aizlidina visu saturu uz browseri) piekam ja ir zheel trafika tad var lietot kompresiju (gzip).

Link to comment
Share on other sites

aa! kaa tad tur iisti ir? php apstraadaa visu un beigaas aizsuuta visu textu html formaa uz browseri? (saliekot kopaa laikam visus echo un print un textus aarpus php tagiem <?php ?> laikam...)

html formaa

 

Nevis html, bet "binārā" (un, v.b. pat citā kodējumā - 64-bit encoded, hexadecimal). Ar php jau ne tikai tekstu var izvadīt (bet arī attēlus, flashus, pdfus u.c.).

 

saliekot kopaa ... visus echo un print ... aarpus php tagiem ...

 

he? tas kas tagos - izpildās atsevišķi, tas kas aiz tiem - tiek sūtīts parasto pakešu veidā. process vai nu pagaida, kamēr izpildās nākošais php gabal, vainu piespiedu kārtā (visādi flush()) sāk to izvadīt php pārsēšanai vēl nebeidzoties (tam dēļ jau php ir multithreadingota valoda!).

Link to comment
Share on other sites

Un taa bremzeeshana, kas attiecas uz templatiem, vareetu notikt tikai uz servera
Ne par kaadu citu bremzeeshanu neviens arii nerunaa.. php neveido noslodzi klienta galaa..
papildināšu Rozes teikto - saprotams ka PHP nenoslogo klientu... bet tas no PHP rakstīšanas puses neko nemaina... nav svarīgi vai kods ir uz servera vai klienta jo tā vai tā viņam ir jāizpildās un tā vai tā viņš bremzē... un ja tu domā ka serveris ir liels un spēcīgs ta nevajag aizmirst ka viņš ir tikai viens kamēr klientu ir daudz...

 

kas attiecās uz templatu bremzi ta lieta tāda ka bremzē tas mainīgo meklēšanas process... ja teiksim tev ir echo ta nekas jau netiek meklēts a ja tev ir templets ta gribot negribot nākās meklēt tos mainīgo tagus un mainīt uz vērtībām...

 

ideja ir tāda ka vajadzētu nevis skatīties kādi mainīgie ir masīvā un tad meklēt viņus templatā bet otrādi... meklēt failā un tad skatīties vai ir masīvā... tādējādi varētu templati vienmēr sadalīt divās daļās - tā kurā jau ir meklēts un tā kurā vēl nav meklēts... ieguvums būtu tāds ka nevajadzētu vairākas reizes laist ereg_replace uz vienas un tās pašas teksta daļas kurā sen vairs nav mainīgo... huh... ja kāds mani saprata tad pakomentējat vai man ir taisnība vai nav...

 

bet vispār... neesu vēl galīgi nolēmis par tiem template enginiem... tomēr ideja ka PHP pēc iespējas vairāk jāatdala no (X)HTML paliek spēkā...

Link to comment
Share on other sites

Es savu lapu arī esmu uztaisījis 100% ar templatiem, ņemot vērā, ka tā ir mana pirmā lapa :) Bet nu .html (vai anyway kādu tur paplašinājumu dod saviem templatiem) failu vietā var izmantot arī to, ko roze ieteica:

piemēram:

<table border="0" style="<?=$styles['main_table'];?>">

<?=$table_content;?>

</table>

 

utt...

 

Arii sanaak liidziigie templatiem, tachu nav iisti templati, jo tomer ir php faili...

Link to comment
Share on other sites

Bet nu .html failu vietā var izmantot arī to, ko roze ieteica:
njā... redzēju ka Roze ieteica... un pateikšu tev to pašu ko Rozei... problēma rodās tad kad tev savajagās kaut kādu ciklu vai arī ifu... tad tev nākās tajā templatā rakstīt viņu un tad vēl kaut ko lai pieslēgtos / atlasītu / utt. sanāk diezgan daudz PHP iekš tā templata... izmantojot pilnīgi tīrus no PHP templatus jau arī ir vajadzība pēc cikliem un ifiem... to es esu uztaisījis ar {&CIKLS}{CIKLS&} tagiem un ifu ar {!IFS}{IFS!} tagiem...

 

lieta tāda... pie kā es esu nonācis... principā es domāju ka (X)HTML no PHP vajag atdalīt tikai nevajag pārspīlēt tā kā to es izdarīju... lai jau iekš tā (X)HTML faila ir PHP bet tikai vajag turēt minimumu... tas ir - visu kas tiks izmantots salasīt masīvā tā kā to es daru izmantojot templatus tikai aizpildīt templatu vajag ar PHP palīdzību nevis speciālu tagu... tas ir tas pats variants ko Roze piedāvāja... tikai es neiedomājos to pirmo daļu ka visu vajag atlasīt pirms ievietošanas iekš (X)HTML... nu tas ir tā kā es tagad domāju... bet tas templatu experiments nebija slikts :) daudz interesanta koda...

Link to comment
Share on other sites

Nu, baigais malacis, ka shito uztaisiiji... Es gan izmantoju citu Template engine. Buutiibaa, var izmantot arii shaadus <# > tagus piemeeram... Vispaar, lai uztaisiitu template engine, ir jaasaprot tikai eregi vai preg_replace! Es nesaprotu, kaapeec tev vajag tur likt kaut kaadus "if" ieksh templatiem? Templatos vari salikt string mainiigos, if un cikli notiek attieciigaa php koda failaa...

Link to comment
Share on other sites

Es apskatījos CryRat to engini. Nesaproto, kapeec ir vajadziigs tik sarežģīts kods templeitam? Es pats izmantoju šito un man ir labi.

 

Droši vien ir liela atšķirība no tiem, bet tad lūdzu paskaidrojiet.

Link to comment
Share on other sites

Es apskatījos CryRat to engini. Nesaproto, kapeec ir vajadziigs tik sarežģīts kods templeitam? Es pats izmantoju šito un man ir labi.

 

Droši vien ir liela atšķirība no tiem, bet tad lūdzu paskaidrojiet.

a kas tev iekš tiem include? html+php, vai nē?

a CryC(:D )at grib viņus vispār atdalīt.

Gacham žetons nost - nav pirmā reize, kad nesaprot, par ko vispār iet runa ;)

Link to comment
Share on other sites

Nu, baigais malacis, ka shito uztaisiiji...
hmm... domā ? nu nez... klau Venom... tu mums te kruts koders skaities :) kā domā ? cik kruts es esu ? :lol:

 

Es nesaprotu, kaapeec tev vajag tur likt kaut kaadus "if" ieksh templatiem? Templatos vari salikt string mainiigos, if un cikli notiek attieciigaa php koda failaa...
nu kaut kādi IF tagi templatā būtu vajadzīgi lai... reāla situācīja piemēram - manā blogā komentāri ir atļauti tikai retiem postiem... ja tavam template enginam nav IF tagu tad tev visa komentāru forma ir jāliek ( vai nav jāliek ) iekš mainīgā lai tu varētu viņu parādīt ( vai neparādīŧ )... un ja tā tev nākās darīt tad tak galīgi tiek izjaukta visa templatu jēga... sanāk tak visu <form>u rakstīt iekš PHP... vari paskatīties kā man tas izskatās ar IF tagiem... redzi ? tā daļa kas ir {!COMMENTS} TE {COMMENTS!} vai {!ALLOW_COMMENTS} TE {ALLOW_COMMENTS!}... es viņas varu rādīt un varu nerādīt atkarībā no viena maza mainīga... saprati kādēļ IF tagi ir neaizstājami ja gribi normālus templatus taisīt ?

 

tad varbūt tomēr ar php ģenerēt XHTML/XMLu un pārveidot to ar XSLT?
njā... būtu jau interesanti... bet kad pēdējo reiz skatījos ta Opera galīgi nesaprata XSLT un Data Islands vispār tikai iekš M$IE strādāja... ir kaut kas būtiski mainījies ? un vispār... nezinu... neesu jau nekāds eksperts šajā jautājumā bet manuprāt milzīga problēma ar to XML ir tā ka neder viņš liela informācījas daudzuma glabāšanai... nu padomā lai es savam blogam saturu glabātu iekš XML tad man nāktos vainu taisīt vienu pamatīgu XML failu kas visu padarīšanu bremzēs vai arī katram ierakstam savu XML kas atkal liekās stulbi... kā jau teicu nezinu... nav nācies ne redzēt reālu piemēru ne pats esu mēginājis uz to pusi taisīt... tā jau ir viena jauka lietiņa uztaisīta ar XML un XSLT bet tas tā... stipri vienkārši...

 

a CryC(:D)at grib viņus vispār atdalīt.
tu esi ļauns... es apvainošos <_<

 

Palasot vairāk sapratu, ka tas templatajā template enginī var manīt visu sākot ar TITLE un beidzot ar footer. Tā ir?
īsti nesapratu ko teici... bet droši ka tā nav... :) paskatīties to pašu manu templatu varbūt skaidrāks tiks... a ja nē tad nav tev tas vajadzīgs :)
Link to comment
Share on other sites

Robis ir sapratis domu un ceru, ka neviens viņu nenovedīs no tās. Vislabākais šablons (kā jau Roze teica) ir a la šis:

 

<title><?php= $title; ?></title>

<?php if ($bool) { ?><style type="text/css" href="..." /><?php } else {} ?> ...

 

Tādu šablonu rakstīt nav viegli, var rakstīt kaut kādu jaunu savu valodu un raksīt kompilatorus priekš tās, kas piemēram no tā {TITLE} uztaisīts kaut kādu <?php= $TITLE; ?> ...

 

Tā kā šablonus ne vienmēr iznāk aizpildīt perfekti, daudzās sistēmās īpašās vietas iezīmē XHTML komentāros: <!--...-->, lai gadienā, ja iezīme netiktu aizvietota, klients nesaņemtu bezsakarīgu {TITLE}

 

Šablona kompilators, kā man iemācīja laacz, ir kaut kas tāds, kas paņem to tavu

<html><title>{TITLE}</title></html> un uztaisa par <html><title><?php= $TITLE; ?></title></html> un saglabā to failā. Pēc tam katru reizi, kad vajag attiecīgo lapu, šis fails tiek izsaukts ar include('kompiletais_fails.php');

 

Tagad varētu brīnīties nafig tad to templati rakstīt {TITLE} un kompilēt, ja uzreiz varēja rakstīt to <?php= ... Tas tāpēc, ka lapu parasti var sadalīt daudzās mazās daļiņās, kuras uzraksta vienreiz un tad atkārto vairākas reizes. Man piemēr šablonfailā var būt vairāki šabloni, kas māk viens otru izsaukt. XHTML kodu ir grūti labot, ja pa vidu ir pilns ar PHP loģiku. Vispār to manu šablonu dzinēju var skatīties bloga dziņa "Shubi" izejas kodā, kuru var lejupielādēt no manas mājaslapas. Valoda tā mana šabloniem ir izcili stulba, bet pagaidām nav laika to pārstrādāt un tāpēc es turpinu tajā rakstīt. Citi var mācīties no kļūdām. Te ielikšu tādu mazu piemēru kā izskatās mans šablonfails, kuru, manuprāt, varētu būt viegli rediģēt XHTML zinātājam (šis šablons tiek kompilēts un beigās regulāri nemaz netiek izmantots):

 

<!--block--><!--Lapas_augsha-->

<h1>Zīmējumi:</h1>

<!--$ZimejumiJarada:if_true:$Zimejumi-->

<!--$ZimejumiJarada:if_false:$NavZimejumi-->

 

<!--block--><!--Zimejumi-->

<!--$ZimejumuSaraksts:list_as:$Zimejums-->

 

<!--block--><!--NavZimejumi-->

<p>Diemžēl mums nav zīmējumu.</p>

 

<!--block--><!--Zimejums-->

<!--$Zimejums['nosaukums']:value-->

<img src="<!--$Zimejums['src']:value-->" alt="" />

 

Beigās šāds tiek kompilēts par:

 

<h1>Zīmējumi:</h1>

<?php if ( $ZimejumiJarada ) { ?>

<?php foreach ( $ZimejumuSaraksts as $Zimejums ) { ?>

<h3><?php= $Zimejums['nosaukums']; ?></h3>

<img src="<?php= $Zimejums['src']; ?>" alt="" />

<?php } ?>

<?php if ( !$ZimejumiJarada ) { ?>

<p>Diemžēl mums nav zīmējumu.</p>

<?php } ?>

 

Un apakšējam kodam priekšā pieliek $ZimejumuSaraksts definīciju un $ZimejumiJarada piešķir true vai false un include() šo to kompilēto pasācienu un, ticiet vai nē, tas ir zibenīgs! Robis uzreiz raksta šo te kompilēto variantu. Malacis.

 

Savā pirmajā skriptā rakstīju kompilēto variantu, bet tad, kāda stulba programmētāja mācīts, sāku rakstīt stulbos šablonus, kas tiek aizpildīti programmas izpildes laikā. Tagad, pusotru gadu ar idiotismu pačakarējies, atgriežos pie sākuma. Tagad tikai vēl kompilēju, jo gribu rakstīt smukus XHTML, kur pa vidu nemaisās PHP ifi un foreach un citi.

 

Augstāk devu vienkāršotu savas šablonu mašīnas piemēru. Manējā patiesībā uzģenerē mazliet sarežģītāku kodu - viņa ļauj arī izdrukāt objektu mainīgos un foreach netiek izmantots, jo tas rada liekas masīva elementu kopijas. Ar for operatoru bez tā var iztikt.

Link to comment
Share on other sites

 Share


×
×
  • Create New...