Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«ΠšΡƒΡ€Ρ "Π―Π·Ρ‹ΠΊ программирования PHP"Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 47

Автор Нина БавСльСва

Ρ‚ΠΎ эта функция Π½Π°ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅

ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ MAIN */

$tpl->FastPrint("MAIN");

// эта функция сдСлаСт Ρ‚ΠΎΠΆΠ΅ самоС



Если Π½ΡƒΠΆΠ½ΠΎ ΠΏΠ΅Ρ‡Π°Ρ‚Π°Ρ‚ΡŒ Π½Π΅ Π½Π° экран, Π°, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² Ρ„Π°ΠΉΠ», Ρ‚ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ссылку Π½Π° Π΄Π°Π½Π½Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° fetch().


$data = $tpl->fetch("MAIN");

fwrite($fd, $data); // запись Π΄Π°Π½Π½Ρ‹Ρ… Π² Ρ„Π°ΠΉΠ»



РСшСниС Π·Π°Π΄Π°Ρ‡ΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ шаблонов FastTemplate


Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ Π²ΠΎΠ΅Π΄ΠΈΠ½ΠΎ всС ΠΈΠ·ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ Π½Π°ΡˆΡƒ Π·Π°Π΄Π°Ρ‡Ρƒ.


Π—Π°ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π·Π°Π΄Π°Ρ‡ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ нСсколько Π±ΠΎΠ»Π΅Π΅ слоТным, Ρ‡Π΅ΠΌ Π² ΠΏΠ΅Ρ€Π²ΠΎΠΌ случаС, ΠΊΠΎΠ³Π΄Π° использовалась Ρ‚ΠΎΠ»ΡŒΠΊΠΎ функция рСгулярной Π·Π°ΠΌΠ΅Π½Ρ‹. Π—Π°Ρ‚ΠΎ здСсь ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ Ρ‚Ρ€ΠΈ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… шаблона (Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° Π² Ρ†Π΅Π»ΠΎΠΌ, списка ΠΈ элСмСнта списка).


Π­Ρ‚ΠΎΡ‚ класс шаблонов появился Π΅Ρ‰Π΅ Π΄ΠΎ Π²Ρ‹Ρ…ΠΎΠ΄Π° PHP4 для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с PHP3. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΡ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹, Π½ΡƒΠΆΠ½ΠΎ ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ классов FastTemplate ΠΈ ΡΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ этот Ρ„Π°ΠΉΠ» Π² свою Ρ€Π°Π±ΠΎΡ‡ΡƒΡŽ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ. Если Π²Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚Π΅ с PHP4, Ρ‚ΠΎ Π² Ρ„Π°ΠΉΠ» class.FastTemplate.php3 Π½ΡƒΠΆΠ½ΠΎ внСсти ΠΏΠ°Ρ€Ρƒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, ΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… написано Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ, ΠΏΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π΅ΠΉΡΡ вмСстС с этой Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ.


Π¨Π°Π±Π»ΠΎΠ½Ρ‹ Smarty


Smarty - ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² PHP, Π΅Π³ΠΎ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ сайт - http://smarty.php.net. Π’Π°ΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ сам Π½Π°Π±ΠΎΡ€ классов Smarty, Ρ‚Π°ΠΊ ΠΈ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ ΠΊ Π½Π΅ΠΌΡƒ. Π­Ρ‚ΠΎΡ‚ Π½Π°Π±ΠΎΡ€ классов для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ шаблонов - Π³ΠΎΡ€Π°Π·Π΄ΠΎ Π±ΠΎΠ»Π΅Π΅ ΠΌΠΎΡ‰Π½Ρ‹ΠΉ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ, Ρ‡Π΅ΠΌ FastTemplate.Π§Π΅ΠΌ отличаСтся Smarty ΠΎΡ‚ классов шаблонов Ρ‚ΠΈΠΏΠ° FastTemplate? ΠŸΡ€Π΅ΠΆΠ΄Π΅ всСго, ΠΎΠ½ Π½Π΅ отдСляСт ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π»ΠΎΠ³ΠΈΠΊΡƒ ΠΎΡ‚ содСрТания. Π›ΠΎΠ³ΠΈΠΊΠ°, ΠΊΠ°ΡΠ°ΡŽΡ‰Π°ΡΡΡ отобраТСния Π΄Π°Π½Π½Ρ‹Ρ…, ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π² шаблонС, ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Smarty. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π² шаблонС Smarty ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ условныС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹, ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ вставки Ρ„Π°ΠΉΠ»ΠΎΠ², ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ измСнСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, Ρ†ΠΈΠΊΠ»Ρ‹ ΠΈ Ρ‚.ΠΏ. Другая ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ Smarty - это компиляция шаблонов. Π¨Π°Π±Π»ΠΎΠ½Ρ‹ пСрСводятся Π² php-ΠΊΠΎΠ΄, ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ PHP ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ всС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ дСйствия ΠΏΠΎ подстановкС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ. Для ускорСния Ρ€Π°Π±ΠΎΡ‚Ρ‹ скомпилированныС ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ ΠΊΡΡˆΠΈΡ€ΡƒΡŽΡ‚ΡΡ.


