Добавление условного выражения в усы/php

Рассмотреть возможность:

<?php
/**
 * Single variation display
 *
 * This is a javascript-based template for single variations (see https://codex.wordpress.org/Javascript_Reference/wp.template).
 * The values will be dynamically replaced after selecting attributes.
 *
 * @see     https://docs.woocommerce.com/document/template-structure/
 * @author  WooThemes
 * @package WooCommerce/Templates
 * @version 2.5.0
 */
if ( ! defined( 'ABSPATH' ) ) {
    exit;
}
?>
<script type="text/template" id="tmpl-variation-template">
    <div class="woocommerce-variation-description">{{{ data.variation.variation_description }}}</div>

    <div class="woocommerce-variation-price">{{{ data.variation.price_html }}}</div>

    <div class="woocommerce-variation-availability">{{{ data.variation.availability_html }}}</div>

 <div class="woocommerce-variation-custom-text-field">
        GTIN: <span class="sku">{{{ data.variation.wccaf_gtin }}}</span>
    </div>

 <div class="woocommerce-variation-custom-text-field">
        MPN: <span class="sku">{{{ data.variation.wccaf_mpn }}}</span>
    </div>

</script>
<script type="text/template" id="tmpl-unavailable-variation-template">
    <p><?php _e( 'Sorry, this product is unavailable. Please choose a different combination.', 'woocommerce' ); ?></p>
</script>

Как мне реализовать условное выражение, чтобы ЕСЛИ {{{ data.variation.wccaf_gtin }}} возвращал пустое/пустое значение, ТОГДА выводить сообщение "GTIN недоступен"?

Что я пробовал:

Я прочитал это на wiki:

Шаблон с тегом раздела:

{{#x}} Некоторый текст {{/x}} Здесь, когда x является логическим значением, тег раздела действует как условное условие

Так что я попытался

 <div class="woocommerce-variation-custom-text-field">
        GTIN: <span class="sku">{{#repo}}{{ data.variation.wccaf_gtin }}{{/repo}}{{^repo}}N/A{{/repo}}</span>
    </div>

что не работает.

Но я совершенно новичок в усах, и мне нужно руководство.


person ptrcao    schedule 02.03.2019    source источник
comment
mustache это хорошо. Но вы также можете проверить это www.github.com/Redcof/ints-jst.   -  person int soumen    schedule 12.03.2019


Ответы (3)


Согласно документации по усам

// if exist
{{#repo}}
  <b>{{name}}</b>        
{{/repo}}

// if not exist
{{^repo}}
  No repos :(
{{/repo}}

Вы можете попробовать это

<div class="woocommerce-variation-custom-text-field">
        GTIN: <span class="sku">{{#data.variation.wccaf_gtin}}{{ data.variation.wccaf_gtin }}{{/data.variation.wccaf_gtin}}{{^data.variation.wccaf_gtin}}N/A{{/data.variation.wccaf_gtin}}</span>
</div>
person Josua Marcel C    schedule 07.03.2019

Это не шаблон Mustache, как отмечается в комментариях, это специальное решение WordPress wp.template.

У него нет логических тегов, но есть теги оценки <# #>.

Из быстрого Google вот пример того, как бы вы выписали чек, используя их:

  <# if ( data.trueValue ) { #>
    <p> I am only output if <code>data.trueValue</code> is true.
  <# } #>

Через https://lkwdwrd.com/wp-template-js-templates-wp

person Rarst    schedule 03.03.2019
comment
Не могли бы вы переписать это решение так, чтобы, если {{{ data.variation.wccaf_gtin }}} возвращало пустое/пустое значение, вывод GTIN был недоступен? Я бы не знал, как его адаптировать, спасибо. - person ptrcao; 03.03.2019
comment
Что-то вроде <# if ( ! data.variation.wccaf_gtin ) { #> - person Rarst; 03.03.2019
comment
<# if(isEmpty(data.variation.wccaf_gtin)) { #> <p> I am only output if <code>data.variation.wccaf_gtin</code> is true. <# } #> Будет ли это правильным использованием? (Я не знаю ни усов, ни JS.) - person ptrcao; 03.03.2019
comment
Итак, чтобы показать текст заполнителя, если значение пусто, я считаю, что это должно выглядеть так: <# if ( data.variation.wccaf_gtin ) { #> <p>{{{ data.variation.wccaf_gtin }}}</p> <# } else { #> <p>GTIN unavailable</p> <# } #> При этом я никогда не работал с шаблонами WP, или не работал в последние несколько лет, поэтому я просто думаю, что это должно делать Это. Вы можете обернуть условие в isEmpty, если в противном случае проверка не удастся - person kachnitel; 05.03.2019
comment
@kachnitel Я попробовал твой код плюс еще и с isEmpty: <# if isEmpty( data.variation.wccaf_gtin ) { #> <p>{{{ data.variation.wccaf_gtin }}}</p> <# } else { #> <p>GTIN unavailable</p> <# } #> Не повезло, друг, попробуй еще раз? - person ptrcao; 06.03.2019
comment
Странно, я быстро поискал и нашел этот вопрос, который использует ту же идею в существующем коде <# if ( isVideo ) { #> <span>Show Video List</span> <# } else { #> <span>Show Tracklist</span> <# } #> Получаете ли вы вообще какие-либо результаты с этим вопросом выше? - person kachnitel; 06.03.2019
comment
@kachnitel В этом ответе есть оговорка, в которой говорится: This may not only apply to wordpress. Как вы думаете, это может иметь какое-то отношение к этому? - person ptrcao; 07.03.2019

Попробуйте сделать то же самое, используя ints-jst.

Код:

<div id="try-jst">
            <div class="woocommerce-variation-description">
                <js-t> print(data.variation.variation_description);</js-t>
            </div>

            <div class="woocommerce-variation-price">
                <js-t> print(data.variation.price_html);</js-t>
            </div>

            <div class="woocommerce-variation-availability">
                <js-t> print(data.variation.availability_html);</js-t>
            </div>

            <div class="woocommerce-variation-custom-text-field">
                GTIN:
                <span class="sku">
            <js-t>
                if(!!data.variation.wccaf_gtin) {
                   print(data.variation.wccaf_gtin);
                } else {
                   print("unavailable");
                }
            </js-t>
        </span>
            </div>
            <div class="woocommerce-variation-custom-text-field">
                MPN:
                <span class="sku">
            <js-t>
                if(!!data.variation.wccaf_mpn) {
                   print(data.variation.wccaf_mpn);
                } else {
                   print("unavailable");
                }
            </js-t>
        </span>
            </div>
        </div>

Сценарий:

<script>
    /* var data = {
        variation: {
            variation_description: 'variation_description',
            price_html: 'price_html',
            availability_html: 'availability_html',
            wccaf_gtin: '',
            wccaf_mpn: '123',
        }
    }; */
    // jQuery version
    compile($('#try-jst')[0]);
    run();

    // Plain Javascript
    /**
     * compile(document.getElementById('try-jst'));
     * run();
     */
</script>

Вывод:

<div id="try-jst">
                <div class="woocommerce-variation-description">variation_description</div>
                <div class="woocommerce-variation-price">price_html</div>
                <div class="woocommerce-variation-availability">availability_html</div>
                <div class="woocommerce-variation-custom-text-field"> GTIN: <span class="sku">unavailable</span></div>
                <div class="woocommerce-variation-custom-text-field"> MPN: <span class="sku">123</span></div>
            </div>

Так что можете попробовать.

person int soumen    schedule 12.03.2019