Nori gauti straipsnius el. paštu - Prenumeruok

Smarty pluginas: in array

« »

Kai aš pradėjau programuoti tiek programinio kodo logiką, tiek atvaizdavimą dėjau į vieną vietą. Tai tikrai yra blogai, nes skaitomumas stipriai sumažėja. Šiektiek paaugus pradėjau naudoti paprastą šablonų sistemą phemplate. Viskas gerai, kol neprireikia šiek tiek paprastos logikos. Tada prade naudoti įvairiausius apgaulės būdus, kurie tikrai nėra patogūs. Žinoma galima pasirinkti šablonų sistemą kuri turi savyje logikos, kad ir smarty. Bet visuomet susiduriama su tokių šablonų trūkumais, nes atsiranda tikrinimo variantai, kurių pati sistema nepalaiko. Tada pagalvoji, kad geriausia šablonų sistema yra pati programavimo kalba. Tereikia atskirti failais logiką bei atvaizdavimą ir štai mes turime galingą šablonų sistemą. Bet vis dėl to jei esate pririštas prie smarty galima pasidžiaugti, kad galima kurti papildomas galimybes pačiam.

Visai neseniai man reikėjo susirasti paprastą sprendimą php komandai in_array. Smarty to nepalaiko. Pasinaudojus “insert” galimybę sukuriamas naujas pluginas.

function smarty_insert_code_in_array($params, &$smarty) { $bResult = false; if (isset($params['value']) && isset($params['array']) && is_array($params['array'])) { if (in_array($params['value'], $params['array'])) { $bResult = true; } } if (!isset($params['var'])) { $outvar = "rez_inarray"; } else { $outvar = $params['var']; } $smarty->assign($outvar, $bResult); }

Šį failą įrašome tarkim čia smarty/plugins/insert.code_in_array.php

O panaudoti gan paprasta:

{insert name="code_in_array" array=$manomasyvas value=$ieskomareiksme var="atsakymas"}

ir turėsime mes kintamąjį $atsakymas kurį jau galėsime panaudoti.

