Pereiti prie turinio

Rekomenduojami pranešimai

Sveiki, taigi prirendo reikalas mokytis kurti puslapius naudojant Smarty, tik vat, bandau vis suprast kaip normaliai ji naudoti. Skaičiau aš ir pixel.lt

straipsnį, gal galima būtų rasti koį nors simple pavyzdį veikiančio puslapio. Nes dabar paskaitęs apie tai, susidaro įspūdis, kad naudojant smarty, tekstas tampa kėblesnis, nesuprantamiškesnis.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Tai čia aš jau nagrinėsiuos, kai turėsiū kokį nors detalesnį klausimą. Aš tiesiog noriu pamatyt simple puslapio kodelį, kaip veikia šis phemplate. Pavyzdiui, yra puslapis jame registruojasi vartotojai, jie gali pakeisti savo slaptazodi. Kaip tai turėtų atrodyt?

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Nežinau, ar tu teisingai supranti, kas yra template engine. Šis „varikliukas“ atskiria php kodą nuo HTML, yra labai naudingas dalykas, jeigu gerai jį įvaldai.

O principas maždaug toks:

 

switch($action)
{
default:

$TPL->display('koks_nors_sablono_failas.tpl');
$TPL->assign('test', 'Cia pagrindinio puslapio uzrasas');

break;

case 'registracija':

$TPL->display('registracijos_sablono_failas.tpl');
$TPL->assign('test', 'O cia registracija');

break;
}

 

Na ir vėliau atitinkamai šablono failuose:

 

{$test}

 

Čia labai primityvus pavyzdys.

Redagavo adijux
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Tai o čia kokiu principu jis veikia $_GET['id'].. ? Nes ten parašei default:... case:registracija, tai kur nurodamas tas "case".

.tpl failuose rašomas paprastas php tekstas? Ar registracija jau yra integruota i smarty varikliuką?

$TPL->display('registracijos_sablono_failas.tpl');
$TPL->assign('test', 'O cia registracija');

Kodėl rašoma du kartus, t.y. šablonas, tai ar nėra pati registracija?

 

{$test}

Čia į kurią dalį index.html rašoma? "contentą"?

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Matau, kad vis tiek nesupratai. :lol:

 

$action kintamasis buvo kaip pavyzdys, jis gali atstovauti $_GET['id'], $_GET['action'], $_GET['page'] ar ką tik nori. Switch veikimas būtų toks pat kaip su if sąlygos sakiniais.

 

if(!isset($action) OR $action == '')
{
// Cia tavo default'inis puslapis
}
elseif(isset($action) AND $action == 'registracija')
{
// Cia registracijos puslapis
}

 

Tarkime, kad $action = $_GET['action'], o php failo pavadinimas — index.php. Taigi jeigu užeinama į index.php?action= arba index.php, rodomas defaultinis puslapis, jeigu index.php?action=registracija — registracijos puslapis.

 

Šablono failuose rašai HTML/CSS kodą ir naudoji Smarty sintaksę. Jeigu tu šablono failuose rašysi php kodą, tai apskritai visas „varikliukas“ neteks prasmės.

Štai paprasta svetainės struktūra su smarty:

 

libs/smarty — pagrindiniai „varikliuko“ failai;

templates — šablono failai;

templates_c — kešo aplankalas;

index.php — visas svetainės php skriptas.

 

Ar supranti idėją? Visa svetainės logika slypi index.php faile, išvaizda/dizainas — templates aplankalo šablono failuose.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Na tokias sitemas per sunku būtų dar nagrinėti man.

Tai o pvz jeigu as turiu puslapį jame yra pvz left menu ir content. jeigu left menu paspaudziu register, kad atsirast contente regsitration blankas, tai kaip turetu atrodyti templeitas :

<body><div class="left>Cia menu kur mygtukas registracija</div>
<div class="content">Cia turi pasirodyti registracija</div></body>

kaip suprantu i content reikia parasyt :

switch($action)
{
default:

$TPL->display('koks_nors_sablono_failas.tpl');
$TPL->assign('test', 'Cia pagrindinio puslapio uzrasas');

break;

case 'registracija':

$TPL->display('registracijos_sablono_failas.tpl');
$TPL->assign('test', 'O cia registracija');

break;
}