Рассмотрим Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ основныС конструкции ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° шаблонов Smarty.


Установка


ΠŸΠ΅Ρ€Π²ΠΎΠ΅, с Ρ‡Π΅Π³ΠΎ ΠΌΡ‹ Π½Π°Ρ‡Π½Π΅ΠΌ, - это установка Smarty. Π—Π΄Π΅ΡΡŒ всС Π½Π΅ Ρ‚Π°ΠΊ просто, ΠΊΠ°ΠΊ с FastTemplate. Smarty состоит Π½Π΅ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ php-Ρ„Π°ΠΉΠ»Π° с описаниСм класса, Π° ΠΈΠ· Ρ†Π΅Π»ΠΎΠ³ΠΎ Π½Π°Π±ΠΎΡ€Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ²-Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ. Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с шаблонами Smarty, Π½ΡƒΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ эти Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ доступными для всСх Π²Π°ΡˆΠΈΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ. Находятся ΠΎΠ½ΠΈ Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ /libs/ дистрибутива Smarty. Π€Π°ΠΉΠ», Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ содСрТится ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ самого класса Smarty, называСтся Smarty.class.php. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, доступны Π»ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ класса Smarty, Π½ΡƒΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ скрипт:


<?

require('Smarty.class.php');

// ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌ Ρ„Π°ΠΉΠ» с

// описаниСм класса Smarty

$smarty = new Smarty;

// создаСм экзСмпляр класса Smarty

?>



Если ΠΏΡ€ΠΈ Π΅Π³ΠΎ исполнСнии появилась ошибка, Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· пСрСчислСнных Π½ΠΈΠΆΠ΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ².


<?

// ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌ Ρ„Π°ΠΉΠ» с описаниСм класса