16 responses to “Smarty pluginas: in array”

  1. […] originalios „stiklainės“, pirmas dalykas ryte, stacionarus internetas mobiliajam telefonui, papildomos funkcijos neardant Smarty, belaidžiai namai, laisvai pasirenkamas komercijos lygis, būdas susipykti su dainomis, kakutis […]

  2. pumba says:

    man atrodo, kad Smarty realiai nieko nesprendzia, tik isradineja dvirati.

    vienintele verta demesio technologija templeitinimui yra XSLT.

    http://www.xml.lt/Blog/2007/06/09/Why+XSLT+is+the

  3. Juozas says:

    O gal geriau taip:

    {if $current_item|in_array:$selected_array}

    ar taip?

    {if in_array($current_item,$selected_array}

    O XSLT yra gerai, bet HTML templeitinimui man Smarty yra žymiai geriau, kam man duomenis iš pradžių perkelti į XML ir tik tada konstruoti vaizdą, jei galiu dirbti su išvedimu iškart?

  4. Algimantas Stancelis says:

    Ne paprasčiau naudoti ne insert, o function tipo pluginą?

    {code_in_array array=$manomasyvas value=$ieskomareiksme var=”atsakymas”}

  5. Nesakiau, kad smarty sistema gera. Mane daugelyje atvejų nervina, kai susiduri su stipriais apribojimais

    Juozas: 1 žinoma veikia, tik kažkodėl nenaudojau.. mano klaida. O dėl antro, nejau taip galima? Man keikiasi….

    Algimantas: variantų daug… deja tavo trumpesnis

    Anyway tebūnie čia idėja, kad galima problemas iškilusias smarty spręsti pluginų / funkcijų pagalba.

  6. grieblius says:

    O jums neatrodo kad smarty ir panašūs dalykai yra nesąmonė?

    Velnias žino kam, kiekvienas kuria savo vos ne programavimo kalbą.

    Mano nuomone yra du optimalūs variantai (bent PHP atveju):

    1. TIesiog naudoti PHP. T.y. turiu omeny, kad logika ir vaizdas atskirtas, bet kam naudoti smarty sintaksę jei galima tiesiog atvaizdavimui naudoti PHP ir tiek. Ir greičiau, ir nereikia dar kažkokios lievos sintaksės mokytis. Aišku čia reikia sąžinės, kad neįpinti su logika susijusio kodo.

    2. Yra W3 pripažintas standartas XSLT. Privalumai – standartas, migruosi į Java, ASP.NET, jau vieno gabalo nereikės perduot. Taip pat manau daug labaiau verta išmokti XSLT, nei kažkokį Smarty. Toliau – javascript irgi supportina xslt, taigi, galima ir ajax'iniams sprendimams vos ne tuos pačius template naudoti. Tikiuosi jis pradės populiarėti XSLT templeitai, nes PHP5 jau pakankamai stipriai pasistūmėjo dirbant su XML.

  7. Tadas says:

    Nezinau as asmeniskai naudojau pusantru metu Smarty, bet vis susidurdavau su pagrindine problema jo, kad negaliu paprastai apsirasyti pvz: array(1,2,3). Dabar teko skaudziai perrasineti apie 50 template failu ir pereit is smarty i paprasta PHP kuo esu labai patenkintas :)

  8. Omuo says:

    Na su smarty dirbu jau gana senai, virš 3 metų, tačiau dar neteko susidurti su kritine situacija. Nesakau, jog smarty tobulas, bet daugeliu atveju (o tiksliau, beveik visada) kylančios problemos yra tiesiog blogo sistemos techninio dizaino/planavimo padarinys. Smarty yra tiesiog templeitinimo sistema -> duomenu vaizdavimas panaudojant šablonus, kuriuos vieną kartą pasirašęs gali naudoti N kartų, žodžiu, vaizdavimo logika.

    Tuo tarpu, jei kaip aukščiau komentavęs Tadas, pradėsim apsirašinėti masyvus, kurti duomenų struktūras ar pradėti įgyventi biznio logiką tada be abejo susidursim su problemom, nes bandysim sistemą pritaikyti tokioj sferoj, kuriai jinai nėra skirta. Tada ir tenka perrašinėti po 50 šablonų…

    Grieblius

    "O jums neatrodo kad smarty ir panašūs dalykai yra nesąmonė?

    Velnias žino kam, kiekvienas kuria savo vos ne programavimo kalbą."

    Nemanau, jog templeitinimui naudoti native php yra labai protinga, vien jau dėl tos priežasties kad normalus šablonas visada bus žymiau lengviau skaitomas, nei <code>< ?…?></code> mišinys su HTML'u. Galų gale, užbaigus vieną projektą, ir pradėjus kitą, gali persinešti šablonų varikliuką ir žinoti, kad jis tikrai veiks, tuo tarpu nenaudojant šablonų turėsi persirašinėti visus failus nuo beveik nulio, nes vargu ar bus labai jau lengva narstyti HTML + php kodo pilną puslapiuką.

  9. Omuo says:

    Ir dar pridursiu :)

    XSLT – is a language for transforming XML documents into other XML documents.

    Although Smarty is known as a "Template Engine", it would be more accurately described as a "Template/Presentation Framework." That is, it provides the programmer and template designer with a wealth of tools to automate tasks commonly dealt with at the presentation layer of an application.

    Taigi sakyčiau kardinaliai skirtingus dalykus lyginat kolegos, language vs. Presentation layer framework ;)

  10. Tadas says:

    As tikrai nesiruosiau kurti biznio logikos ant templatu :) Bet kai negali apsirasyti paprasto masyvo mane tiesiog tai erzindavo, nes mano naudojami frameworkai turi ivairius helperius i kuriuos turi paduoti masyva. Bet po tiek laiko supratau, kad tikrai nera prasmes naudoti Smarty ir pats OMOU veliau tai suprasi tik palukek :) Aisku jei rasai koda nesinaudodamas niekuo tada tikrai pritariu Smarty yra gerai :)

  11. grieblius says:

    To OMUO:

    XSL is a family of recommendations for defining XML document transformation and presentation.

    Taip, tai yra XML presentavimas, o pvz. validus XHTML yra ne kas kitas kaip XML. Aišku, gal prieš tai reikia PHP struktūras perrašyti į XML objektus, bet manau, kad šiuo metu tai nėra didelė problema (performance'as čia gal skaudžiausia vieta, bet čia aišku reikia lyginimų, be to apsirašius normalius kešavimo mechanizmus, manau galima gauti neblogą php/xsl template engine'ą)

    O dėl Smarty skaitomumo – galbūt, čia jau subjektyvu, bet jei žinai php, tai nemanau kad bus problemų, ypač jei stengiesi naudoti php tik prezentavimui. Dėl pernešimo – nemanau, kad taip lengvai persineša, juk smarty yra tik php skirtas, tai tada jau ar php kodas ar smarty – pernešimas lyg ir tas pats.

    O va xsl pernešimas jau visai kas kita – galima pernešti ne tik ant php bet ir visakur praktiškai. Be to kaip minėjau galima tuos pačius serverside naudojamus php sugeneruotus XML ir paruoštus XSL pernaudoti AJAX'iniems reikaliukams, t.y. išnešimui į clientside.

    Beje, dar php xslt extensionas turi tokius featurus, jog xsl dokumente galima kviesti PHP funkcijas. Na čia jau nuokrypis nuo standarto – pliusas lankstumui, minusas, kad jau pernešti į ne php sistemas ne taip lengva.

    P.S. Čia mano postringavimai tik teoriniai, bet manau artimiausiu metu ką nors reiks pabandyti su php/xml/xsl, juolab, kad skaičiau jog su PHP xlst extensionu, xml transforminimas vyksta labai greitai. Bet kaip jau sakiau, praktiškam panaudojimui reikia proof of concept pasidaryti.

  12. Omuo says:

    2 Tadas:

    Na sorry, bet tikrai nesuprantu kuriems galams masyvus apsirašinėti templeite. Jei templeito pagrindinis tikslas yra vaizduoti, tai kam pradėt naudoti jį kitais tikslais? Ar gali pamineti rimtą pavyzdį, kada tai reiktų daryti? Ir šiaip jau nežinau frameworko kuriame šablonuose reiktu kurtis kažkokius helperius. Galu gale šablonas jau yra galutinis taškas vaizdavime ir tikrai nematau tikslo tenais pradėti apsirašinėti struktūras. Taip kad tikrai būtų įdomu pamatyti pavyzdį.

    Beje, tavo tvirtinimas "Bet po tiek laiko supratau, kad tikrai nera prasmes naudoti Smarty ir pats OMOU veliau tai suprasi tik palukek :) " yra visiškai į pievas. Kaip sakant no offence, bet šitas teiginys man primena 1 kurso studentų pasakymus "Kam čia tas objektinis reikalingas, gi su funkcijom viskas žymiai paprasčiau ir lengviau".

  13. Omuo says:

    2 Grieblius:

    Aš nieko neturiu prieš XML/XSLT ir t.t. Taip, tai tikrai geras įrankis. Tik mano nuomone, konkrečiai užduočiai turi būti konkretus sprendimas ir technologijų naudojimas vardan technologijų naudojimo yra betikslis. Toks dalykas kaip migravimas nuo vienos kalbos prie kitos yra pakankamai retas reiškinys rimtuose projektuose, o daugelyje projektų neretai toks migravimas yra ne vien sintaksės, bet ir logikos, koncepcijos keitimas. Aišku, jei yra didelis lankstumo, pritaikomumo poreikis, tada taip, tikrai yra geresnių sprendimų už Smarty. Bet jis ir neturi pretenzijų į kažką daugiau, nei šablonizavimo varikliuką :) Jis niekada nebuvo skirtas pernešamumui, jis orientuotas į tam tikrą konkrečią sferą ir viskas.

    Paprasta situacija, dizaineris ir programeris. Dizaineris nupiešia, sukarpo, sudėlioja html, css ir tam tikras smarty žymes, programeris tiesiog turi į tas žymes paduodi reikiamas reikšmes. Programeriui nereikia žinoti visų html niuansų, lygiai taip pat dizaineriui nereikia suprasti, kaip po galais PHP klases apsirašinėti. Dabar pašalinam šablonų varikliuką (tegu tai bus netgi nebutinai smarty), ir gaunam, jog abudu turės gerokai daugiau vargo. Čia aišku ko gero ideali situacija, nes Lietuvoj kiekvienas programeris yra dizaineris ir kiekvienas dizaineris – programeris :)

  14. Laimonas says:

    Jo sutinku cia gera tema.
    su PHP kodu dirbu puse metu isbandziau visokius frameworkus bei templatinimo sistemas ir priejau isvados kad viso sito paprasciausia nereikia.
    Uztenka laikytis standartiniu programos architekturos taisykliu ir viskas. Kodas pasidaro skaitomas aiskus ir valdomas mano ideja tokia programa susidaro is dvieju medzio tipo strukturu viena isrisa URL kita HTML. url isrisinejimo pavizdys pvz: person/list/new/page/1/ toks Url sako kad veiksmas bus atliktas su person objektu “list” sako koks veiksmas bus atliktas su objektu sio atvejiu bus grazinamas sarasas, “new” argunetas kad duomenis bus nufiltruoti, “page” puslapiavimas. as bandziau pritaikyti wrapper paterna ir manau kad jis labai tinka skriptinem kalbom. cia bandymo kodas http://code.google.com/p/phpda.....ce/browse/ ten nera jokiu frameworku bei templeiu.

  15. Laimonas says:

    http://www.miss-internet.lt/ parasytas taikant tokia metodika.

Leave a Reply to Laimonas Cancel reply

Your email address will not be published. Required fields are marked *

> home
  • Apie mane
  • Apklausos
  • Blogas
  • Lietblogs Search
  • Nuorodos
  • Reklama mano bloge
  • Search
  • Tags
  • Testas
  • Projektai
  • Kontaktuok
  • Archyvas