O i meniu ką? Tiesiog su html surinkti <a href.... ? .

Pagrindiniam index.php kaip turėtų būti išdėstoma? tieisog viskas paeliui? Na pavyzdžiui surašyti visus $action galimybes. O pvz jeigu dar registracija jame yra tai reikia kazkaip aprasyti duomenu tikrinima?

Bei kaip ta visa tekstą parodyti templeituose, jeigu pvz sarasas. Is Mysql paimta pavyzdžiui n eilučių ir puslapis turi parodyt.

Redagavo EdFoX
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Galima daryti taip:

 

index.php failas:

 

<?php

//-------------------------------------------------------------------------------
// * Failą deinu pagal ankstesniam pranešime parašytą failų struktūrą
//-------------------------------------------------------------------------------

// Įtrauki reikalingus Smarty failus
include('libs/smarty/Smarty.class.php');

// Inicijuojam smarty klasę
$SMARTY = new Smarty;

// Čia masyvas, kuris saugos visas reikalingas Smarty reikšmes
$CONTENT = array();

$CONTENT['TITLE'] = 'Mano svetaines pavadinimas';
$CONTENT['MSG'] = ''; // Tai bus pranešimo apie klaidą smarty kintamasis
$main_file = 'index.tpl'; // Tai pagrindinis šablono failas
$action = $_GET['action'];

switch($action)
{

default:

// Tai default'inis puslapio šablono failas
$CONTENT['TPL'] = 'home.tpl';

break;

case 'registracija':

// Registracijos puslapio šablono failas
$CONTENT['TPL'] = 'registration.tpl';

// Tarkime, kad buvo paspaustas mygtukas registruotis
if(isset($_POST['registruotis']))
{

	$username = $_POST['username'];
	$password = $_POST['password'];
	$email = $_POST['email'];

	if(empty($username) OR empty($password) OR empty($email))
	{
		$CONTENT['MSG'] = 'Palikote tuščių laukelių!';
	}
	else
	{
		 // Registruojame naują vartotoją į DB

		// Vėliau galime perkelti lankytoją į kitą puslapį, pavyzdžiui, su Header('Location: index.php');

	}

}

break;

}

$SMARTY->assign($CONTENT, $CONTENT); // priskiriame visas reikšmes smarčiui 
$SMARTY->display($main_file); // nurodome pagr. šablono failą

?>

 

Na, o toliau index.tpl faile:

 

<html>
<head>
	<title>{$TITLE}</title>
</head>
<body>
	{file include="$TPL}
</body>
</html>

 

Taigi, jeigu action metodas nenurodytas arba nurodytas neapibrėžtas, imama default'inis šablono failas. Jeigu registracija, tada include'inamas register.tpl failas. Tikiuosi idėją supratai.

Nežinau, ar skriptas veiks (dar juk trūksta home.tpl ir register.tpl failų), čia dabar ką tik greitai parašiau norėdamas parodyti patį principą. Taip pat čia yra daug saugumo spragų šitam pavyzdy, bet visko gi neparašysiu čia. :lol:

Jeigu kas neaišku, gali susisiekt per skype, paaiškinsiu. :)

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Prisijunkite prie diskusijos

Jūs galite rašyti dabar, o registruotis vėliau. Jeigu turite paskyrą, prisijunkite dabar, kad rašytumėte iš savo paskyros.

Svečias
Parašykite atsakymą...

×   Įdėta kaip raiškusis tekstas.   Atkurti formatavimą

  Only 75 emoji are allowed.

×   Nuorodos turinys įdėtas automatiškai.   Rodyti kaip įprastą nuorodą

×   Jūsų anksčiau įrašytas turinys buvo atkurtas.   Išvalyti redaktorių

×   You cannot paste images directly. Upload or insert images from URL.

Įkraunama...
  • Dabar naršo   0 narių

    Nei vienas registruotas narys šiuo metu nežiūri šio puslapio.

×
×
  • Pasirinkite naujai kuriamo turinio tipą...