PHPTemplate և Twig պարադիգմների համեմատություն
Twig-ի մասին
Twig-ը կոմպիլացված կաղապարային լեզու է՝ հիմնված PHP-ի վրա։ Երբ ձեր վեբէջը ցուցադրվում է, Twig շարժիչը վերցնում է կաղապարը և փոխակերպում այն կոմպիլացված PHP կաղապարի, որը պահվում է sites/default/files/php/twig թղթապանակում։ Կոմպիլյացիան կատարվում է մեկ անգամ, կաղապարային ֆայլերը պահվում են քեշում՝ կրկնակի օգտագործման համար և նորից կոմպիլացվում են Twig քեշը մաքրելիս։
Drupal Twig նախաձեռնությունը ունի նույն մոտիվացիան, ինչ Symfony-ն՝ ներդնել արդի, հզոր, OOP-բազայով շարժիչ, որը թույլ կտա ծրագրավորողներին ճիշտ կենտրոնանալ Drupal-ի վրա։
1. Docblock
PHPTemplate:
<?php /** * @file * Ֆայլի նկարագրություն */ ?>
Twig:
{# /** * @file * Ֆայլի նկարագրություն */ #}
2. Ֆայլերի և ֆունկցիաների անվանումներ
PHPTemplate ֆայլ՝ node--article.tpl.php
Twig ֆայլ՝ node--article.html.twig
PHPTemplate ֆունկցիա՝ THEME_node_links()
Twig ֆայլ՝ node-links.html.twig
3. Փոփոխականներ
Փոփոխականի տպում՝
PHPTemplate՝ <div class="content"><?php print $content; ?></div>
Twig՝ <div class="content">{{ content }}</div>
Հաշեշի բանալիով էլեմենտի տպում [1]
PHPTemplate՝ <?php print $item['#item']['alt']; ?>
Twig՝ {{ item['#item'].alt }}
Փոփոխականի նշանակում՝
PHPTemplate՝ <?php $custom_var = $content->comments; ?>
Twig՝ {% set custom_var = content.comments %}
Զանգվածի նշանակում՝
PHPTemplate՝ <?php $args = array('@author' => $author, '@date' => $created); ?>
Twig՝ {% set args = {'@author': author, '@date': created} %}
4. Պայմաններ
PHPTemplate՝ <?php if ($content->comments): endif; ?>
Twig՝ {% if content.comments %} {% endif %}
PHPTemplate՝ <?php if (!empty($content->comments)): endif; ?>
Twig՝ {% if content.comments is not empty %} {% endif %}
PHPTemplate՝ <?php if (isset($content->comments)): endif; ?>
Twig՝ {% if content.comments is defined %} {% endif %}
PHPTemplate՝ <?php if ($count > 0): endif; ?>
Twig՝ {% if count > 0 %} {% endif %}
5. Կառավարման կառուցվածքներ
PHPTemplate՝ <?php foreach ($users as $user) {} ?>
Twig՝ {% for user in users %} {% endfor %}
6. Ֆիլտրեր
HTML-ի հատուկ էսկեյփացված սիմվոլներ՝
PHPTemplate՝ <?php print check_plain($title); ?>
Twig[2]՝ {{ title }}
Մշակված չլինող արժեքներ՝
PHPTemplate՝ <?php print $title; ?>
Twig՝ {{ title|raw }}
Թարգմանություն՝
PHPTemplate՝ <? Php print t ('Home'); ?>
Twig՝ {{'Home' | t}}
Թարգմանություն տեղադրված փոփոխականներով՝
PHPTemplate՝ <?php print t('Welcome, @username', array('@username' => $user->name)); ?>
Twig՝ {{ 'Welcome, @username'|t({ '@username': user.name }) }}
Drupal 8 Twig ( trans tag ընդլայնումով):
{% set username = user.name %} {% trans %} Welcome, {{ username }} {% endtrans %}
Ցանկի միավորում՝
PHPTemplate՝ <? Php echo implode (',', $usernames); ?>
Twig՝ {{usernames | join(', ') }}
Ցանկի միավորում նշումով՝
Twig՝ {{usernames | safe_join(',')}}
PHPTemplate օրինակն ակնկալում է, որ $usernames-ը սովորական տողերի զանգված է։ Նույնը վերաբերում է առաջին Twig օրինակին, որտեղ usernames-ը նաև տողերի զանգված է։ Իսկ Drupal 8 Twig օրինակում usernames-ը պետք է լինի դրսևորվելի օբյեկտների զանգված։ Սա է հիմնական տարբերությունը Drupal 8 Twig-ի և սկզբնական Twig-ի միջև։ Drupal 8 Twig-ն կարող է «տպել» ինչպես սովորական տեքստը, այնպես էլ դրսևորվելի զանգվածները։
Նմանատիպությամբ ակնկալվում է, որ բոլոր երեք օրինակները նույն ելքը կունենան, բայց դա այդպես չէ (ստանդարտի դեպքում)։ Օրինակ՝
{% set numbers = [{'#markup': 'One'}, {'#markup':'Two'}, {'#markup':'Three'}] %} {{ numbers }}
Վերոհիշյալը ենթադրում է, որ տարրերը տպվելու են ստորակետով առանձնացված, բայց արդյունքը կլինի՝ OneTwoThree
7. Տարանցիկների կառավարում
Twig-ը ունի տարածքների կառավարում, որը թույլ է տալիս հեռացնել տարածքները, որոնք օգտագործվում են կաղապարի ֆայլի կառուցվածքի համար։
<div class="body"> {{- block.content -}} </div>
Դա նույնն է, ինչ՝
<div class="body">{{ block.content }}</div>
Զգուշացում
- Հաշեշի բանալիով էլեմենտի օրինակն կարող է փոխվել ապագայում
- Երկրորդ օրինակում ցույց է տրվում, որ Twig-ն է կարգավորում տվյալների մաքրման գործընթացը։ Նախկինում դա արվում էր նախապատրաստման ֆայլերում կամ պրեփրոցեսոր ֆունկցիաներում։ Այս վերջին փոփոխությունը կարևոր է նրանց համար, ովքեր ցանկանում են Drupal 8-ի համար PHPTemplate թեմա պատրաստել՝ պահանջելով մաքրել իրենց տվյալները։ ↩︎︎
Լրացուցիչ տեղեկությունների համար դիտեք․
Drupal’s online documentation is © 2000-2020 by the individual contributors and can be used in accordance with the Creative Commons License, Attribution-ShareAlike 2.0. PHP code is distributed under the GNU General Public License.