require('c:/users/my/Smarty/libs/

Smarty.class.php');

$smarty = new Smarty;

// создаСм экзСмпляр класса Smarty

?>



- Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ, Π³Π΄Π΅ содСрТатся Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, Π² include_path (Π² этом случаС ΠΊΠΎΠ΄ ΠΌΠ΅Π½ΡΡ‚ΡŒ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ).


<?

define("SMARTY_DIR",

"c:/users/my/Smarty/libs/index.html");

require(SMARTY_DIR."Smarty.class.php");

$smarty = new Smarty;

?>



Π’Π΅ΠΏΠ΅Ρ€ΡŒ, послС Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ ΠΌΡ‹ ΡƒΠ±Π΅Π΄ΠΈΠ»ΠΈΡΡŒ, Ρ‡Ρ‚ΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π±ΡƒΠ΄ΡƒΡ‚ Π½Π°ΠΉΠ΄Π΅Π½Ρ‹, Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ Smarty, ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠ΅ Ρ‚Π°ΠΊΠΈΠ΅ ΠΈΠΌΠ΅Π½Π°:


- templates - дирСктория, Π³Π΄Π΅ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ созданныС ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹;


- templates_c - дирСктория, Π³Π΄Π΅ Smarty Π±ΡƒΠ΄Π΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ скомпилированныС ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹;


- configs - дирСктория для хранСния ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ²;


- cache - дирСктория для кэша.


Π­Ρ‚ΠΈ ΠΈΠΌΠ΅Π½Π° Π·Π°Π΄Π°ΡŽΡ‚ΡΡ свойствами $template_dir, $compile_dir, $config_dir, $cache_dir класса Smarty, поэтому ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ. РСкомСндуСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Π½Π°Π±ΠΎΡ€Ρ‹ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΉ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ прилоТСния, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰Π΅Π³ΠΎ с шаблонами Smarty. Доступ ΠΊ пСрСчислСнным дирСкториям осущСствляСтся Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ Smarty ΠΈ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ выполняСтся Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ Ρ‡Π΅Ρ€Π΅Π· web-Π±Ρ€Π°ΡƒΠ·Π΅Ρ€. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒΡŽ, Π»ΡƒΡ‡ΡˆΠ΅ всСго Ρ€Π°Π·ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ эти Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ Ρ‚Π°ΠΌ, ΠΊΡƒΠ΄Π° Π½Π΅Ρ‚ доступа Ρ‡Π΅Ρ€Π΅Π· www.


Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ пСрСчислСнныС Smarty Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ ΠΏΠΎ адрСсу c:/smarty_dirs/book/. Π—Π°ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΡ‚ΡΡŽΠ΄Π° Π΄Π°Π½Π½Ρ‹Π΅ Ρ‡Π΅Ρ€Π΅Π· Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ нСльзя. ΠŸΡƒΡΡ‚ΡŒ наша ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° (ΠΈΠ»ΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅) находится ΠΏΠΎ адрСсу /~my/tasks/book/. Для Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΉ $compile_dir ΠΈ $cache_dir Smarty потрСбуСтся доступ Π½Π° запись, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΈΠΌ ΠΏΡ€Π°Π²Π° для сСтСвого ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ваш сСрвСр Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ (ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ это www ΠΈΠ»ΠΈ nobody).


Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΡ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ сдСланныС настройки, создадим простой шаблон ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‰ΡƒΡŽ Π΅Π³ΠΎ с использованиСм ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° Smarty.


index.tpl (являСтся Smarty шаблоном ΠΈ находится Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ шаблонов c:/smarty_dirs/book/templates/)


{* Π¨Π°Π±Π»ΠΎΠ½ Smarty *}

ΠŸΡ€ΠΈΠ²Π΅Ρ‚, {$name}!



index.php (являСтся ΠΊΠΎΠ΄ΠΎΠΌ нашСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈ находится Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ /~my/tasks/book/ ΠΈΠ»ΠΈ, Ρ‡Ρ‚ΠΎ Ρ‚ΠΎ ΠΆΠ΅ самоС, Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ c:/users/my/tasks/book/)


Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ:


ΠŸΡ€ΠΈΠ²Π΅Ρ‚, Вася!


ВсС настройки, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ нашСго прилоТСния, ΠΌΠΎΠΆΠ½ΠΎ вынСсти Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» ΠΈ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… Π² качСствС Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ класса Smarty.


Π”Π°Π»Π΅Π΅ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ рассмотрим, ΠΈΠ· ΠΊΠ°ΠΊΠΈΡ… элСмСнтов ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΡΡ‚ΠΎΡΡ‚ΡŒ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ Smarty ΠΈ ΠΊΠ°ΠΊ ΠΈΡ… ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Π²Π½ΡƒΡ‚Ρ€ΠΈ php-скрипта. НачнСм с синтаксиса шаблонов.


Основной синтаксис


Smarty - Π½Π΅ просто класс для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ шаблонов, ΠΎΠ½ опрСдСляСт Ρ†Π΅Π»Ρ‹ΠΉ язык построСния шаблонов. ΠœΡ‹ коснСмся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ основных Π΅Π³ΠΎ элСмСнтов. Π˜Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎ прСдставляСт собой шаблон Smarty? Π­Ρ‚ΠΎ Π½Π°Π±ΠΎΡ€ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… конструкций (ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΈ Ρ‚.ΠΏ) ΠΈ html-Ρ‚Π΅Π³ΠΎΠ². ВсС элСмСнты (Ρ‚Π΅Π³ΠΈ) языка шаблонов Smarty Π·Π°ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ΡΡ ΠΌΠ΅ΠΆΠ΄Ρƒ символами-ограничитСлями. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ это символы Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Ρ… скобок "{" ΠΈ "}", Π½ΠΎ ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ. ВсС, Ρ‡Ρ‚ΠΎ Π½Π΅ Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ Π² Ρ‚Π°ΠΊΠΈΠ΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚Π΅Π»ΠΈ, Smarty рассматриваСт ΠΊΠ°ΠΊ константы, Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰ΠΈΠ΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. Π’ шаблонС index.tpl, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅, {$name} - это пСрСмСнная, Π° строки "ΠŸΡ€ΠΈΠ²Π΅Ρ‚," ΠΈ "!" - Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‰ΠΈΠ΅ΡΡ Π² процСссС ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ шаблона константы.


ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ Π² Smarty Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ ΠΌΠ΅ΠΆΠ΄Ρƒ двумя Π·Π²Π΅Π·Π΄ΠΎΡ‡ΠΊΠ°ΠΌΠΈ:


{* Π­Ρ‚ΠΎ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ. ПослС ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ шаблона

ΠΎΠ½ Π½Π° экранС Π½Π΅ отобраТаСтся *}



ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Smarty Ρ‚Π΅Π³ Π»ΠΈΠ±ΠΎ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Π»ΠΈΠ±ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΊΠ°ΠΊΡƒΡŽ-Π»ΠΈΠ±ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ. Ѐункция записываСтся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:


{имя_Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚1="Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅1"

Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚2="Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅2"}


ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π² шаблонС ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ²:


ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ присваиваСтся Π² php-скриптС ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄ ΠΈΠΌΠ΅Π½Π΅ΠΌ Π·Π½Π°ΠΊ Π΄ΠΎΠ»Π»Π°Ρ€Π°.


НапримСр: {$first_name}


Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ массива, значСния ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π±Ρ‹Π»ΠΈ присвоСны Π² php-скриптС ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, доступны Π² шаблонС с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ синтаксиса {$имя_массива.ассоциативный_ΠΊΠ»ΡŽΡ‡}.


НапримСр: {$person.last_name}


Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ Π½Π΅ ассоциативного массива доступны с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ синтаксиса ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Ρ… скобок: {имя_массива[числовой_индСкс]}


НапримСр: {$person[2]}


Бвойства ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Π·Π°Π΄Π°Π½Π½Ρ‹Π΅ Π² php-скриптС, доступны Π² шаблонС с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ‚Π°ΠΊΠΎΠ³ΠΎ синтаксиса: {имя_ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°->имя_свойства}


НапримСр: {$person->email}


ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹Π΅ ΠΈΠ· ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² (Ρ‡Ρ‚ΠΎ это Ρ‚Π°ΠΊΠΎΠ΅, ΠΌΡ‹ расскаТСм Ρ‡ΡƒΡ‚ΡŒ ΠΏΠΎΠ·ΠΆΠ΅), Π·Π°ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ΡΡ ΠΌΠ΅ΠΆΠ΄Ρƒ символами #. Π’Π°ΠΊΠΆΠ΅ ΠΎΠ½ΠΈ доступны ΠΊΠ°ΠΊ элСмСнты ассоциативного массива $smarty.config.


НапримСр: {#bodyBgColor#} ΠΈΠ»ΠΈ {$smarty.config.bodyBgColor}


ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, сущСствуСт пСрСмСнная {$smarty}, зарСзСрвированная для Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… шаблона, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ HTTP запроса, Π΄Π°Ρ‚Ρ‹ ΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, ΠΈ Ρ‚.ΠΏ.


Π’ ΡˆΠ°Π±Π»ΠΎΠ½Π°Ρ… Smarty ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ ряд ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ, ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΌ функциям ΠΈΠ»ΠΈ строкам с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… значСния. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€, Π½ΡƒΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ послС Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠΉ Ρ‡Π΅Ρ€Ρ‚Ρ‹, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Π·Π° ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ»ΠΈ строкой, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΎΠ½ примСняСтся.


НапримСр, Ρ‡Ρ‚ΠΎΠ±Ρ‹ пСрСвСсти Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ {$title} Π² Π²Π΅Ρ€Ρ…Π½ΠΈΠΉ рСгистр, Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΊ Π½Π΅ΠΉ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ upper, Ρ‚.Π΅. Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅: {$title|upper}


МоТно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ сразу нСсколько ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ², отдСляя ΠΈΡ… Π΄Ρ€ΡƒΠ³ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³Π° прямой Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠΉ Ρ‡Π΅Ρ€Ρ‚ΠΎΠΉ. НапримСр, {$title|upper|truncate} ΠΏΠ΅Ρ€Π΅Π²Π΅Π΄Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π² Π²Π΅Ρ€Ρ…Π½ΠΈΠΉ рСгистр ΠΈ ΡƒΡ€Π΅ΠΆΠ΅Ρ‚ Π΄ΠΎ 80 символов.


ΠŸΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΡΡ‚ΡŒ всС ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠ΅ΡΡ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ ΠΌΡ‹ Π½Π΅ Π±ΡƒΠ΄Π΅ΠΌ. Π˜Ρ… список ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ Smarty. Π‘ΠΊΠ°ΠΆΠ΅ΠΌ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ, Ρ‡Ρ‚ΠΎ с ΠΈΡ… ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ число символов, слов ΠΈ ΠΏΠ°Ρ€Π°Π³Ρ€Π°Ρ„ΠΎΠ², Π΄ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ строку, Π·Π°Π΄Π°Ρ‚ΡŒ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Π²Ρ‹Π²ΠΎΠ΄Π° Π΄Π°Ρ‚Ρ‹ ΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ€Π΅Π³ΡƒΠ»ΡΡ€Π½ΡƒΡŽ Π·Π°ΠΌΠ΅Π½Ρƒ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠ΅ Π΄Ρ€ΡƒΠ³ΠΎΠ΅.