Skip to content

Ksnk/templater

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

26 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Π¨Π°Π±Π»ΠΎΠ½ΠΈΠ·Π°Ρ‚ΠΎΡ€

Π’ качСствС исходного языка для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ шаблонов Π²Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ http://jinja.pocoo.org/2/documentation/templates - Jinja2 - Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅ языка Django-template. ΠŸΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ Π²Ρ‹Ρ€Π°Π²Π½ΠΈΠ²Π°ΠΈΠ½ΠΈΠ΅ языка с языком ΡˆΠ°Π±Π»ΠΎΠ½ΠΈΠ·Π°Ρ‚ΠΎΡ€Π° Twig. Π’ΠΎ всяком случаС, всС ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ twig ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‚ΡΡ Π½Π° ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ с ΡˆΠ°Π±Π»ΠΎΠ½ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠΌ.

Π€Π΅Π½Π΅Ρ‡ΠΊΠΈ

Основная Ρ„Π΅Π½Π΅Ρ‡ΠΊΠ° ΡˆΠ°Π±Π»ΠΎΠ½ΠΈΠ·Π°Ρ‚ΠΎΡ€Π°, ΠΊΡ€ΠΎΠΌΠ΅, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ написан ΠΌΠ½ΠΎΠΉ, Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ шаблон, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ создаСтся Ρ„Π°ΠΉΠ» шаблонов описан Π½Π° этом ΠΆΠ΅ языкС ΡˆΠ°Π±Π»ΠΎΠ½ΠΈΠ·Π°Ρ‚ΠΎΡ€Π°. Π’ΠΎΠ΅ΡΡ‚ΡŒ, ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ шаблона-шаблонов - прСдыдущая Π΅Π³ΠΎ откомпилированная вСрсия ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ Π½ΠΎΠ²ΡƒΡŽ. ΠŸΡ€ΠΈ этом достигаСтся опрСдСлСнная Π³ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒ Π² Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΊ Π΅Ρ‰Π΅ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΡƒΡ€ΠΎΠ²Π½ΡŽ тСстирования систСмы. ΠžΡ‚ΠΊΡƒΠ΄Π° взялась самая пСрвая вСрсия "ΠΎΡ‚ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ шаблона" - ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΎ ΠΌΡ€Π°ΠΊΠΎΠΌ. По всС видимости - ΠΎΠ½ прСдоставлСн Π² Π²ΠΈΠ΄Π΅ Π΄Π°Ρ€Π° ΠΎΡ‚ Π²Π½Π΅Π·Π΅ΠΌΠ½Ρ‹Ρ… Ρ†ΠΈΠ²ΠΈΠ»ΠΈΠ·Π°Ρ†ΠΈΠΉ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π·Π½Π°Π½ΠΈΠ΅ ΠΎΠ± этом утСряно Π² Π²Π΅ΠΊΠ°Ρ…...

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

ΠŸΡ€ΠΈ нСобходимости, ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ модСль шаблонов для Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΡ… надобносСй. К ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ для Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ html Π½Π° сторонС ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΈΠ· javascript. Π¨Π°Π±Π»ΠΎΠ½ js_internal ΠΈΠΌΠ΅Π½Π½ΠΎ для этой Ρ†Π΅Π»ΠΈ ΠΈ дСлался. К соТалСнию, ΠΏΠΎ отсутствии Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΉ надобности - Π½Π΅ дописан.

ДокумСнтация

Π―Π΄Ρ€ΠΎ ΠΈ описаниС языка шаблонов Ρ‡ΠΈΡ‚Π°Π΅ΠΌ Π½Π° сайтС http://jinja.pocoo.org/2/documentation/templates. ΠžΡΡ‚Π°Ρ‚ΠΊΠΈ совСсти ΠΈ лСнь Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΌΠ½Π΅ Ρ‚ΡƒΠΏΠΎ ΡΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ описаниС с сайта, Π° лСнь ΠΈ нСдостаток Π·Π½Π°Π½ΠΈΠΉ английского - пСрСвСсти описаниС достаточно понятно для излоТСния.

