خودآموز Smarty Template Engine

ارسال شده توسط administrator
17. جانفييه 2012 19:29

خودآموز Smarty Template Engine

هنگام طراحی پروژه های وب، مهم است که کار طراحی نحوه نمایش (presentation) را از برنامه کاربردی جدا کنیم. به طور ساده، می توانید بدون در نظر گرفتن ظاهر نمایش (لایه pressentation)، محتوا را از قبل تولید کنید. یا می توانید ظاهر برنامه را بدون در نظر گرفتن کد برنامه بنویسید. این نقشی است که قالب های Smarty قرار است بازی کند.

در ابتدا، Smarty قرار بود به عنوان "موتور قالب" به کار رود. ولی، الان ادعا می شود که Smarty نه تنها یک موتور قالب که یک فریمورک (framework) ، برای template/presentation است. framework به این معناست که Smarty دیگر تنها یک تگ ساده موتور قالب نیست. Smarty طراحی شده تا بتوانید برنامه ای کارا، امن و مقیاس پذیر (scalable) بنویسید.

Smarty چیست؟

·         فریمورکی که وظیفه اش جدا کردن لایه نمایش است.

·         به شما اجازه می دهد که کد منطق برنامه را از نحوه نمایش داده جدا کنید.

·         طراحی سریع و بی دردسر دارد

نصب Smarty

1.      دایرکتوری تمرین را اماده کنید، مثلا www/test/smart.

2.      Smarty Template را دانلود کنید. انرا داخل دایرکتوری تمرین بگذارید. بنابراین، مثلا داریم: www\test\smarty\Smarty-2.6.19.tar.gz.

3.      فایل فشرده شدا Smarty را استخراج کنید. پوشه ای به نام، مثلا، Smarty-2.6.19 خواهیم داشت.

4.      برای ساده تر شده پوشه را به Smarty تغییر نام دهید.

5.      دو پوشه با نام های template و template_c بسازید. ساختاری شبیه شکل خواهیم داشت:

clip_image001[6]

اولین Smarty

بعد از ساخت پوشه های مورد نیاز، انرا ازمایش می کنیم. می خواهیم صفحه ای بسازیم که متن Hello را نمایش دهد.

 

اول فایل قالب. داخل پوشه template فایلی با نام test.tpl بسازید. کد زیر را در ان وارد کنید:

1

<html>

2

  <head>

 

3

    <title>{$title}</title>

4

  </head>

 

5

  <body>

6

    {$hello}

 

7

  </body>

8

</html>

بعد درون پوشه www/test/smarty، یک فایل PHP به نام test.php بسازید. کد زیر را وارد کنید:

1

<?php

2

require 'Smarty/libs/Smarty.class.php';

 

3

 

4

$smarty = new Smarty;

 

5

 

6

$smarty->assign('title','Hello World');

 

7

$smarty->assign('hello','Hello World, this is my first Smarty!');

8

$smarty->display('test.tpl');

 

9

?>

ساختار پوشه های ما اینگونه باید باشد:

clip_image002[6]

حالا با رفتن به آدرس http://localhost/test/smarty/test.php  انرا تست می کنیم. باید نتیجه ای شبیه این داشته باشید:

clip_image003[6]

 

اصول پیش نیاز

تمام دستورات Smarty درون {} قرار می گیرد. اصول Smarty که باید بدانید را برسی می کنیم.

کامنت

کامنت جمله ای است که به کد اضافه می شود تا درباره ان توضیح دهد. در Smarty کامنت ها بین {* و  *} قرار می گیرد:

1

<Body>

2

{* this template use Smarty! *}

 

3

{* put any code at here! *}

4

</Body>

متدها

مانند دیگر کلاس ها، Smarty هم متد دارد. مثالی کوتاه ببینید. بعدا بیشتر خواهیم گفت:

1

<Body>

2

{config_load file="colors.conf"}

 

3

{include file="header.tpl"}

4

{if $somebody}

 

5

Wellcome, {$name}

6

{else}

 

7

Who are you?!?

8

{/if}

 

9

</Body>

   

Attribute

مانند HTML، تگ ها و دستورات Smarty هم می تواند Attribute داشته باشد. مثال:

1

<Body>

2

{include file="footer.tpl"}

 

3

</Body>

متغیر ها

1

<Body>

2

{func var="test $foo test"}

 

3

{func var="test $foo_bar test"}

4

{func var="test $foo[0] test"}

 

5

{func var="test $foo[bar] test"}

6

{func var="test $foo.bar test"}

 

7

{func var="test `$foo.bar` test"}

8

</Body>

عملیات های ریاضی

1

<Body>

2

{$foo * $bar}

 

3

{$foo + $bar}

4

</Body>

متغیر ها: آرایه های Associative

در زیر مثالی ار آرایه های Associative در Smarty امده است:

فایلی به نام Test.php بسازید و کد زیر را ئوارد کنید:

01

<?php

02

require 'Smarty/libs/Smarty.class.php';

 

03

 

04

$smarty = new Smarty;

 

05

 

06

$smarty->assign('title','Contact Detail');

 

07

$smarty->assign('contact',array('id'=>1,

08

                                'name'=>'Wiwit',

 

09

                                'email'=>'wsiswoutomo at yahoo dot com',

10

                                'phone'=>'123456789'

 

11

                                ));

