daGrevis Posted July 20, 2011 Report Share Posted July 20, 2011 Maris-S, nejauc, piemēram, Smarty ar Mustache. Mustache ir "logic-less" un... ļoti labs piemērs ir te (zem 'README.markdown'). Vēl ir tāda lieta, ka Mustache ir vēl viens abstrakcijas slānis - 'class View_...'. Sanāk, ja runājam par MVC, tad ir kontroleris (visa 'virzīšanās'), modelis (visa 'domāšana'), skats kā klase (loģikas atņemšana), templeits (.mustache (citiem vārdiem, .html) fails, kurā ir HTML un tikai '{{mustache}}' tagi (?), kas ir bez loģikas (šajā gadījumā, liels plus). Pašlaik Mustache ir krietni vien ātrāks, teiksim, par slaveno Smarty, plus, to var iemācīties desmit minūšu laikā. Jau ~mēnesi zombor`s (cilvēks, kas ir viens no Kohana 'core developer`iem') strādā pie PHP 'extension`a' (rakstīta C), kas ātrumu Mustache uzlabos vēl dramatiskāk! No vienas puses Mustache ir kaut kas līdzīgs Linux`am - tiklīdz esi 'paspēlējies' kādu mēnesi - atpakaļ vairs neskatīsies. Vienkārši pamēģini, nevis tukši spried! Iesaku. Quote Link to comment Share on other sites More sharing options...
Maris-S Posted July 20, 2011 Author Report Share Posted July 20, 2011 Par Mustache konkrēti nezinu, nezinu pat vai tā ir klasiska šablonu sistēma, vai kas pavisam cits, būs jāpapēta. Visumā es nemaz nerunāju tikai par kādu konkrētu šablonu sistēmu, pieminēju Smarty tikai tāpēc ka tā samērā izplatīta. Uz ātro apskatoties Mustache, pēc saites ko iedevi, tad šablons tur ir tāds: <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8" /> <title>{{title}}</title> </head> <body> <h1>{{title}}</h1> <p>{{>content}}</p> </body> </html> uzreiz varu uzdot to pašu jautājumu, ar ko tas labāks par šo: <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8" /> <title><?php echo($title); ?></title> </head> <body> <h1><?php echo($title); ?></h1> <p><?php echo($content); ?></p> </body> </html> ? Tā, lai dziļi nemeklēt pa dokumentācijām, tad kā ar viņu tiek organizēti cikli vai nosacījumi, piemēram vairāku tabulu rindiņu izvadīšana? Vai patiešām tur nav loģiskās daļas? Quote Link to comment Share on other sites More sharing options...
daGrevis Posted July 20, 2011 Report Share Posted July 20, 2011 PHP way: <p class="pagination"> <?php if ($first_page !== FALSE): ?> <a href="<?php echo $page->url($first_page) ?>" rel="first"><?php echo __('First') ?></a> <?php else: ?> <?php echo __('First') ?> <?php endif ?> <?php if ($previous_page !== FALSE): ?> <a href="<?php echo $page->url($previous_page) ?>" rel="prev"><?php echo __('Previous') ?></a> <?php else: ?> <?php echo __('Previous') ?> <?php endif ?> <?php for ($i = 1; $i <= $total_pages; $i++): ?> <?php if ($i == $current_page): ?> <strong><?php echo $i ?></strong> <?php else: ?> <a href="<?php echo $page->url($i) ?>"><?php echo $i ?></a> <?php endif ?> <?php endfor ?> <?php if ($next_page !== FALSE): ?> <a href="<?php echo $page->url($next_page) ?>" rel="next"><?php echo __('Next') ?></a> <?php else: ?> <?php echo __('Next') ?> <?php endif ?> <?php if ($last_page !== FALSE): ?> <a href="<?php echo $page->url($last_page) ?>" rel="last"><?php echo __('Last') ?></a> <?php else: ?> <?php echo __('Last') ?> <?php endif ?> </p><!-- .pagination --> Mustache way: <p class="pagination"> {{#items}} {{#url}}<a href="{{url}}" {{#title}}rel="{{rel}}"{{/title}}>{{/url}}{{#num}}<strong>{{/num}}{{name}}{{#num}}</strong>{{/num}}{{#url}}</a>{{/url}} {{/items}} </p> Kaut vai koda garums, ko redz dizaineris. Vienkārši, vieglāk pēc tam visu būs uzturēt! Quote Link to comment Share on other sites More sharing options...
rATRIJS Posted July 20, 2011 Report Share Posted July 20, 2011 Tas piemērs nekam neder. Pirmo daļu (kas rakstīta iekš PHP) arī var pārrakstīt īsāk... + kādēļ tas skaitās logic-less? Tak tas {{#items}} pārrakstīsies uz foreach($items as $item) aka tāpat tur ir loģika... enīvei - arī piekrītu, ka template engine priekš PHP nav vajadzīga... Quote Link to comment Share on other sites More sharing options...
daGrevis Posted July 20, 2011 Report Share Posted July 20, 2011 Cikls nav nekāda dižā loģika. Citiem vārdiem sakot, tas, ko redzi apakšējā kodā - Tavā gadījumā - būtu liekams iekš templeita. Man tas gan kaut kā neliekas tur iederošs. Loģika: class View_Pagination_Basic extends kostache { protected $pagination; protected function items() { $items = array(); // First. $first['title'] = 'first'; $first['name'] = __('first'); $first['url'] = ($this->pagination->first_page !== FALSE) ? $this->pagination->url($this->pagination->first_page) : FALSE; $items[] = $first; // Prev. $prev['title'] = 'prev'; $prev['name'] = __('previous'); $prev['url'] = ($this->pagination->previous_page !== FALSE) ? $this->pagination->url($this->pagination->previous_page) : FALSE; $items[] = $prev; // Numbers. for ($i=1; $i<=$this->pagination->total_pages; $i++) { $item = array(); $item['num'] = TRUE; $item['name'] = $i; $item['url'] = ($i != $this->pagination->current_page) ? $this->pagination->url($i) : FALSE; $items[] = $item; } // Next. $next['title'] = 'next'; $next['name'] = __('next'); $next['url'] = ($this->pagination->next_page !== FALSE) ? $this->pagination->url($this->pagination->next_page) : FALSE; $items[] = $next; // Last. $last['title'] = 'last'; $last['name'] = __('last'); $last['url'] = ($this->pagination->last_page !== FALSE) ? $this->pagination->url($this->pagination->last_page) : FALSE; $items[] = $last; return $items; } } Enīvej, nesākšu svēto karu... katrs dara kā Viņam labāk patīk un der. Quote Link to comment Share on other sites More sharing options...
rATRIJS Posted July 20, 2011 Report Share Posted July 20, 2011 Cikls ir tikai kā piemērs. Tāpat tajā mustache ir {{#var?}} kas ir kas līdzīgs if, partials un gan jau vēl kaut kas, kas galu galā ir loģika... Un protams, ka pašā template'ā to loģikas kodu nevajag likt, bet neviens to neliedz sagatavot vai nu pašā modelī, kontrolierī vai (ja tāda ir) skata klasē - kur nu labāk iederas un tad izvadīt neizmantojot nekādus template dzinējus, bet gan parastu PHP kodu. Galu galā, IMO, template valodas var izmantot tikai pie lietotāju ievades, lai nodrošinātu sandbox vidi un saprotamāku sintaksi (tur to pašu mustache tad arī var izmantot). Quote Link to comment Share on other sites More sharing options...
Maris-S Posted July 20, 2011 Author Report Share Posted July 20, 2011 (edited) Nu šis te labais. :) <?php if ($first_page !== FALSE): ?> <a href="<?php echo $page->url($first_page) ?>" rel="first"><?php echo __('First') ?></a> <?php else: ?> <?php echo __('First') ?> <?php endif ?> Priekš kam pēdējās 3 rindiņās katrā tiek atvērti aizvērti <?php ?> tagi? Nekad neesmu sapratis kāpēc if nosacījumus bāž vienā rindiņā kopā ar php tagiem, vai tad Jums patiešām ir tā ērtāk? Man šis liekās daudz saprotamāks: <?php if ($first_page !== FALSE): ?><a href="<?php echo $page->url($first_page) ?>" rel="first"><?php echo __('First') ?></a><?php else: echo __('First'); endif ?> tomēr te jāpiekrīt daGrevis, katrs kodē kā ir pieradis un kā viņam ir ērtāk. Tas tā par pašu php koda rakstīšanas stilu. Tas ka šablonu sistēmu kods būs īsāks nestrīdos, bet ērtāks viņš no tā nepaliek. Tā garā rindiņa ar kaudzi {{}} nu nemaz neizskatās ērta. Te es laikam atkal kaut ko neesmu sapratis, jo nezinu Mustache, bet izskatās ka tur ar vieniem un tiem pat {{}} apzīmē gan mainīgos, gan ciklus, gan visu pārējo. Sanāk ka koda vidū jebkuru no atrastajiem apzīmējumiem pat neizpratīsi ko viņš dara, neapskatot un neizpētot visu apkārt. Vai tomēr tā nav? Vai ir tā, sanāk {{#items}}{{/items}} ir cikls, bet visi iekšējie ir jau kā mainīgie? Par logicless vienalga nesaprotu, kāpēc jāapgalvo ka šablonu sistēmām nav loģiskās struktūras, bet php jau neskaitās logicless? Ja jau šablonu sistēmu cikls saucams par logicless, tad jau ari php cikla pieraksts ir logicless, tā pat jebkurš if, vai jebkura cita konstrukcija. Tas ka es pierakstu 5 ar romiešu V, skaitļa vērtību nemaina. Šablonu sistēmas nav logicless, ir tikai cita pieraksta sintakse. Edited July 20, 2011 by Maris-S Quote Link to comment Share on other sites More sharing options...
marrtins Posted July 20, 2011 Report Share Posted July 20, 2011 Logic-less: if($items){ foreach($items as $item){ if(strlen($item->name) > 5){ print "$item->name..."; } else { print $item->name; } } } Vienvārdsakot, atņemt kontroles iespējas attēlojot datus (template engines) ir sev nevajadzīgu ierobežošanu radīšana. Pēc tam jādomā, kā apčakarēt tā saucamās template engines. Piemēram, pamēģini attēlot tabulu ar kādu no tā saucamajām enginēm, tad piemet pāris rowspan/colspan un murgs ir radīts. Ja pats nemāk nodalīt loģiku (datu apstrādi) no attēlošanas - pats vainīgs. Kaut-kādas samurgotas template engines nepalīdzēs, tieši otrādi. Bet par šo jau ir bijušas diskusijas sen sen. Quote Link to comment Share on other sites More sharing options...
daGrevis Posted July 20, 2011 Report Share Posted July 20, 2011 if($items){ foreach($items as $item){ if(strlen($item->name) > 5){ print "$item->name..."; } else { print $item->name; } } } {{#items}} {{name}} {{/items}} Quote Link to comment Share on other sites More sharing options...
daGrevis Posted July 20, 2011 Report Share Posted July 20, 2011 Čaļi, Jūs neesat laikam tā riktīgi iebraukuši par ko runāju. 'Logic-less' nav tas pats kas 'no-logic'. Kā parādīju augstāk minētajā piemērā, marrtins ciklu un 'if statement`u' var padarīt 'logic-less'. Dizainerim ir vienalga, kā tie dati tiek apstrādāti. Viss kas viņam ir jāzina ir, ka tur ir īstā vieta datiem. Nekādi 'if`i' utml. mēsli HTML`ā vairs nav... viss tiek samazināts līdz mazākajai loģiskajai vienībai - sīkāk nav iespējams uzrakstīt. Ja tā padomā, bez tā '{{#items}}' un '{{/items}}' arī, mierīgi, var iztikt. Quote Link to comment Share on other sites More sharing options...
daGrevis Posted July 20, 2011 Report Share Posted July 20, 2011 Neatceros īsti sintaksi, bet doma tāda... Iekš skata klases: public function items($items) { $output = ''; if (!empty($items)) { foreach ($items as $item) { if (strlen($item['name']) > 10) { $item['name'] = substr($item['name'], 0, 10) . '...'; } $output .= '<a href="' . HTML::chars($item['link']) . '">' . HTML::chars($item['name']) . '</a><br />'; } } return $output; } Iekš HTML: {{items}} Quote Link to comment Share on other sites More sharing options...
daGrevis Posted July 20, 2011 Report Share Posted July 20, 2011 Ceturtais posts pēc kārtas! ^__^ Got milk on my Mustache Quote Link to comment Share on other sites More sharing options...
Grey_Wolf Posted July 20, 2011 Report Share Posted July 20, 2011 (edited) Dizainerim ir vienalga, kā tie dati tiek apstrādāti. Viss kas viņam ir jāzina ir, ka tur ir īstā vieta datiem. Nekādi 'if`i' utml. mēsli HTML`ā vairs nav... viss tiek samazināts līdz mazākajai loģiskajai vienībai - sīkāk nav iespējams uzrakstīt. 90% gadijumu vispār Nekādi IF un cikli etc. HTML kodā nav nepieciešami. izmanto templetu endžinu vai nē, tāpat ir redzams ka kods nav īsti loģisks. Ja jaizvada 2 bloki tad katrā gadijumā to var izdarīt svādāk. Kut vai katram ielādēt atsevišķu failu -- šo arī var parkstīt savādāk <?php if ($first_page !== FALSE): ?><a href="<?php echo $page->url($first_page) ?>" rel="first"><?php echo __('First') ?></a><?php else: echo __('First'); endif ?> <?php if ($first_page !== FALSE){ $izvade='<a href="'.$page->url($first_page)'." rel="first">'. __('First').'</a>'; else{ $izvade= __('First'); } ?> Html .... <?php echo $izvade; ?> Man personīgi šādi ir krietni ērtāk lasīt un arī jebkuram svešam koderim būs saprotamāk -> atliks tikai sameklēt kur definēts $izvade (kaut vai 'izbraucot' , ar kādu failu pārlūku, cauri visiem projekta failiem ... un dizainerim jau nu pastāstīt ka dotajā vietā jāraksta $izvade ir elementārāk kā likt uzrakstīt to templeta pseido kodu Edited July 20, 2011 by Grey_Wolf Quote Link to comment Share on other sites More sharing options...
briedis Posted July 20, 2011 Report Share Posted July 20, 2011 (edited) Neatceros īsti sintaksi, bet doma tāda... Iekš skata klases: $output .= '<a href="' . HTML::chars($item['link']) . '">' . HTML::chars($item['name']) . '</a><br> Nu redz, man tad atkal liekas, ka šajā gadījumā pārāk daudz html lien ārpus savas vietas - skata. Ja man tagad vajag pamainīt, teiksim, stila klasi vai iekļaut <a> iekš <div>, nevis atdalīt tos ar <br>, tad ir jārokas pa kaut kādu skata klasi, nevis skata failu, kāda būtu tā pamatdoma... Edited July 20, 2011 by briedis Quote Link to comment Share on other sites More sharing options...
rATRIJS Posted July 20, 2011 Report Share Posted July 20, 2011 Laikam jau nu galu galā būs tā ka katrs darīs kā ērtāk. Galvenais tik lai nesanāk strādāt kopā ar kādu kas dara savādāk! Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.