БСйчас проводится Π²Ρ‹Ρ€Π°Π²Π½ΠΈΠ²Π°Π½ΠΈΠ΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Ρ„Π΅Π½Π΅Ρ‡Π΅ΠΊ с ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ вСрсиСй Twig. Пока Ρ€Π°Π·Π½ΠΈΡ†Π° Π² языкС - Π² Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ range. Π£ мСня ΠΎΠ½Π° Π³Π΅Π½Π΅Ρ€ΠΈΡ‚ массив ΠΎΡ‚ нуля Π΄ΠΎ MAX с шагом STEP (ΠΊΠ°ΠΊ Π² Jinja), соотвСстствСнно получая 2 ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°, Π° Π² twig - ΠΎΡ‚ MIN Π΄ΠΎ MAX с шагом 1. Π’ΠΏΡ€ΠΎΡ‡Π΅ΠΌ, я ΠΏΠΎΡŒΠ»Π·ΡƒΡŽΡΡŒ записью x..y с Π»ΠΈΡ‚Π΅Ρ€Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ x ΠΈ y, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΏΠΎΠΊΠ° ΠΌΠΈΠ½ Π½Π΅ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΎ..

НиТС Π±ΡƒΠ΄Π΅Ρ‚ описаниС ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΡ…ΡΡ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠΉ.