12

$smarty->display('test.tpl');

 

13

?>

 

بعد، با تولید فایلی به نام Test.tpl درون پوشه template قالب ان را بسازید. کد زیر را وارد کنید:

01

<html>

02

  <head>

 

03

    <title>{$title}</title>

04

  </head>

 

05

  <body>

06

    id : {$contact.id} <br>

 

07

    name : {$contact.name} <br>   

08

    email : {$contact.email} <br>   

 

09

    phone : {$contact.phone} <br>   

10

  </body>

 

11

</html>

 

متغیرها: آرایه اندیس دار

مثال از آرایه اندیس دار در Smarty:

فایلی به نام test.php نوشته و کد زیر را وارد کنید:

1

<?php

2

require 'Smarty/libs/Smarty.class.php';

 

3

 

4

$smarty = new Smarty;

 

5

 

6

$smarty->assign('title','Contact Detail');

 

7

$smarty->assign('contact',array(1,'Wiwit','wsiswoutomo at yahoo dot com','123456789'));

8

$smarty->display('test.tpl');

 

9

?>

بعد، با تولید فایلی به نام Test.tpl درون پوشه template قالب ان را بسازید. کد زیر را وارد کنید:

01

<html>

02

  <head>

 

03

    <title>{$title}</title>

04

  </head>

 

05

  <body>

06

    id : {$contact[0]} <br>

 

07

    name : {$contact[1]} <br>   

08

    email : {$contact[2]} <br>   

 

09

    phone : {$contact[3]} <br>   

10

  </body>

 

11

</html>

متغیر ها: شی

اینجا نحوه دسترسی به داده های کلاس را می بینیم:

فایلی به نام test.php نوشته و کد زیر را وارد کنید:

01

<?php

02

require 'Smarty/libs/Smarty.class.php';

 

03

 

04

class Contacts{

 

05

  var $id   = 1;

06

  var $name = 'wiwit';

 

07

  var $email = 'wsiswoutomo at yahoo dot com';

08

  var $phone = '123456789';

 

09

}

10

 

 

11

$contact = new Contacts;

12

 

 

13

$smarty = new Smarty;

14

 

 

15

$smarty->assign('title','Contact Detail');

16

$smarty->assign('contact',$contact);

 

17

$smarty->display('test.tpl');

18

?>

بعد، با تولید فایلی به نام Test.tpl درون پوشه template قالب ان را بسازید. کد زیر را وارد کنید:

01

<html>

02

  <head>

 

03

    <title>{$title}</title>

04

  </head>

 

05

  <body>

06

    id : {$contact->id} <br>

 

07

    name : {$contact->name} <br>   

08

    email : {$contact->email} <br>   

 

09

    phone : {$contact->phone} <br>   

10

  </body>

 

11

</html>

متغیرهای داخل فایل پیکره بندی

ما می توانیم متغیرهایی را در فایل پیکره بندی ذخیره کنیم. برای مثال مان، باید داخل ریشه برنامه (مثلا www/test/smarty)، یک پوشه به نام configs بسازیم. بنابراین خواهیم داشت www/test/smarty/configs.

یم فایل پیکره بندی با پسوند cong بسازید، مثلا setting.conf. کد نمونه زیر را وارد کنید:

1

pageTitle = "Hello, World"

2

bodyColor = "#EAEAEA"

 

بعد، با تولید فایلی به نام Test.tpl درون پوشه template قالب ان را بسازید. کد زیر را وارد کنید:

01

{config_load file="setting.conf"}

02

<html>

 

03

  <head>

04

    <title>{#pageTitle#}</title>

 

05

  </head>

06

  <body bgcolor="{#bodyColor#}">

 

07

    id : {$contact->id} <br>

08

    name : {$contact->name} <br>   

 

09

    email : {$contact->email} <br>   

10

    phone : {$contact->phone} <br>   

 

11

  </body>

12

</html>

فایلی به نام test.php بسازید و کد زیر را در ان وارد کنید:

01

<?php

02

require 'Smarty/libs/Smarty.class.php';

 

03

 

04

class Contacts{

 

05

  var $id   = 1;

06

  var $name = 'wiwit';

 

07

  var $email = 'wsiswoutomo at yahoo dot com';

08

  var $phone = '123456789';

 

09

}

10

 

 

11

$contact = new Contacts;

12

 

 

13

$smarty = new Smarty;

14

 

 

15

$smarty->assign('contact',$contact);

16

$smarty->display('test.tpl');

 

17

?>

متغیر های رزرو شده

مثال زیر نشان می دهد چگونه به مقادیر پارامتر http و بقیه دسترسی داشته باشیم:

GET

از ادرس http://localhost/test/smarty/test.php?page=about

1

<html>

2

  <head>

 

3

    <title>Page {$smart.get.page}</title>

4

  </head>

 

5

  <body bgcolor="{#bodyColor#}">

6

    page: {$smarty.get.page} <br>

 

7

  </body>

8

</html>

POST

1

{$smarty.post.page}

Cookie

1

{$smarty.cookie.page}

SERVER

1

{$smarty.server.SERVER_NAME}

session

1

{$smarty.session.page}

 

تگ ها:

دسته بندی ها: