Преобразование TWIG в PHP Синтаксис - PullRequest
0 голосов
/ 14 января 2020
<td class="text-left">
      <select name="product[{{ list_row }}][status]" id="input-status" class="form-control">
          {% if i.status %}
            <option value="1" selected="selected">{{ text_enabled }}</option>
        <option value="0">{{ text_disabled }}</option>
             {% else %}
             <option value="1">{{ text_enabled }}</option>
               <option value="0" selected="selected">{{ text_disabled }}</option>
             {% endif %}
      </select>
</td>
    <td class="text-left">
           <button id="button_cancel" type="button" onclick="$('#product_row_{{ list_row }}').remove()" data-toggle="tooltip" title="{{ button_remove }}" class="btn btn-danger">
      <i class="fa fa-minus-circle"></i>
        </button>
          </td> 
             </tr>
       {% set list_row = list_row + 1 %}
        {% endfor %}
        {% endif %}

Для приведенного выше кода "Выберите", как мне преобразовать его в php синтаксис?

То же самое относится к set list_row = list_row +1? что означает%} <? </p>

Ответы [ 2 ]

1 голос
/ 14 января 2020

Там мало чем отличается от синтаксиса PHP и Twig. Twig предлагает чисто шаблонную перспективу от PHP, чтобы помочь защитить ваши шаблоны от бизнес-логики c и предоставляет такие возможности, как автоматическое экранирование HTML сущностей и Javascript, а также беззвучное игнорирование неопределенных переменных, индексов массивов или методы / свойства объекта, аналогичные оператору ?? (null coalesce) в PHP.

Я настоятельно рекомендую вам взять день и изучить очень ограниченный синтаксис, который имеет Twig https://twig.symfony.com/doc/2.x/ между версиями 1, 2 и 3 есть тонкие различия. С большим объяснением того, как ветка работает в https://twig.symfony.com/doc/2.x/templates.html

Выход Twig

{{ var }}

эквивалентен

<?php echo htmlspecialchars((isset($var) ? $var : null), ENT_QUOTES, 'UTF-8'); ?>

объявления переменных Twig

{% set var = 'value' %}

эквивалентен

<?php $var = 'value'; ?>

Таким образом, {{ }} можно рассматривать как ярлык для вывода на печать <?php echo ?>, а точнее <?= ?>. Где {% %} - открывающие и закрывающие разделители операторов веток, и их можно рассматривать аналогично открывающим и закрывающим PHP разделителям операторов <?php ?>.