ИзмСнСниСм, ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с Jinja синтаксисом, Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΊΠ»ΡŽΡ‡ΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Π² `` ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠ°Ρ… (обратная одинарная). Π’Π°ΠΊΠΎΠΉ синтаксис ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ использования ΠΊΠ»ΡŽΡ‡Π΅ΠΉ с ΠΏΡ€ΠΎΠ±Π΅Π»Π°ΠΌΠΈ ΠΈ странными символами Π² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°Ρ… шаблона. Если Π² ΠΊΠ»ΡŽΡ‡Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ символ `, Π΅Π³ΠΎ Π½ΡƒΠΆΠ½ΠΎ escapeβ€™ΠΈΡ‚ΡŒ(ΡΠ»Π΅ΡˆΠΈΡ‚ΡŒ) ΠΏΠΎ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ языка Π‘.

ИзмСнСниСм Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚Π°ΠΊΠΆΠ΅ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Ρ‚Π΅Π³Π° if. ВмСстС с конструкциСй elif ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π΅Π³ΠΎ синоним elseif, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Ρ… ошибок Ρƒ php программистов.

ВсС нСизвСстныС систСмС ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ автоматичСски ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚ΡΡ ΠΊΠ»ΡŽΡ‡Π°ΠΌΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ошибка "Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅" отсутствуСт ΠΊΠ°ΠΊ класс, всС Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ значСния приводятся ΠΊ пустой строкС. Π₯ΠΎΡ€ΠΎΡˆΠΎ это ΠΈΠ»ΠΈ Π½Π΅Ρ‚, Π½Π΅ знаю, Π½ΠΎ ΠΏΠΎΠΊΠ° Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ Ρ…ΠΎΡ€ΠΎΡˆΠΎ. ВсС нСизвСстныС систСмС ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ (Π·Π° Π½ΠΈΠΌΠΈ стоит ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π²Ρ‹Π·ΠΎΠ²Π°) ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚ΡΡ функциями Π²Ρ‹Π·ΠΎΠ²Π° ΠΌΠ°ΠΊΡ€ΠΎΠΊΠΎΠΌΠ°Π½Π΄. ΠœΠ°ΠΊΡ€ΠΎΠΊΠΎΠΌΠ°Π½Π΄Π° обязана Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° Π² шаблонС, наслСдуСма ΠΈΠ· шаблона export ΠΈΠ»ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½Π° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ import. Никакого Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ поиска смысла Ρ‚Π°ΠΊΠΈΡ… ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² Π½Π΅ производится. ΠΠ°Π΄ΠΎΠ±Π½ΠΎΡΡ‚ΡŒ Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π΅ self прСдставляСтся ΠΌΠ½Π΅ Π½Π°Π΄ΡƒΠΌΠ°Π½Π½ΠΎΠΉ ΠΈ лишнСй.

Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ позволяСт Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ нСзависимый ΠΎΡ‚ окруТСния ΠΊΠΎΠ΄. Π›ΡŽΠ±ΠΎΠΉ шаблон прСобразуСтся Π² ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚-ΠΆΠ΅ ΠΊΠΎΠ΄, нСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ Π³Π΄Π΅ ΠΎΠ½ транслируСтся. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΌΠΎΠΆΠ½ΠΎ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ php-ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ Π½Π° дСвСлопСрской машинС ΠΈ Ρ€Π°ΡΠΏΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡ‚ΡŒ ΡƒΠΆΠ΅ ΠΈΡ… Π±Π΅Π· исходных шаблонов.

  • Variables - Π’Π°ΠΊ ΠΊΠ°ΠΊ Π½Π΅ прСдполагаСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π² качСствС Π΄Π°Π½Π½Ρ‹Ρ… для Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³Π°, Ρ‚ΠΎ способы указания Π²Ρ‹Π±ΠΎΡ€ΠΊΠΈ элСмСнта ΠΈ Π²Ρ‹Π±ΠΎΡ€ΠΊΠΈ ΠΈΠ· массива ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ эквивалСнтны. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ΡΡ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ "Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΡŽ" ΠΏΡ€ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΌΠ°ΠΊΡ€ΠΎΠΊΠΎΠΌΠ°Π½Π΄, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹Π±ΠΎΡ€ΠΊΠ° ΠΈΠ· массива ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π±Ρ‹Π»ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹. Π’Π°ΠΊΠΆΠ΅ Π·Π°Π±Π°Π²Π½ΠΎ ΡΠ΄Π°Π»Π°Ρ‚ΡŒ "Ρ€Π΅Ρ‚Ρ€Π°Π½ΡΠ»ΡΡ†ΠΈΡŽ" послС Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΡ€ΠΎΠ³ΠΎΠ½ΠΎΠ². ΠŸΡ€ΠΈ ΠΏΡ€ΠΎΠ³ΠΎΠ½Π΅ шаблона собираСтся информация ΠΎ Ρ‚ΠΈΠΏΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈ ΠΏΡ€ΠΈ рСтрансляции оптимизируСтся Π²Ρ‹Π±ΠΎΡ€ΠΊΠ° Π² соотвСтствии с ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΌΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ.

  • Filters - Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Ρ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ Π½Π΅ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ. Π’ΠΎΡ‡Π½Π΅Π΅, ΠΎΠ½ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ нСобходимости.

  • Π’ests - тСсты описаны Π½Π΅ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ. Π‘ Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Ρ‹ ΠΎΡ‚ тСстов ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒΡŽ привСдСния Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° тСста ΠΊ логичСскому. внСшний Π²ΠΈΠ΄ ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ описания Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ² ΠΈ тСстов ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹.

  • ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ ΠΊΠ°ΠΊ Π±Π»ΠΎΡ‡Π½Ρ‹Π΅ Ρ‚Π°ΠΊ ΠΈ строчныС.

  • Whitespace control - Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ.

  • Escaping - Ρ‚Π΅Π³ raw Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½.

  • Line statesment - Π½Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ

  • НаслСдованиС шаблонов Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ. Ѐункция super ΠΏΠΎΠΊΠ° Π½Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π°

  • Π˜ΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Ρ‚Π΅Π³ΠΈ окончания Π±Π»ΠΎΠΊΠΎΠ² Π½Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹.

  • Block nesting and scoop - ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ scooped Π±Π»ΠΎΠΊΠ° Π½Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½.

  • List on control structures

  • for - Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ Π±Π΅Π· Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ if, Π½ΠΎ с else ΠΈ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΌ loop. Атрибут recursive отсутствуСт (Π² twig Π΅Π³ΠΎ Ρ‚ΠΎΠΆΠ΅ Π½Π΅Ρ‚). РСкурсивныС конструкции слСдуСт Π΄Π΅Π»Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ макросов.

  • if Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½

  • макросы Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ Π±Π΅Π· ΠΈΠΌΠΏΠΎΡ€Ρ‚Π°, с ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹ΠΌΠΈ ΠΈ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ. Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π½Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹. РСкурсивный Π²Ρ‹Π·ΠΎΠ² макроса ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ макроса Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ.

  • Π’Π΅Π³ call Π½Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½

  • Π’Π΅Π³ filter Π½Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½

  • set Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½

  • Extends Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½

  • Include Π½Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½

  • Import Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ ΠΏΠΎΠΊΠ° Π² простом Π²ΠΈΠ΄Π΅, Π±Π΅Π· пСрСопрСдСлСния ΠΈΠΌΠ΅Π½ макросов

Бписок Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²

  • default
  • escape , e
  • join
  • length
  • replace

тСстов Π½Π΅Ρ‚

Бписок Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ

  • lipsum

  • min

  • max

  • trim

  • parent - Π²Ρ‹Π·ΠΎΠ² шаблона-ΠΏΡ€Π΅Π΄ΠΊΠ°

Π’Π΅Π³ΠΈ, описанныС Π² Extension Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹.

НСкоторыС ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹ транслятора получаСтся Π½Π΅ΠΊΠΈΠΉ php-класс. Имя класса зависит ΠΎΡ‚ ΠΈΠΌΠ΅Π½ΠΈ шаблона. Из шаблона с ΠΈΠΌΠ΅Π½Π΅ΠΌ XXX.jtpl - получаСтся класс tpl_XXX ΠŸΡ€ΠΈ этом всС Ρ‚ΠΎΡ‡ΠΊΠΈ Π² словС XXX Π·Π°ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ Π½Π° подчСркивания. ΠŸΡ€ΠΈ Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³Π΅ Π΄Π°Π½Π½Ρ‹Ρ… достаточно ΠΏΡ€ΠΎΠΈΠ½ΠΈΡ†ΠΈΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ этот класс ΠΈ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Π»ΠΈΠ±ΠΎ Π½ΡƒΠΆΠ½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, Π»ΠΈΠ±ΠΎ β€œΠΊΠΎΡ€Π½Π΅Π²ΡƒΡŽβ€ - β€˜_’. Никаких Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… дСйствий ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π² ΠΊΠΎΠ΄ Ρ„Π°ΠΉΠ»ΠΎΠ² компилятора Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Ρ‹, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ тСсты, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠ΅ΡΡ ΠΏΡ€ΠΈ run-time Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³Π΅, ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ Π² классС tpl_base.

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Π±Π»ΠΎΠΊ шаблона транслируСтся Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ класса. Π’Π΅ΡΡŒ шаблон Ρ‚Ρ€Π°Π½ΡΠ»ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ β€˜_’. ΠœΠ°ΠΊΡ€ΠΎΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ‚Π°ΠΊΠΈΠΌΠΈ ΠΆΠ΅ функциями класса, ΠΎΠ΄Π½Π°ΠΊΠΎ Π² конструкторС класса заводится массив macro со всСми описанными Π² шаблонС макросами для ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΈΠΌΠΏΠΎΡ€Ρ‚Π°. Π˜ΠΌΠΏΠΎΡ€Ρ‚ макросов Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎ класса шаблона ΠΈ слиянии собствСнного массива macro с ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΌ. "ΠŸΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅" Π±Π»ΠΎΠΊΠΎΠ² достаточно ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ эмулируСтся простым наслСдованиСм классов. ΠŸΡ€ΠΈ этом отсутствуСт Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ эффСктивно ΡƒΠ·Π½Π°Ρ‚ΡŒ структуру ΠΏΡ€Π΅Π΄ΠΊΠ° класса ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… макросов. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, вставка макроса {{ MACRONAME(PAR1,PAR2...) }} выглядит Π² ΠΊΠΎΠ΄Π΅ Ρ‚Π°ΠΊ

if(!empty($this->macros[β€˜MACRONAME’])
    call_user_func($this->macros[β€˜MACRONAME’],PAR1,PAR2...)

Π˜ΠΌΠΏΠΎΡ€Ρ‚ макросов import β€˜macros.tpl’ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ Ρ‚Π°ΠΊ

function __construct (){
    // import β€˜macros.tpl’
    require_once β€˜macros.tpl.php’;
    $import= new macros();
    // конструкция import β€˜macros.tpl’
    $this->macros=array_merge($this->macros,$import->macros);
    // конструкция from β€˜macros.tpl’ import β€˜yyy’ as’ β€˜xxx’
    $this->macros[β€˜xxx’]=$import[β€˜yyy’]
}

API

ΡƒΠ½Π°Ρ€Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ вводятся ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ newOp1

->newOp1('not','!(%s)','BB')

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ - имя ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, Π²Ρ‚ΠΎΡ€ΠΎΠΉ printf-шаблон для Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ΄Π°, Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ - указания ΠΏΠΎ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΡŽ Ρ‚ΠΈΠΏΠΎΠ². ΠŸΠ΅Ρ€Π²Π°Ρ Π»ΠΈΡ‚Π΅Ρ€Π° - ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊ логичСскому Ρ‚ΠΈΠΏΡƒ, вторая Π»ΠΈΡ‚Π΅Ρ€Π° - ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Π° ΠΊ логичСскому Ρ‚ΠΈΠΏΡƒ ΠΏΠ΅Ρ€Π΅Π΄ вставкой Π² шаблон. Π‘ΠΈΠ½Π°Ρ€Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ вводятся ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ newOp2

->newOp2('== != > >= < <=',2,null,'B**')

Π‘ΠΎΠΊΡ€Π°Ρ‰Π΅Π½Π½Ρ‹ΠΉ способ описания ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΅ΡΡ‚ΡŒ Π² языкС Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· Π½ΠΈΡ… Π±ΡƒΠ΄Π΅Ρ‚ вставлСн Π² ΠΊΠΎΠ΄ ΠΏΠΎ стандартному ΡˆΠ°Π±Π»ΠΎΠ½Ρƒ (%s) ΠžΠŸΠ•Π ΠΠ¦Π˜Π― (%s) , Π³Π΄Π΅ ΠžΠŸΠ•Π ΠΠ¦Π˜Π― замСняСтся Π½Π° ΠΎΠΏΠΈΡΡ‹Π²Π°Π΅ΠΌΡƒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ. изобраТСния ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Ρ‡Π΅Ρ€Π΅Π· ΠΏΡ€ΠΎΠ±Π΅Π» позволяСт ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ нСсколько ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ с ΠΎΠ΄Π½ΠΈΠΌ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ΠΎΠΌ. Π’Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ - ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ. БущСствСнСн Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Π±ΠΈΠ½Π°Ρ€Π½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ. Π’Ρ€Π΅Ρ‚ΠΈΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ - printf-шаблон, Ссли null, Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ стандартный printf-шалон. Π§Π΅Ρ‚Π²Π΅Ρ€Ρ‚Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ - ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠΎΠ² ΠΏΡ€ΠΈ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ шаблона.

->newOp2('and',3,'(%s) && (%s)','BBB')
->newOp2('|',11,array($this,'function_filter'))

ΠŸΠΎΠ»Π½Ρ‹ΠΉ способ описания ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ. ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ - имя ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, Π²Ρ‚ΠΎΡ€ΠΎΠΉ - ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ , Ρ‚Ρ€Π΅Ρ‚ΡŒΠΈΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ printf-шаблон ΠΈΠ»ΠΈ callback Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π²Ρ‹Π΄Π°ΡŽΡ‰Π΅ΠΉ прСдставлСниС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

->newOpR('loop',array($this,'operand_loop'))
  • особый ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ loop. Π’ зависимости ΠΎΡ‚ примСняСмым ΠΊ loop Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌ пороТдаСтся Ρ‚Π° ΠΈΠ»ΠΈ иная конструкция. Π’ΠΈΠ΄ ΠΈ смысл конструкции опрСдСляСтся callback'ΠΎΠΌ.

Π½ΠΎΠ²Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Ρ‹ ΠΈ тСсты Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ΡΡ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ.

  • Π’ конструктор Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса компилятора Π½ΡƒΠΆΠ½ΠΎ Π²ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ (для ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° - функция escape) Π² Π²ΠΈΠ΄Π΅:

    ->newFunc('e','htmlspecialchars(%s)','SS') ->newFunc('escape','htmlspecialchars(%s)','SS')

  • ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ - имя Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ - шаблон для printf’а с ΠΎΠ΄Π½ΠΈΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ. ВсС ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΡƒΠΊΠ»Π°Π΄Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π² эту строку Ρ‡Π΅Ρ€Π΅Π· Π·Π°ΠΏΡΡ‚ΡƒΡŽ. Π’ΡƒΡ‚ ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ Π΄Π²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ- синонима. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ конструкции, нСпосрСдствСнно ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅ΠΌΡ‹Π΅ Π² php-ΠΊΠΎΠ΄. ΠΏΡ€ΠΈ ΠΈΠ·Π³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½ΠΈΠΈ конструкта Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ строковый Π²ΠΈΠ΄ (пСрвая Π»ΠΈΡ‚Π΅Ρ€Π° Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅Π³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°) ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΎ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠΎΠ² ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ΠΎΠ² ΠΊ строковому Π²ΠΈΠ΄Ρƒ (Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π»ΠΈΡ‚Π΅Ρ€Ρ‹)

ΠŸΡ€ΠΈ трансляции конструкции {{user.username|e}} получится

htmlspecialchars((isset($user['username'])?$user['username']:""))

Ѐункция lipsum ->newFunc('lipsum','$this->func_lipsum(%s)') ΠŸΡ€ΠΈ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ lipsum прСдполагаСтся Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ func_lipsum ΠΈΠ· Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ шаблона tpl_base.

/**
 * функция lipsum
 */
function func_lipsum($n=5, $html=True, $min=20, $max=100){
  $result='';
...
  return $result;
}

Ѐункция replace
->newFunc('replace',array($this,'function_replace')) Π’Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ - callback, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Ρ‹Π΄Π°Ρ‚ΡŒ прСдставлСниС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ²ΡˆΠ΅ΠΌΡΡ Ρ„Π°ΠΉΠ»Π΅. Если Π½ΡƒΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ нСсколько синонимов Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ - достаточно ΠΏΠΎΠΌΠ΅Π½ΡΡ‚ΡŒ имя Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Callback ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊ

  /**
   * Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ - replace
   * @param operand $op1 - TYPE_ID - имя Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ
   * @param operand $op2 - TYPE_LIST - ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ
   */
  function function_replace($op1,$op2){
    $op1->val= 'str_replace('.$this->to('S',$op2->value['keys'][1])->val
      .','.$this->to('S',$op2->value['keys'][2])->val
      .','.$this->to('S',$op2->value['keys'][0])->val
    .')';
    $op1->type="TYPE_OPERAND";
    return $op1;
  }

Π’Ρ‹Π±ΠΎΡ€ callback’а вмСсто явного прСдставлСния Π² Π²ΠΈΠ΄Π΅ printf-шаблона сдСлан ΠΈΠ· Π·Π° Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ порядка слСдования ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² str_replace’а. Для пояснСния ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΠΌΡ‹Ρ… дСйствий

  • функция ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ 2 ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° - ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ - ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€, содСрТащий имя Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ - operand(val:’replace’,type:’TYPE_ID’) - имя Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ содСрТит ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹, ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.
  • функция to ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ ΠΊ Π½ΡƒΠΆΠ½ΠΎΠΌΡƒ Π²ΠΈΠ΄Ρƒ

Π’ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΈΡ… скрытый смысл

ΠŸΡ€ΠΈ парсингС тСкста шаблона тСкст разбиваСтся Π½Π° лСксСмы с ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌ Ρ‚ΠΈΠΏΠΎΠΌ. Π’ процСссС трансляции Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ лСксСмы ΠΌΠ΅Π½ΡΡŽΡ‚ свой Ρ‚ΠΈΠΏ.

  • TYPE_STRING - содСрТимоС строки, ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½Π½ΠΎΠ΅ Π² Π΄Π²ΠΎΠΉΠ½Ρ‹Π΅ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ

  • TYPE_STRING1 - содСрТимоС строки, ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½Π½ΠΎΠ΅ Π² ΠΎΠ΄ΠΈΠ½Π°Ρ€Π½Ρ‹Π΅ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ

  • TYPE_STRING2 - содСрТимоС строки, ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½Π½ΠΎΠ΅ Π² ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹Π΅ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ

  • TYPE_ID - ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°

  • TYPE_OPERATION - ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ зарСгистрированных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ (Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°ΠΌΠΈ newOp1, newOp2)

  • TYPE_COMMA - нСраспознанныС символы

ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ ΠΏΠΎΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ дальнСйшСм Π°Π½Π°Π»ΠΈΠ·Π΅ тСкста.

  • TYPE_OBJECT - Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ Ρ‚ΠΈΠΏ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Π²Ρ‹Π·ΠΎΠ² ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° ΠΎΡ‚ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°.

  • TYPE_LIST - ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡ‚ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ΠΎΠ². ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ΡΡ ΠΏΡ€ΠΈ Π°Π½Π°Π»ΠΈΠ·Π΅ изобраТСния массива, Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈ описаний макросов. Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ 2 Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… массива ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ΠΎΠ², ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Ρ…. Π˜Ρ… смысл мСняСтся Π² зависимости ΠΎΡ‚ конструкции, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π»ΠΈ.

  • TYPE_OPERAND - конструкция, Π²Ρ‹Π΄Π°ΡŽΡ‰Π°Ρ строковоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. ΠœΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² качСствС ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Π° ΠΊΠΎΠ½ΠΊΠ°Ρ‚Π΅Π½Π°Ρ†ΠΈΠΈ, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π² качСствС ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Π° php ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ². ΠΏΡ€ΠΈΠΌΠ΅Ρ€: β€˜2’ (строковоС ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ числа 2 с ΠΎΠ΄ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΌΠΈ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠ°ΠΌΠΈ).

  • TYPE_SENTENSE - Π³ΠΎΡ‚ΠΎΠ²Ρ‹Π΅ для склСивания Ρ‡Π΅Ρ€Π΅Π· Ρ‚ΠΎΡ‡ΠΊΡƒ с запятой куски тСкста. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ $x=2

Π¨Π°Π±Π»ΠΎΠ½ΠΈΠ·Π°Ρ‚ΠΎΡ€ Ρ€Π°Π·Π±ΠΈΡ‚ Π½Π° части

  • компилятор

  • Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ компилятора

  • оттранслированныС Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ компилятора

  • систСма Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³Π°

  • 'Π±ΠΎΠ΅Π²Ρ‹Π΅' ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹

  • оттранслированныС 'Π±ΠΎΠ΅Π²Ρ‹Π΅' ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹

  • Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ систСмы Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³Π° (Π½Π°ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ΡΡ ΠΎΡ‚ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… шаблонов компилятора)

Для поставки достаточно систСмы Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³Π° ΠΈ оттранслированных 'Π±ΠΎΠ΅Π²Ρ‹Π΅' ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹

Для возмоТности пСрСтрансляции шаблонов Π½Π° мСстС достаточно Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ компилятор, 'основныС' ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ ΠΈ оттранслированныС Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ компилятора

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° Ρ„Π°ΠΉΠ»ΠΎΠ² дистрибутива

  -|            readme.txt - Ρ„Π°ΠΉΠ» с описаниСм
   |-lib        ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ с Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΌΠΈ для компиляции шаблонов
   |-render     ΠΎΡ‚ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ "Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅" ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹. Π˜Ρ… Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ
   |            ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ templates ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.
   |-samples    ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ с ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ
     |- templates    ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ с ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ шаблонов.

ИспользованиС

Π”ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° константа

  • TEMPLATE_PATH - располоТСниС шаблонов ΠΈ ΠΎΡ‚ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… шаблонов.

Π’ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ sample имССтся ΠΏΡ€ΠΈΠΌΠ΅Ρ€ простой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³Π° ΠΎΡ‚ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… шаблонов. render.php

API

ΠΌΠ΅Ρ…Π°Π½ΠΈΠΊΠ° трансляции

Врансляция шаблона происходит с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ парсСра, пСрСводящСго тСкст шаблона Π² лСксСмы, ΠΈ стСкового Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚Π°, "Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡŽΡ‰Π΅Π³ΠΎ" ΠΈΡ…. ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π½Π° этапС парсинга. Π›ΡŽΠ±ΠΎΠΉ шаблон "дополняСтся" для трансляции скобками %} ... {% с Π½Π°Ρ‡Π°Π»Π° ΠΈ с ΠΊΠΎΠ½Ρ†Π° Ρ„Π°ΠΉΠ»Π°. Π’Π°ΠΊΠΈΠ΅ скобки, Π° Ρ‚Π°ΠΊΠΆΠ΅ }} ... {{, с Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°ΠΌΠΈ Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΈ ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹Ρ… скобок, Π²ΠΎΡΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ опСрация "Π½Π°ΠΏΠ΅Ρ‡Π°Ρ‚Π°ΠΉ содСрТимоС" ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ Π½Π° стСкС ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ΠΎΠ² содСрТимого с Ρ‚ΠΈΠΏΠΎΠΌ БВРОКА, Π° Π½Π° стСкС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ - ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ "ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ". Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, появляСтся Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ тСкст шаблона прСдставляСт ΠΈΠ· сСбя Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ тСкст Π½Π° языкС программирования.

ΠŸΠ°Ρ€ΡΠ΅Ρ€ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ Π² ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π΅ makelex.

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ свСртки лСксСм появляСтся массив классов operand с Ρ‚ΠΈΠΏΠ°ΠΌΠΈ

  • TYPE_STRING - строка, ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ Π±Ρ‹Π»Π° взята Π² " ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ
  • TYPE_STRING1 - строка, ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ Π±Ρ‹Π»Π° взята Π² ' ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ
  • TYPE_STRING2 - строка, ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ Π±Ρ‹Π»Π° взята Π² ` ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ
  • TYPE_DIGIT - ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ числа
  • TYPE_COMMA - Π½Π΅ΠΎΠΏΠΎΠ·Π½Π°Π½Π½Ρ‹ΠΉ символ, смысл символа проясняСтся ΠΏΡ€ΠΈ Π°Π½Π°Π»ΠΈΠ·Π΅ ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π°
  • TYPE_OPERATION - зарСгистрированная опСрация
  • TYPE_ID - ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€, любая ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½Π½Ρ‹Ρ… символов, Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰Π°ΡΡΡ с Π»ΠΈΡ‚Π΅Ρ€Ρ‹.

Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ свСртки лСксСм Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ΡΡ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Ρ‹ Ρ‚ΠΈΠΏΠ°

  • TYPE_EOF - символ окончания тСкста

