Topic: Smarty .tpl

Sveiki asai,

Pradėjau domėtis "Smarty", iškilo keletas klausimų todėl  prašau jūsų nuomonės.

Tarkime, kad turime struktūrą .tpl:

main.tpl
header.tpl
login.tpl
profile.tpl
footer.tpl

Suprantama, kad viską reiktų "sukišti" į main.tpl, t.y. kad atvaizduotų header'į, login'ą/profilį, footer'į. Dabar kyla klausimas man su tuo arba arba (/), kaip paduoti smarčiui ką reikia atvaizduoti, login.tpl ar profile.tpl.
Aš mastau daryti taip, pirmiausia pačiame php kode priskirti kažkokį var, pvz:

....
$var logged = FALSE;
....
$this->tpl->assign('logged', $this->logged);
$this->tpl->display('main.tpl');
....

Po to main.tpl failiuke:

{if ($logged== FALSE) }
 {include file=”login.tpl”}
{else}
{include file=”profile.tpl”}

Na, o po to kintamuosius jau automatiškai paduodi į .tpl pagal situaciją atvaizduojant kažką.
Ar į tą pusę mastau?
Jeigu ne būtų malonu jeigu pataisytumėt, vis gi, su Smarty dar tik antra diena susipažindinėju. :)

Re: Smarty .tpl

Viskas į tą pusę. Galima dar ir taip: su PHP nuspręsti ką krauti, o smarty paduoti tik šablono pavadinimą. Skirtumas tas, kur tu nori turėti daugiau veikimo logikos - šablone ar PHP. Ilaginiui tikriausiai norėsi kuo daugiau logikos valdyti iš PHP, o smarty palikti tik neesminius klausimus.

Re: Smarty .tpl

Ačiū Minde už komentarą, patarimus. :)
Na, bet kokiu atveju, kaip ir pats minėjai logiką reiktų palikti būtent PHP. :)

Re: Smarty .tpl

aš visvien nesuprantu to smarty:
{if ($logged== FALSE) }...

P.S smarty turėjo būt išjungtas kartu su register_globals...

Kiek maigyklių sudėvėjai ?

Re: Smarty .tpl

md5 wrote:

aš visvien nesuprantu to smarty:
{if ($logged== FALSE) }...

P.S smarty turėjo būt išjungtas kartu su register_globals...

Ta prasme tu nori pasakyt, kad čia globalus kintamasis? Aš taip nemanau..

Re: Smarty .tpl

kitaip paklausiu, kas yra smarty, be registry pattern;o ir kodėl visi taip myli?
esmė, jog tai eilinis tempteitas;)

Kiek maigyklių sudėvėjai ?

Re: Smarty .tpl

md5 wrote:

kitaip paklausiu, kas yra smarty, be registry pattern;o ir kodėl visi taip myli?
esmė, jog tai eilinis tempteitas;)

čia kitas klausimas. Kaip tu ir sakei - eilinis template engine. Bet kuriuo atveju jis padaro daugiau negu vien tik <?php echo $variable; ?>, tą daugiau programuotis pačiam niekas nenori, todėl ir naudoja tokius varikliukus, o smarty tiesiog yra labiausiai išpopuliarintas.

8 (edited by qutwala 2011-05-17 00:11:13)

Re: Smarty .tpl

mhm.
Dar vienas klausimas. :)
Nusipiešiau dizainą, iš pradžių jį susikodavau .css .html, smarty .tpl interpretuoja, kaip .html tik + visokių pribumbasų, tačiau tarkim visą tą šabloną iš .html nukopijavus į tą layout.tpl ir per php atvaizdavus:

$this->tpl->display(layout.tpl');

Visą dizainą visiškai iškraipo.
Pačiame html'e be div'ų ir css link'ų daugiau nieko nėra.
Gal yra galinčių užvest ant kelio, ką ne taip darau?
O gal stiliams visai kitaip daroma, smarty's naudojamas tik visokiom lentelėm ir panašiai? Bet nebūtų template engine'as jeigu tik lentutėm visokiom, o ne visam layout'ui..

Re: Smarty .tpl

pasitikrink ar tikrai css stiliai ikeliami, kazkaip tiketina kad css neuzsikrauna tau, nes smarty niekaip negali paveikti tavo html dizaino.

Re: Smarty .tpl

Smarty gali interpretuoti "{" ir "}", kas dažniausiai būna embedded css arba js. O šiaip tai reikia žiūrėti source ir spręsti, kodėl neveikia stiliai. Antra dažniausiai problema - neteisingas kelias iki css failo.

Re: Smarty .tpl

Ačiū už atsakymus.
Na dairausi po netą, jau mačiau įvairiausių variantų, kad ir .css formate: .tpl :D
Tai, kad bajeris tame, jog iš html į .tpl konvertavus ir per smarty atvaizdavus užkrauna visus paveiksliukus, tiesiog juos iškraipo, o tą patį .tpl konvertavus vėl į .html vėl viską tvarkingai rodo.. :D
Turbūt imsiu ir perkoduosiu..

Re: Smarty .tpl

Pats naudoju ir domiuosi Smarty, tai ką galiu pridurti temos autoriui - visiškai klaidingas smarty panaudojimo supratimas. Jei būtum paskaitęs smarty tutorialus ar examples pavartęs nuosekliau, ten radęs būtum jog Smarty idėja - atskirti logiką nuo prezentacijos.

{if ($logged== FALSE) }
 {include file=”login.tpl”}
{else}
{include file=”profile.tpl”}

Taip, tai veikia, tačiau mano supratimu tai yra blogas smarty panaudojimo pavyzdys ir tokiu keliu mąstant, tavo tpl puslapis taps panašus į PHP, su pilna if ir else. Tokias sąlygas reikia naudoti PHP faile ir ten daryti išvedimus. Nieko baisaus, pradžioje ir aš tokias klaidas dariau (įprastas mastymas PHP programuotojui), tačiau kiekvieną kartą atsidarius .tpl failą reikia prisiminti - čia neturi būti logikos, o tik atvaizdavimas. Tam, kad nesakytum jog tuščiažodžiauju duodu pavyzdį tavo atvejui:

<?php

# Plius pavyzdukas kintamas title panaudojimas

if( user tikrinimo sąlyga ) { // aš pvz. čia tikrinu user access per kokią nors klasę ar sesijas
    $smarty->assign('title', 'Welcome', true); // true = nocache.
    $smarty->display('index.tpl');

} else { // useris neprisijungęs, todėl parenkam kitą template -> login.tpl

    $smarty->assign('title', 'Please Login', true);
    $smarty->display('login.tpl', true);
}

?>

Na o .tpl failiukuose viskas paprasta. Na ir nepamirštam - jokios logikos dėl title:

<title>{$title}</title>

Blogo pavyzdžio atveju rašytum:

<title>{if $smarty.template == 'login.tpl'}Please Login{else}Welcome{/if}</title>

PHP, MySQLi, Smarty, jQuery, Ajax, Eclipse