Вход • Регистрация

Неверное отображение цены

  • 29 декабря 2011 г.
  • Я не знаю ошибка это или нет, но почему-то цена товара на сайте отображается неверно.
    Указана - Цена: 1670750 руб.
    А отображается - Цена: 1.67075e+06 руб.

    А если написать цену например 1 или 100000, то всё верно отображается.

    В настройках магазина всё нормально:
    количество знаков после запятой: пусто
    разделитель целых: пусто
    разделитель десятков: пусто

    • 29 декабря 2011 г.
    • Это из-за неявной типизации переменных в языке PHP, большое число он автоматически переводит в float, вот и выводиться белеберда...

      В PHP есть функция number_format, она все решает.

      shop.view.php - везде где встречается ["price"] обернуть в эту функцию, найти можно эти места просто Ctrl+F "$this->_('PRICE')"
      • 29 декабря 2011 г. , редакция: 29 декабря 2011 г.
      • Спасибо. А что значит "обернуть"? И что именно обернуть, это - "price" или это - "$this->_('PRICE')"?
        • 29 декабря 2011 г. , редакция: 29 декабря 2011 г.
        • Это значит, где встречается вывод из массива со значением $array["price"], "обернуть" значит number_format($array["price"]). Например,

          Код
          echo '<div class="shop_price">' . $this->_('PRICE') . ': <span class="shop_price_value">' . number_format($r["price"]) . '</span> <span class="shop_price_currency">' . $result["currency"] . '</span></div>';
          • 29 декабря 2011 г.
          • Если так делать, то вообще 0 показывается.
            Я сделал точно как вы написали. Вот скриншот.
            • 29 декабря 2011 г.
            • А почему $r, когда у вас там должно быть $row ?

              Код я привел для примера, что бы вы поняли, что значит "обернуть"
            • 29 декабря 2011 г.
            • Кажись в вашем примере там были как бы пропущены 2 буквы - ow.
              • 29 декабря 2011 г. , редакция: 29 декабря 2011 г.
              • shop.view.php строка 967
  • 03 июня 2012 г.
  • А в админке осталось:
    • 07 июня 2012 г.
    • Как исправить:
      Файл modules/useradmin/useradmin.inc.php

      После строки 121 вставьте

      Код
      if('price' == $result["name"]) { $result["text"] = number_format($result["text"]); }
  • 07 июня 2012 г.
  • В php есть замечательная функция money_format, но она берет свои значения исходи из системных настроек locale
  • 26 июля 2017 г.
  • Всем добрый вечер! Кто-нибудь сталкивался с такой проблемой? Установил новые цены в 1С, сделал обмен с сайтом. И цена задублировалась, хотел скрыть через CSS, но у меня не вышло, я так понял надо во вьюхах искать проблему, здесь shop.view.buy_form.php
    Код
    <?php
    /**
    * Шаблон кнопки «Купить», в котором характеристики, влияющие на цену выводятся в виде выпадающего списка
    *
    * @package DIAFAN.CMS
    * @author diafan.ru
    * @version 6.0
    * @license http://www.diafan.ru/license.html
    * @copyright Copyright (c) 2003-2016 OOO «Диафан» (http://www.diafan.ru/)
    */

    if (! defined('DIAFAN'))
    {
    $path = __FILE__; $i = 0;
    while(! file_exists($path.'/includes/404.php'))
    {
    if($i == 10) exit; $i++;
    $path = dirname($path);
    }
    include $path.'/includes/404.php';
    }

    /*
    * <div class="iprice">
    1900 Р

    <div class="iprice__last">
    Старая цена:
    <span>2900 Р</span>
    </div>

    <div class="iprice__discount">-20%</div>
    </div>

    <div class="cart__ui">
    <div class="cart__wrp">
    <div class="cart__field cart__field_color">
    <div class="infofield">Цвет:</div>

    <div class="selectbox" style="display:inline-block;position:relative"><div class="select" style="float: left; position: relative; width: 89px;"><div class="text">Голубой</div><b class="trigger"><i class="arrow"></i></b></div><div class="dropdown" style="position: absolute; overflow-y: auto; overflow-x: hidden; list-style: none; left: 0px; top: 31px; width: 181px; display: none;"><ul><li class="selected sel">Голубой</li><li>Синий</li><li>Красный</li></ul></div></div><select style="position: absolute; top: -9999px;">
    <option>Голубой</option>
    <option>Синий</option>
    <option>Красный</option>
    </select>
    </div>

    <div class="cart__field cart__field_size">
    <div class="infofield">Размер:</div>

    <div class="selectbox" style="display:inline-block;position:relative"><div class="select" style="float: left; position: relative; width: 95px;"><div class="text">S (44-46)</div><b class="trigger"><i class="arrow"></i></b></div><div class="dropdown" style="position: absolute; overflow-y: auto; overflow-x: hidden; list-style: none; left: 0px; top: 31px; width: 105px; display: none;"><ul><li class="selected sel">S (44-46)</li><li>l (44-46)</li><li>m (44-46)</li></ul></div></div><select style="position: absolute; top: -9999px;">
    <option>S (44-46)</option>
    <option>l (44-46)</option>
    <option>m (44-46)</option>
    </select>
    </div>

    <div class="cart__field">
    <div class="infofield">Кол-во:</div>

    <div class="field-count">
    <input type="text" value="1">

    <div class="field-count__up"></div>
    <div class="field-count__down"></div>
    </div>
    </div>
    </div>

    <button class="btn btn_green">В корзину</button>
    <a href="#" class="btn btn_one_click js-one-click">Купить в один клик</a>
    </div>
    */

    if (! empty($result["result"]["access_buy"]))
    return false;

    if($result["row"]["empty_price"])
    return false;

    $action = '';
    if(! $result["result"]["cart_link"] || $result["row"]["no_buy"] || empty($result["row"]["count"]))
    {
    $action = 'buy';
    }

    echo '
    <form method="post" action="" class="js_shop_form shop_form ajax">
    <input type="hidden" name="good_id" value="'. $result["row"]["id"].'">
    <input type="hidden" name="module" value="shop">
    <input type="hidden" name="action" value="'.$action.'">';

    if ($result["row"]["no_buy"] || empty($result["row"]["count"]))
    {

    $hide_submit = true;
    $waitlist = true;
    }


    if(! $result["result"]["cart_link"])
    {
    $hide_submit = true;
    }




    // у товара несколько цен
    if ($result["row"]["price_arr"])
    {
    foreach ($result["row"]["price_arr"] as $price)
    {
    $param_code = '';
    foreach ($price["param"] as $p)
    {
    if($p["value"])
    {
    $param_code .= ' param'.$p["id"].'="'.$p["value"].'"';
    }
    }
    if(! empty($price["image_rel"]))
    {
    $param_code .= ' image_id="'.$price["image_rel"].'"';
    }
    echo '<div class="iprice js_shop_param_price shop_param_price shop-item-price"'.$param_code.'>';
    echo '<span class="js_shop_price" summ="'.$price["price_no_format"].'">'.$price["price"].'</span> '.$result["result"]["currency"];
    if (!empty($price["old_price"]))
    {
    echo PHP_EOL.'<div class="iprice__last">
    '.$this->diafan->_('Старая цена').':
    <span class="iprice__last_value">'.$price["old_price"].' '.$result["result"]["currency"].'</span>
    </div>';

    }

    if(!empty($result['row']['discount'])) {
    echo PHP_EOL.'<div class="iprice__discount">-'.$result['row']["discount"].$result['row']["discount_currency"].($result['row']["discount_finish"] ? ' ('.$this->diafan->_('до').' '.$result['row']["discount_finish"].')' : '').'</div>';
    }

    if (! $price["count"] && empty($hide_submit) || empty($price["price_no_format"]) && ! $result['result']["buy_empty_price"])
    {
    echo '<span class="js_shop_no_buy shop_no_buy">'.$this->diafan->_('Товар временно отсутствует').'</span>';
    $waitlist = true;
    }

    echo '</div>';
    }

    echo '<div class="cart__ui">';

    echo '<div class="cart__wrp js_shop_form_param">';

    foreach ($result["result"]["depends_param"] as $param)
    {
    if(! empty($result["row"]["param_multiple"][$param["id"]]))
    {
    if(count($result["row"]["param_multiple"][$param["id"]]) == 1)
    {
    foreach ($result["row"]["param_multiple"][$param["id"]] as $value => $depend)
    {
    echo '<input type="hidden" name="param'.$param["id"].'" value="'.$value.'"'.($depend == 'depend' ? ' class="depend_param js_shop_depend_param"' : '').'>';
    }
    }
    else
    {
    $select = '';
    foreach ($param["values"] as $value)
    {
    if(! empty($result["row"]["param_multiple"][$param["id"]][$value["id"]]))
    {
    if(! $select)
    {
    $select = '<div class="infofield">'.$param["name"].':</div><select name="param'.$param["id"].'" class="shop-dropdown inpselect'.($result["row"]["param_multiple"][$param["id"]][$value["id"]] == 'depend' ? ' depend_param js_shop_depend_param' : '').'">';
    }

    $select .= '<option value="'.$value["id"].'"'
    .(! empty($value["selected"]) ? ' selected' : '')
    .' class="js_form_option_selected">'.$value["name"].'</option>';
    }
    }
    if($select)
    {
    echo '<div class="cart__field">'.$select.'</select></div>';
    }
    }
    }
    }


    }
    else {
    echo '<div class="cart__ui"><div class="cart__wrp">';
    }


    if (empty($result["row"]['is_file']) && empty($hide_submit))
    {
    echo '<div class="cart__field js_shop_buy"><div class="infofield">'.$this->diafan->_('Кол-во').':</div><div class="field-count js_buy_count">'
    . '<input type="text" value="1" name="count" pattern="[0-9]+([\.|,][0-9]+)?" step="any">'
    . '<div class="field-count__up js_buy_count_plus"></div><div class="field-count__down js_buy_count_minus"></div></div></div>';
    }

    echo '</div>';


    if(! empty($result["row"]["additional_cost"]))
    {
    $rand = rand(0, 9999);
    echo '<div class="js_shop_additional_cost cart__wrp">';
    foreach($result["row"]["additional_cost"] as $r)
    {
    echo '<div class="cart__field"><input type="checkbox" name="additional_cost[]" value="'.$r["id"].'" id="shop_additional_cost_'.$result["row"]["id"].'_'.$r["id"].'_'.$rand.'" summ="';
    if(! $r["percent"] && $r["summ"])
    {
    echo $r["summ"];
    }
    echo '"> <label for="shop_additional_cost_'.$result["row"]["id"].'_'.$r["id"].'_'.$rand.'">'.$r["name"];
    if($r["percent"])
    {
    foreach ($result["row"]["price_arr"] as $price)
    {
    $param_code = '';
    foreach ($price["param"] as $p)
    {
    if($p["value"])
    {
    $param_code .= ' param'.$p["id"].'="'.$p["value"].'"';
    }
    }
    echo '<div class="js_shop_additional_cost_price" summ="'.$r["price_summ"][$price["price_id"]].'"'.$param_code.'>';
    echo ' <b>+'.$r["format_price_summ"][$price["price_id"]].' '.$result["result"]["currency"].'</b></div>';
    }
    }
    elseif($r["summ"])
    {
    echo ' <div class="js_shop_additional_cost" summ="'.$r["summ"].'"><b>+'.$r["format_summ"].' '.$result["result"]["currency"].'</b></div>';
    }
    echo '</label></div>';
    }
    echo '</div>';
    }




    if(! empty($waitlist))
    {
    echo '
    <div class="js_shop_waitlist js_shop_no_buy js_shop_no_buy_good">

    <div style="margin-bottom:10px">'.$this->diafan->_('Товар временно отсутствует').',<br>'.$this->diafan->_('сообщить когда появится на e-mail').':</div>
    <input type="email" name="mail" value="'.$this->diafan->_users->mail.'">
    <button class="btn btn_green btn_small" type="button" action="wait">'.$this->diafan->_('Ок').'</button>
    <div class="errors error_waitlist" style="display:none"></div></div>
    ';
    }




    if(empty($hide_submit))
    {
    echo '<button class="btn btn_green js_shop_buy" type="button" action="buy">'.$this->diafan->_('В корзину').'</button>'.PHP_EOL;
    }


    if(empty($hide_submit) && ! empty($result["result"]["one_click"]))
    {
    echo '<button class="js_shop_one_click btn btn_one_click" type="button" data-good_id="'.$result['row']['id'].'" action="one_click">'.$this->diafan->_('Купить в один клик').'</button>';
    }
    echo '<div class="error"';
    if (! empty($result["row"]["count_in_cart"]))
    {
    echo '>'.$this->diafan->_('В <a href="%s">корзине</a> %s шт.', true, BASE_PATH_HREF.$result["result"]["cart_link"], $result["row"]["count_in_cart"]);
    }
    else
    {
    echo ' style="display:none;">';
    }
    echo '</div></div>';
    echo '</form>';
    //форма быстрого заказа
    if(! empty($result["result"]["one_click"]))
    {
    $result["result"]["one_click"]["good_id"] = $result["row"]["id"];
    echo $this->get('one_click', 'cart', $result["result"]["one_click"]);
    }


    и shop.view.buy_form_item.php.
    Код
    <?php
    /**
    * Шаблон кнопки «Купить», в котором характеристики, влияющие на цену выводятся в виде выпадающего списка
    *
    * @package DIAFAN.CMS
    * @author diafan.ru
    * @version 6.0
    * @license http://www.diafan.ru/license.html
    * @copyright Copyright (c) 2003-2016 OOO «Диафан» (http://www.diafan.ru/)
    */

    if (! defined('DIAFAN'))
    {
    $path = __FILE__; $i = 0;
    while(! file_exists($path.'/includes/404.php'))
    {
    if($i == 10) exit; $i++;
    $path = dirname($path);
    }
    include $path.'/includes/404.php';
    }
    /*
    <div class="iprice">
    1900 Р

    <div class="iprice__last">
    Старая цена:
    <span>2900 Р</span>
    </div>

    <div class="iprice__discount">-20%</div>
    </div>

    <div class="cart__ui">
    <div class="cart__wrp">
    <div class="cart__field cart__field_color">
    <div class="infofield">Цвет:</div>

    <div class="selectbox" style="display:inline-block;position:relative"><div class="select" style="float: left; position: relative; width: 89px;"><div class="text">Голубой</div><b class="trigger"><i class="arrow"></i></b></div><div class="dropdown" style="position: absolute; overflow-y: auto; overflow-x: hidden; list-style: none; left: 0px; top: 31px; width: 181px; display: none;"><ul><li class="selected sel">Голубой</li><li>Синий</li><li>Красный</li></ul></div></div><select style="position: absolute; top: -9999px;">
    <option>Голубой</option>
    <option>Синий</option>
    <option>Красный</option>
    </select>
    </div>

    <div class="cart__field cart__field_size">
    <div class="infofield">Размер:</div>

    <div class="selectbox" style="display:inline-block;position:relative"><div class="select" style="float: left; position: relative; width: 95px;"><div class="text">S (44-46)</div><b class="trigger"><i class="arrow"></i></b></div><div class="dropdown" style="position: absolute; overflow-y: auto; overflow-x: hidden; list-style: none; left: 0px; top: 31px; width: 105px; display: none;"><ul><li class="selected sel">S (44-46)</li><li>l (44-46)</li><li>m (44-46)</li></ul></div></div><select style="position: absolute; top: -9999px;">
    <option>S (44-46)</option>
    <option>l (44-46)</option>
    <option>m (44-46)</option>
    </select>
    </div>

    <div class="cart__field">
    <div class="infofield">Кол-во:</div>

    <div class="field-count">
    <input type="text" value="1">

    <div class="field-count__up"></div>
    <div class="field-count__down"></div>
    </div>
    </div>
    </div>

    <button class="btn btn_green">В корзину</button>
    <a href="#" class="btn btn_one_click js-one-click">Купить в один клик</a>
    </div>
    */

    if (! empty($result["result"]["access_buy"]))
    return false;

    if($result["row"]["empty_price"])
    return false;

    $action = '';
    if(! $result["result"]["cart_link"] || $result["row"]["no_buy"] || empty($result["row"]["count"]))
    {
    $action = 'buy';
    }



    if ($result["row"]["no_buy"] || empty($result["row"]["count"]))
    {

    $hide_submit = true;
    $waitlist = true;
    }


    if(! $result["result"]["cart_link"])
    {
    $hide_submit = true;
    }




    // у товара несколько цен
    if ($result["row"]["price_arr"])
    {
    foreach ($result["row"]["price_arr"] as $price)
    {
    $param_code = '';
    foreach ($price["param"] as $p)
    {
    if($p["value"])
    {
    $param_code .= ' param'.$p["id"].'="'.$p["value"].'"';
    }
    }
    if(! empty($price["image_rel"]))
    {
    $param_code .= ' image_id="'.$price["image_rel"].'"';
    }
    echo '<div class="iprice js_shop_param_price shop_param_price shop-item-price"'.$param_code.'>';
    echo '<span class="js_shop_price" summ="'.$price["price_no_format"].'">'.$price["price"].'</span> '.$result["result"]["currency"];
    if (!empty($price["old_price"]))
    {
    echo PHP_EOL.'<div class="iprice__last">
    '.$this->diafan->_('Старая цена').':
    <span class="iprice__last_value">'.$price["old_price"].' '.$result["result"]["currency"].'</span>
    </div>';

    }

    if(!empty($result['row']['discount'])) {
    echo PHP_EOL.'<div class="iprice__discount">-'.$result['row']["discount"].$result['row']["discount_currency"].($result['row']["discount_finish"] ? ' ('.$this->diafan->_('до').' '.$result['row']["discount_finish"].')' : '').'</div>';
    }

    if (! $price["count"] && empty($hide_submit) || empty($price["price_no_format"]) && ! $result['result']["buy_empty_price"])
    {
    echo '<span class="js_shop_no_buy shop_no_buy">'.$this->diafan->_('Товар временно отсутствует').'</span>';
    $waitlist = true;
    }

    echo '</div>';
    }

    }



    echo '<div class="error"';
    if (! empty($result["row"]["count_in_cart"]))
    {
    echo '>'.$this->diafan->_('В <a href="%s">корзине</a> %s шт.', true, BASE_PATH_HREF.$result["result"]["cart_link"], $result["row"]["count_in_cart"]);
    }
    else
    {
    echo ' style="display:none;">';
    }
    echo '</div>';

    Что предпринять? Кеш чистил, не помогло.

    • 26 июля 2017 г.
    • Я думаю, что проблема не во вьюхе. У вас же не у всех товаров такое проявилось.
      Т.е. при обмене данными, вы инфу заливаете в базу данных, файлы при этом не затрагиваются.
      Смотрите, что у вас получилось в админке. Откройте товар, в котором задублировалась цена и проверьте, все ли там нормально.
  • 26 июля 2017 г.
  • Удалял из custom shop.view.buy_form.php не помогло, вид изменился, цены так же две, значит не во вьюхе дело...
  • 26 июля 2017 г.
  • Возможно цена выводится в разных вьюхах.. Как понять где и почему раньше до обмена такого не было, не пойму никак.
    • 26 июля 2017 г.
    • Нет. В админке что у вас? Товар нормальный и ненормальный сравните хотя бы визуально.
      • 27 июля 2017 г.
      • Александра, я не видел вашего сообщения, F5 не нажал перед тем как новое сообщение написать.
        Проверил, цена одна. Скидки отключал, не в них дело.
  • 27 июля 2017 г.
  • Уже все цены установил в 1С новой датой и снова сделал обмен = тоже самое. Может можно как-нибудь руками в db поправить?
    • 27 июля 2017 г.
    • Причем после данной процедуры часть товаров с косяком нормально отображается, а те что были в норме, с двойной ценой теперь. Разгадка наверное рядом, но я ничегошеньки не понимаю.
      • 27 июля 2017 г.
      • На первом скриншоте, который Вы привели в качестве примера, видно, что при исполнении js-скриптов возникает 3 ошибки. Посмотрите их, они укажут на причину недуга и подскажут решение.
        • 27 июля 2017 г.
        • Виталий, вы про эти 3 ошибки? Они вроде к метрике относятся, могут ли они так на цену повлиять? Тем паче эти ошибки уже давно..
  • 27 июля 2017 г.
  • Зашел в каждый товар, вручную поставил галку "товар отсутствует" потом снова снял галку и цена вернулась в нормальное состояние. Но это странно, надо искать проблему.
    • 27 июля 2017 г.
    • Посмотрите таблицу shop_price? Там наверно на каждый good_id по 2 цены стало?
      • 27 июля 2017 г.
      • Андрей, я конечно кое-как понял о чем вы, заодно изучил где это находится, залез в базу, сделал скриншот, глянете? Вроде как нет задвоения в базе.

Новости

  • 18 июня
  • В сборке большое обновление demo-шаблона, дополнительная защита от спама, улучшение YML-импорта и еще много важного и интересного.
  • 24 апреля
  • В новой сборке совершили революцию в структурировании кастомизированной информации в шаблонах, добавили авторегистрацию пользователей, усовершенствовали защиту от спама, актуализировали накопительную скидку, а также улучшили производительность и стабильность работы системы.
  • 12 января
  • После выхода сборки 7.1 мы выпустили уже три патча, в каждом из которых улучшаем административную часть сайта. Сборка DIAFAN.CMS 7.1.3 уже доступна к установке. 

Форум