На этапС свСртки лСксСм Π²Ρ‹ΠΊΠΈΠ΄Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ ΠΈ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ очстки ΠΎΡ‚ ΠΏΡ€ΠΎΠ±Π΅Π»ΡŒΠ½Ρ‹Ρ… символов -.

Π’Π΅Π³ΠΈ - это Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Π΅ слова основных конструкций языка. К ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, macro, if, for ΠΈ Ρ‚.Π΄. Π‘Π»ΡƒΠΆΠ΅Π±Π½Ρ‹Π΅ слова - это слова, слуТащиС для раздСлСния Ρ‚Π΅Π»Π° Ρ‚Π΅Π³Π° Π½Π° ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ конструкции, else, endmacro ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅. ВсС Ρ‚Π΅Π³ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‰ΠΈΠ΅ со слуТСбными словами ΠΈ с ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ Ρ‚Π΅Π³ΠΎΠ² нСдопустимы.

ΠŸΡ€ΠΈ трансляции Ρ‚Π΅Π³Π° ΠΌΡ‹ ΠΈΡ‰Π΅ΠΌ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΡƒΡŽ Ρ‚Π΅Π³Ρƒ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ трансляции ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ Π΅Π΅.

Π’Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΎΡΡ‚ΡŒ Ρ‚Π΅Π³Π°, Π΄ΠΎ Π½ΡƒΠΆΠ½ΠΎΠ³ΠΎ Π½Π°ΠΌ слуТСбного слова, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ block_internal

