Знак валюты в ​product.cart Есть решение

Как избавиться от вывода значка валюты в шаблоне product.cart.html?

2 ответа

  • 1
    Ольга 15 июня 2018 13:10 # Решение

    нет кнопочки "отметить как решение" напротив того которое подошло( Поэтому продублирую:

    В product.js найдите (предыдущую правку js надо вернуть как было)
    if (!this.currency.sign_position) {
    return s + this.currency.sign_delim + number;
    } else {
    return number + this.currency.sign_delim + s;
    }
    и замените на
    if (!this.currency.sign_position) {
    return number;
    } else {
    return number;
    }

    Но в моей теме работает сжатый скрипт product.min.js, там есть аналогичный код
    return this.currency.sign_position?t+this.currency.sign_delim+d:d+this.currency.sign_delim+t
    убрала d.


  • 2
    replicant 13 июня 2018 17:46 #

    {shop_currency($sku.price, $product.currency)} - выведет стоимость в валюте
    {$sku.price} - просто стоимость без указания валюты

    Если вам надо международный знак Рубля заменить, скажем на р. или руб., то решение может быть иное (см. ниже). В любом случае пробуйте и смотрите, что вам подойдет.

    Создать файл /wa-config/currency.php c кодом

    <?php
    
    return array(
        'RUB' => array(
            'precision' => 0,
            'sign' => 'р.',
            'sign_html' => '<span class="ruble">руб.</span>',
        ),
    );
    • +1
      Ольга Ольга 14 июня 2018 10:04 #

      Спасибо, у меня немного другая проблема. У артикулов <input name="sku_id" type="radio"... есть атрибуты data-compare-price и data-price. В них содержатся значения цены и эта цена идет уже со значком валюты. Видимо какой-то скрипт подставляет... Любые попытки избавиться от валюты именно в product.cart.html для цен артикулов никчему не привели, а по всему сайту знак валюты удалять не хочу. Что можно тут придумать?

      • +1
        replicant replicant 14 июня 2018 13:40 #

        По-моему скрипт в product.js этим балуется, но суть в следующем. Чтобы убрать валюту надо убрать shop_currency или shop_currency_html перед ценой. А data-price и data-compare-price трогать не надо, но, если у вас class="price ..." , то скрипт добавит валюту. По крайней мере у меня так и происходит.

        Вот пример с валютой:

        <span data-price="{shop_currency($product.price, null, null, 0)}" class="price nowrap">
        {shop_currency($product.price)}</span>

        А вот этот пример уже будет без валюты:

        <span data-price="{shop_currency($product.price, null, null, 0)}" class="custom-class">
        {$product.price}</span>

        Т.е. надо ещё и класс менять на свой.


        Шаблон

        HTML код страницы

        Итог (мелким черным шрифтом цена без валюты custom_style)

        Правок по файлу шаблона product.cart.html все равно придется делать несколько и смотреть по месту.

        С зачеркнутой ценой ещё веселее. В шаблоне строка

        {if $product.compare_price > 0}<span class="compare-at-price nowrap"> 
        {shop_currency($product.compare_price)} </span>{/if}

        А в product.js есть код

        if (compare_price) {
                if (!this.add2cart.find(".compare-at-price").length) {
                    this.add2cart.prepend('<span class="compare-at-price nowrap"></span>');
                }
                this.add2cart.find(".compare-at-price").html(this.currencyFormat(compare_price)).show();
            } else {
                this.add2cart.find(".compare-at-price").hide();
            }

        И, если у вас есть зачеркнутые цены, то в рамках вашей задачи надо помимо удаления shop_currency менять class в первом куске кода на свой, а show заменять на hide. Колхоз дикий, но от значка валюты хотя бы избавитесь.

        Это все справедливо для шаблона default. В других тема дизайна может быть эти вещи реализованы иначе и от валюты будет проще избавиться.

        • +1
          Ольга Ольга 14 июня 2018 15:16 #

          Спасибо огромное за подробное объяснение) по вашему примеру цена без валюты выводится, но не переключается при выборе другого артикула. Тоесть какой бы я артикул не выбрала выводится цена основного. Видимо class="price ..." тот элемент благодаря которому и происходит это переключение(( Я уже просто не знаю что придумать, написала такую штучку, но она работает кругом, только не в том блоке где нужно((
          $(".nowrap").each(function() {
          var text = $(this).text();
          text = text.replace("грн.", " ");
          $(this).text(text);
          });

          Все дело в этом скрипте product.js, не могу понять в каком месте к цене валюта прикрепляется...

          • +1
            replicant replicant 14 июня 2018 15:18 #

            Ниже дал ответ на ваш вопрос. Блинский форум, никакой хронологии нормальной нет и парсер исходного кода ломает все. Отвечать и вести диалог непросто. Поэтому продублирую еще раз. Ещё один вариант решения. Может быть он подойдет лучше.


            В product.js в строке цена к валюте и прикрепляется

            Product.prototype.currencyFormat = function (number, no_html) {

            в скобках оставляем только (number).

            Затем в шаблоне product.cart.html убираем только shop_currency в нужных местах без смены классов. Полная версия со скриншотом ниже.

          • +1
            replicant replicant 14 июня 2018 15:24 #

            Штучка ваша должна работать с определенным элементом, а вы глобально рубите. Смысл правильный, но надо бить точнее, хотя можно и без этого решить.

          • +2
            replicant replicant 14 июня 2018 15:32 #

            Ах ты, вам еще и артикулы переключать надо. Сейчас подумаю как в таком случае быть. Вы бы сразу подробно изложили.

            В product.js найдите (предыдущую правку js надо вернуть как было)

                if (!this.currency.sign_position) {
                    return s + this.currency.sign_delim + number;
                } else {
                    return number + this.currency.sign_delim + s;
                }

            и замените на

                if (!this.currency.sign_position) {
                    return number;
                } else {
                    return number;
                }

            shop_currency в шаблоне для этого случая в основной цене и зачеркнутой можно и не удалять. Просто, если их не удалить, то валюта мелькнет во время загрузки product.js на медленных скоростях интернета, а если удалить, то мелькания уже не будет. Поэтому лучше конечно, наверное, удалить.

            После этого артикулы при выборе нормально переключаются.

            • +1
              replicant replicant 14 июня 2018 15:41 #

              Раз артикул и два артикул. Основная цена без валюты. Переключается норм.

      • +1
        Ольга Ольга 14 июня 2018 13:54 #

        выбор цены определенного артикула обрабатывается скриптом product.js, кто может подсказать какая функция там выводит значок валюты? Или как значок валюты обернуть в span чтоб потом стилями скрыть?

        • +1
          replicant replicant 14 июня 2018 14:32 #

          Достаточно поменять класс на свой и убрать shop_currency в шаблоне. JS можно и не трогать, кроме случая для зачеркнутой цены. В комментарии выше я добавил про это.

        • +2
          replicant replicant 14 июня 2018 14:52 #

          Есть еще решение. В product.js находите строку

          <span class="typ">Product</span><span class="pun">.</span><span class="pln">prototype</span><span class="pun">.</span><span class="pln">currencyFormat </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> </span><span class="pun">(</span><span class="pln">number</span><span class="pun">,</span><span class="pln"> no_html</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span>

          и в скобках оставляете только (number).

          Затем в шаблоне убираете только shop_currency в нужных местах, не трогая содержание data-price и data-compare-price и классы оформления менять не придется.

          После этого валюта пропадает.

          Как ни крути, но shop_currency убирать надо. Просто одно это может не дать эффекта в силу наличия product.js. Либо можно заменять символ валюты и его оформление, если есть, отдельным скриптом поверх всего и подключаемым в product.html, но многовато скриптов получится переделывающих одно и то же.

          • +1
            Ольга Ольга 14 июня 2018 16:22 #

            Получилось!! Спасибо большое))

            • +1
              replicant replicant 14 июня 2018 16:57 #

              Ну вот и хорошо. Только отметьте знаком решения какой именно из советов помог (про return number надеюсь), а то в процессе обсуждения вышла легкая запутаница.

              P.S. там можно было в последней строке только '+ s' убрать.

Добавить ответ

Чтобы добавить комментарий, зарегистрируйтесь или войдите