Важно отметить, что у ветки нет доступа к глобальным или пространствам имен PHP. Таким образом, что-то вроде <?php foreach ($vars as $i => $var) { ?> обрабатывается по-разному в ветке, для этого экземпляра {% for i, var in vars %}.

Доступ к переменной Twig

Twig также может получить доступ к обоим ключам ассоциативного массива и свойства объекта с одинаковым синтаксисом var.property, с возможностью автоматического вызова get, is и has методов объекта.

Если var - массив, {{ var.property }} эквивалентно

$var = ['property' => 'value'];

echo htmlspecialchars(($var['property'] ?? null), ENT_QUOTES, 'UTF-8'); //PHP 7.0+
echo htmlspecialchars((array_key_exists('property', $var) ? $var['property'] : null), ENT_QUOTES, 'UTF-8'); //PHP < 7.0

, если var является объектом, {{ var.property }} соответствует

class Var
{
    private $property = 'value';

    public function getProperty()
    {
       return $property;
    }
}
$var = new Var();

if (isset($var->property)) {
    echo htmlspecialchars($var->property, ENT_QUOTES, 'UTF-8');
} elseif (is_callable([$var, 'property'])) {
    echo htmlspecialchars($var->property(), ENT_QUOTES, 'UTF-8');
} elseif (is_callable([$var, 'getProperty'])) {
    echo htmlspecialchars($var->getProperty(), ENT_QUOTES, 'UTF-8');
} elseif (is_callable([$var, 'isProperty'])) {
    echo htmlspecialchars($var->isProperty(), ENT_QUOTES, 'UTF-8');
} elseif (is_callable([$var, 'hasProperty'])) {
    echo htmlspecialchars($var->hasProperty(), ENT_QUOTES, 'UTF-8');
} else {
    echo null;
}



Отсутствуют части вашего шаблона. Например, переменные шаблона и начало ваших блоков if и for ... in. Чтобы привести более полный пример, я включил некоторые утверждения о том, как будут выглядеть переменные и начальные операторы if и foreach.

Чтобы преобразовать предоставленный вами шаблон Twig в PHP, потребуется похожи на ниже.

<?php
/* START ASSERTIONS */

$iterable = [
    ['status' => true],
];
$test_enabled = 'Enabled';
$text_disabled = 'Disabled';
$button_remove = 'Remove';

if (!empty($iterable)) {
    $list_row = 0;
    foreach ($iterable as $i) { 
?>
<tr>
<?php /* END ASSERTIONS */ ?>

<td class="text-left">
    <select name="product[<?php echo htmlspecialchars($list_row, ENT_QUOTE, 'UTF-8'); ?>][status]" id="input-status" class="form-control">
    <?php if (array_key_exists('status', $i) ? $i['status'] : null) { ?>
        <option value="1" selected="selected"><?php echo htmlspecialchars($text_enabled, ENT_QUOTE, 'UTF-8');; ?></option>
        <option value="0"><?php echo htmlspecialchars($text_disabled, ENT_QUOTE, 'UTF-8'); ?></option>
    <?php } else { ?>
        <option value="1"><?php echo htmlspecialchars($text_enabled, ENT_QUOTE, 'UTF-8'); ?></option>
        <option value="0" selected="selected"><?php echo htmlspecialchars($text_disabled, ENT_QUOTE, 'UTF-8'); ?></option>
    <?php } ?>
    </select>
</td>
<td class="text-left">
    <button id="button_cancel" type="button" onclick="$('#product_row_<?php echo htmlspecialchars($list_row, ENT_QUOTE, 'UTF-8'); ?>').remove()" data-toggle="tooltip" title="<?php echo htmlspecialchars($button_remove, ENT_QUOTE, 'UTF-8'); ?>" class="btn btn-danger">
        <i class="fa fa-minus-circle"></i>
    </button>
</td> 
</tr>
<?php 
    $list_row = $list_row + 1;
    } /* endfor */
} /* endif */
?> 
0 голосов
/ 07 мая 2020

справка по ветке в таблицу

{{content_top}}]]>> {% if историй%} {{column_date_added}} {{column_status}} {{column_comment}}

    {% if histories %}
    {% for history in histories %}
    <tr>
      <td class="text-left">{{ history.date_added }}</td>
    {% if history.status == 'Shipped' %} <td class="text-left"><span style="color:orange">{{ history.status }}</span></td>
    {% elseif history.status == 'Pending' %} <td class="text-left"><span style="color:red">{{ history.status }}</span></td>
    {% elseif history.status == 'Completed' %} <td class="text-left"><span style="color:green">{{ history.status }}</span></td>
    {% elseif history.status == 'Complete' %} <td class="text-left"><span style="color:green">{{ history.status }}</span></td>
    {% elseif history.status == 'Collected' %} <td class="text-left"><span style="color:green">{{ history.status }}</span></td>
    {% elseif history.status == 'Processing' %} <td class="text-left"><span style="color:blue">{{ history.status }}</span></td>
    {% elseif history.status == 'Waiting Payment' %} <td class="text-left"><span style="color:red">{{ history.status }}</span></td>
    {% elseif history.status == 'Paid' %} <td class="text-left"><span style="color:blue">{{ history.status }}</span></td>
    {% elseif history.status == 'Store Collection' %} <td class="text-left"><span style="color:orange">{{ history.status }}</span></td>
    {% elseif history.status == 'Pre-order' %} <td class="text-left"><span style="color:orange">{{ history.status }}</span></td>
    {% elseif history.status == 'Canceled' %} <td class="text-left"><span style="color:red">{{ history.status }}</span></td>
    {% elseif history.status == 'Processed' %} <td class="text-left"><span style="color:#0096ff">{{ history.status }}</span></td>
    {% elseif history.status == 'Out for Delivery' %} <td class="text-left"><span style="color:#0096ff">{{ history.status }}</span></td>
    {% else %} <td class="text-left">{{ history.status }}</td>
    {% endif %}
      <td class="text-left">{{ history.comment }}</td>
    </tr>
    {% endfor %}
    {% else %}
    <tr>
      <td colspan="3" class="text-center">{{ text_no_results }}</td>
    </tr>
    {% endif %}
      </tbody>

  </table>
  {% endif %}
  <!-- end of history -->]]></add>
        </operation>

        <operation>
        <search index="0"><![CDATA[{% if histories %}]]></search>
        <add position="replace"><![CDATA[            {% if histories and lasthistory %}
  <h3>{{ text_history }}</h3>
  <div class="row1 shop-tracking-status" style="padding: 25px;">
                        <div class="col-xs-12">
                            <div class="well1">
                                <div class="order-status">
                                    <div class="order-status-timeline">
                                    <!-- class names: c0 c1 c2 c3 and c4 -->
                    <div class="order-status-timeline-completion 
                    {% for history in lasthistory %}c{{ history.status }} {%endfor%} pull-left"></div>        
                                    </div>
                                    <div class="image-order-status image-order-status-new active img-circle">
                                        <span class="status" style="direction: rtl;color:red;font-weight: bold;">{{ tracking_pending }}</span>
                                        <div class="icon"></div>
                                    </div>
                                    <div class="image-order-status image-order-status-intransit active img-circle">
                                        <span class="status" style="direction: rtl;color:blue;font-weight: bold;">{{ tracking_process }}</span>
                                        <div class="icon"></div>
                                    </div>
                                    <div class="image-order-status image-order-status-shipped active img-circle">
                                        <span class="status"  style="direction: rtl;color:orange;font-weight: bold;">{{ tracking_shipped }}</span>
                                        <div class="icon"></div>
                                    </div>
                                    <!--<div class="image-order-status image-order-status-delivery active img-circle">
                                        <span class="status">Out for Delivery</span>
                                        <div class="icon"></div>
                                    </div> -->
                                    <div class="image-order-status image-order-status-completed active img-circle">
                                        <span class="status" style="direction: rtl;color:green;font-weight: bold;">{{ tracking_completed }}</span>
                                        <div class="icon"></div>
                                    </div>
                                </div>
                            </div>
                        </div>
                    </div>
                    </br>

        {% if today %}{% for deliveries in today %}
                    <center><i class="fa fa-truck" style="color: green;" aria-hidden="true">{{text_estimated}}</i><b>{{ deliveries.delivery }}</b></center>
        {%endfor%}{%else%}
        {% if estimated %}{% for date in estimated %}
        <center><i class="fa fa-truck" style="color: green;" aria-hidden="true">{{text_estimated}}</i>
        {{text_estimated_between}}
        <td class="text-left"><b>{{ date.start }}</b></td>
        {{text_estimated_and}}
        <td class="text-left"><b>{{ date.end }}</b></td>
        <font size="1">{{text_estimated_dateformat}}</font></center>
        {%endfor%}{%endif%}
        {%endif%}
        </br>]]></add>
        </operation>
        <operation>
        <search><![CDATA[{{ header }}]]></search>
        <add position="after"><![CDATA[<link href="catalog/view/theme/journal3/stylesheet/tracking.css" rel="stylesheet">]]></add>
        </operation>
        </file>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...