$parcer->block_internal(array('else', 'endfor'));

Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΈΡ… Π΄Ρ€ΡƒΠ³ ΠΊ Π΄Ρ€ΡƒΠ³Ρƒ Π² процСссС трансляции

описаниС собствСнных Ρ‚Π΅Π³ΠΎΠ²

Π’ качСствС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° рассмотрим Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ Ρ‚Π΅Π³Π° loop. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ†ΠΈΠΊΠ» for ΠΏΠΎΡ€ΠΎΠΆΠ΄Π°Π΅Ρ‚ связанный с Π½ΠΈΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ loop, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ…Ρ€Π°Π½ΠΈΡ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Ρ†ΠΈΠΊΠ»Π° ΠΈ выполняСт сСрвисныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

{% for i in [1,2,3] %}
 <span class="{{loop.cycle('odd','even')}}">
 {{- loop.index -}} </span><br>
{% endfor %}

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ loop.cycle Π²Ρ‹Π΄Π°Π΅Ρ‚ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠΎ порядку свои ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Π² Ρ†ΠΈΠΊΠ»Π΅. loop.index - тукущая пСрСмСнная Ρ†ΠΈΠΊΠ»Π°, ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅. ΠŸΡ€ΠΈ трансляции Π² PHP ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠΉ конструкции придСтся ΡΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ достаточно Π½Π΅Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ тСкст, ΠΊ Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅ нСпосрСдствСнного ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΏΡ€ΠΈ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ Π½Π΅Ρ‚.

ОписаниС Ρ‚Π΅Π³Π° loop вводится Π² конструкторС сласса php_compiler

->newOpR('loop',array($this,'operand_loop'))

operand_loop - функция, которая Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° Ρƒ компилятора Π²ΠΎΠ·Π½ΠΈΠΊΠ½Π΅Ρ‚ Π½Π°Π΄ΠΎΠ±Π½ΠΎΡΡ‚ΡŒ ΠΏΠΎΡ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с ΠΏΠΎΡ€ΠΎΠΆΠ΄Π°Π΅ΠΌΡ‹ΠΌ ΠΊΠΎΠ΄ΠΎΠΌ.

function operand_loop($op1=null,$attr=null,$reson='attr'){  ... }

attr - имя Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° loop, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΈΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°. reason - ΠΏΠΎΠ²ΠΎΠ΄, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Π½Π°ΡˆΡƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π΄Π΅Ρ€Π³Π°Π΅Ρ‚ ядро транслятора.

reason==call - происходит Π²Ρ‹Π·ΠΎΠ²

reason==attr - вызываСтся, ΠΊΠΎΠ³Π΄Π° транслятор встрСчаСт Π² исходном тСкстС слово loop. НСобходимоС дСйствиС - Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° operand (Π² Π΄Π°Π½Π½ΠΎΠΌ случаС - operation). Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠΌΠ΅Ρ‰Π΅Π½ΠΎ Π½Π° стСкС. Если ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ attr Π½Π΅ пустой, происходит ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° loop Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ выполнСния ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ '.'.

About

Template engine for PHP. Based on Jinja2 sintax

Resources

Stars

Watchers

Forks

Packages

No packages published