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

Вывести цену одного значения характеристики

  • 23 ноября 2013 г. , редакция: 23 ноября 2013 г.
  • Это для карточки товара в списке категорий.
    Кнопок "Купить" и "Отложить" нет, удалены. Вывод параметров (они там выпадающим списком были) тоже спрятан.

    Имеем характеристику, влияющую на цену.
    Цена у всех значений характеристики одинаковая (нам надо иметь для разных значений разное количество, поэтому так пришлось сделать).
    Для примера, характеристика имеет 3 значения с ценами:

    Размер - Цена - Количество
    102 см - 1000 руб - 1 шт.
    104 см - 1000 руб - 7 шт.
    106 см - 1000 руб - 3 шт.

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

    Как кастомизировать вот это место в файле shop.view.buy_form.php, чтобы показывалась только одна цена?

    Код
    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="shop_param_price"'.$param_code.'>';
    echo '<div class="shop_price">' . $this->diafan->_('Цена') . ': <span class="shop_price_value">' . $price["price"] . '</span> <span class="shop_price_currency">' . $result["result"]["currency"] . '</span></div>';
    if (!empty($price["old_price"]))
    {
    echo '<div class="shop_old_price">' . $this->diafan->_('Старая цена') . ': <span class="shop_price_value">' . $price["old_price"] . '</span>'
    . ' <span class="shop_price_currency">' . $result["result"]["currency"] . '</span></div>';
    }
    if (! $price["count"] && empty($hide_submit))
    {
    echo '<span class="shop_no_buy">' . $this->diafan->_('Товар временно отсутствует') . '</span>';
    $waitlist = true;
    }
    echo '</div>';
    }


    • 23 ноября 2013 г.
    • Только что заметил, что после сохранения, сортировка значений меняется!
      Перед сохранением было вот так:

      102 см - 1000 руб - 1 шт.
      104 см - 1000 руб - 7 шт.
      106 см - 1000 руб - 3 шт.

      Повторно открыл, стало вот так:
      106 см - 1000 руб - 3 шт.
      104 см - 1000 руб - 7 шт.
      102 см - 1000 руб - 1 шт.



      Потом еще раз сохранил (ничего не меняя!!!) и снова стало вот так как в начале:
      102 см - 1000 руб - 1 шт.
      104 см - 1000 руб - 7 шт.
      106 см - 1000 руб - 3 шт.

      Повторил еще несколько раз, и каждый раз меняет сортировку то туда, то сюда...
      Это что за хрень???
  • 23 ноября 2013 г.
  • В связи со сказанным выше, пока есть только одна идея (т.к. первое или верхнее значение не определить). Попробовал, работает:
    .shop_form li { display:none; }
    .shop_form li:first-child { display:block; }

    А тот код обернул вот так:

    Код

    echo '<ul>';
    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 '<li><div class="shop_param_price"'.$param_code.'>';
    echo '<div class="shop_price">' . $this->diafan->_('Цена') . ': <span class="shop_price_value">' . $price["price"] . '</span> <span class="shop_price_currency">' . $result["result"]["currency"] . '</span></div>';
    if (!empty($price["old_price"]))
    {
    echo '<div class="shop_old_price">' . $this->diafan->_('Старая цена') . ': <span class="shop_price_value">' . $price["old_price"] . '</span>'
    . ' <span class="shop_price_currency">' . $result["result"]["currency"] . '</span></div>';
    }
    if (! $price["count"] && empty($hide_submit))
    {
    echo '<span class="shop_no_buy">' . $this->diafan->_('Товар временно отсутствует') . '</span>';
    $waitlist = true;
    }
    echo '</div></li>';
    }
    echo '</ul>';


    Работает с виду хорошо, но это как-то "по-шамански".. нельзя ли "по-человечески"?
    • 23 ноября 2013 г. , редакция: 23 ноября 2013 г.
    • А что мешает вам сортировать и дербанить массивы?
      надо еще в тег <price> цену оборачивать, чтобы по schema.org :)
      • 23 ноября 2013 г.
      • Андрей, я не программист. И что такое массивы, знаю на примере "лесных массивов" в коих изредка бываю с фотоаппаратом

        Закидали умными фразами. Що це таке "schema.org" в 2-х словах?
        • 23 ноября 2013 г.
        • Цитата
          Що це таке "schema.org" в 2-х словах?

          Это микроразметка для поисковиков

          Вот как это делается http://help.yandex.ru/webmaster/schema-org/what-is-schema-org.xml
          Вот как проверить валидность микроразметки http://webmaster.yandex.ua/microtest.xml
          • 23 ноября 2013 г.
          • Спасибо! Если наш оптимизатор пристанет, буду знать.

            Но по существу моего вопроса в первом посту так никто и не ответил..
        • 24 ноября 2013 г.
        • Ну я тоже не программер, но немного научился. $result["row"]["price_arr"]["param"] - вот с этим массивом надо работать, вроде как.
          Посмотрите через print_r ($result["row"]["price_arr"]["param"]) что там лежит, а потом найдите подходящую функцию для сортировки.
          • 24 ноября 2013 г.
          • Спасибо! Это Вы по поводу того, что движок глючит и каждый раз сохраняет значения характеристики поменяв направление сортировки?
            Надо создать в пожеланиях указание на ошибку, да вот, все не найду время четко сформулировать проблему.
            • 25 ноября 2013 г.
            • Не, в этом массиве все цены сидят. Можно из него доставать только ту, которая вам нужна.
              Если дадите фтп, могу попробовать помочь, если время будет :)
              • 25 ноября 2013 г.
              • Спасибо! Но зачем ftp, если весь код привел выше?

                Кроме того, меня вполне устраивает метод применения
                .shop_form li { display:none; }
                - цена показывается
                - ничего лишнего нет (на паблике одно цена, как и надо).
  • 23 ноября 2013 г. , редакция: 24 ноября 2013 г.
  • То, что придумал выше с помощью
    Код
    .shop_form li { display:none; }
    .shop_form li:first-child { display:block; }
    работает нормально только, если в верхнем значении количество выше нуля. вылезает "Товар временно отсутствует".

    Решение - в карточках товара в списках категорий спрятал надпись "Товар временно отсутствует"
  • 26 ноября 2013 г. , редакция: 26 ноября 2013 г.
  • Из анналов (не путать с аналом)
    Дано
    Есть магазин. Есть товары. Есть характеристика "список с выбором нескольких значений", которая к тому же зависима от цены.
    Задача
    Вывести заданную характеристику (название и значение) и ОДНУ ее цену в блоке магазина.
    Решение
    shop.view.show_block.php
    Код
    <?php
    getPrice(array("row" => &$row, "result" => &$result),1); // вывести цену и описание только первого параметра



    function getPrice(array $r,$param_id)

    {

    if (empty($r["row"]["price"]) && empty($r["row"]["price_arr"]))

    return false;



    if(!empty($r["row"]["price_arr"]))

    {

    foreach($r["row"]["price_arr"] as $price)

    {

    foreach($price["param"] as $param)

    {

    if($param["id"] == $param_id)

    {

    foreach ($r["result"]["depends_param"] as $_param)

    {

    if($_param['id'] == $param_id)

    {

    echo '<p>'.$_param['name'];

    foreach($_param['values'] as $v)

    {

    if($v['id'] == $param['value'])

    {

    echo ' '.$v['name'];

    break;

    }



    }

    echo '</p>';

    break;

    }



    }



    if(!empty($price["old_price"]))

    echo '<span><del>'.$price["old_price"].' '.$r["result"]["currency"].'</del></span><br/>';



    echo '<span>'.$price["price"].' '.$r["result"]["currency"].'</span>';

    return true;

    }

    }

    }

    }

    }


    ^ ужос
  • 22 декабря 2014 г.
  • Что-то ничего из выше предложенного не работает..
    Может кто-то за год научился это делать? Подскажите!
  • 31 июля 2015 г.
  • Код
    Имеем характеристику, влияющую на цену.
    Цена у всех значений характеристики одинаковая (нам надо иметь для разных значений разное количество, поэтому так пришлось сделать).
    Для примера, характеристика имеет 3 значения с ценами:

    Размер - Цена - Количество
    102 см - 1000 руб - 1 шт.
    104 см - 1000 руб - 7 шт.
    106 см - 1000 руб - 3 шт.

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


    Для решения долго пользовался:
    Код
    .shop_form li { display:none; }
    .shop_form li:first-child { display:block; }


    Но теперь перестало работать, зараза! В некторых местах получаются накладки.

    Может кто-то предложить способ показа только одной цены вместо списка цен??? Кнопки "КУпить" нет, не нужна.
  • 31 июля 2015 г.
  • А вот это: https://user.diafan.ru/forum/show650/ Как вариант вам не подойдет?
    • 31 июля 2015 г.
    • Не нашел там ничего интересного, разве что добрые пожелания мне в отпуске.
      • 05 августа 2015 г.
      • Хм, видимо перепутал ссылку, я имел в виду вот это https://user.diafan.ru/forum/show1906/
        • 05 августа 2015 г.
        • спасибо. Почти о том же.
          Но тут мы пошли другим путем, вывели первую цену товара (у нас все цены одинаковые, отличается только размеры).
          У нас проблема, никак не можем нормально вывести "старую цену".
          • 05 августа 2015 г.
          • Используя выше обозначенный вариант, я как раз без проблем вывел старую цену.

            У меня это выглядит вот так:

            Код
            if ($result["row"]["price_arr"])
            {
            $min_price=10000000000;
            $min_old_price=10000000000;
            foreach($result["row"]["price_arr"] as $price)
            {
            if ($price["price"]<$min_price){ $min_price=$price["price"];}
            if ($price["old_price"]<$min_old_price){ $min_old_price=$price["old_price"];}
            }
            echo '<div class="price">';
            if ($min_old_price)
            {
            echo '<div class="old-price"><span></span>'.$min_old_price.'</div>';
            }
            echo '<div class="new-price">от '.$min_price.' '.$result["result"]["currency"].'</div>';
            echo '</div>';
            }
  • 05 августа 2015 г. , редакция: 05 августа 2015 г.
  • Кое что подсказали в ТП и смог вывести первую цену товара и старую первую цену:
    Код
    if ($result["row"]["price_arr"])
    {
    echo '<div class="shop-item-price">';
    echo '<span class="price">'.$result["row"]["price_arr"][0]["price"].' '.$result["result"]["currency"];

    echo '<span class="price-old"><span class="shop_price_value"> <s>'.$result["row"]["price_arr"][0]["old_price"].' '.$result["result"]["currency"].'</s></span></span>';

    echo '</span>';
    echo '</div>';
    }

    Все красиво и все хорошо.

    Но если отключить скидки, то скидка все равно лезет, но как "0 руб."

    Пробовал так:
    Код
    if ($result["row"]["price_arr"])
    {
    echo '<div class="shop-item-price">';
    echo '<span class="price">'.$result["row"]["price_arr"][0]["price"].' '.$result["result"]["currency"];
    if (!empty($price["old_price"]))
    {
    echo '<span class="shop_old_price price-old"><span class="shop_price_value strike"> <s>'.$result["row"]["price_arr"][0]["old_price"].' '.$result["result"]["currency"].'</s></span></span>';
    }
    echo '</span>';
    echo '</div>';
    }

    При этом вообще не показывается старая цена.

    Пробовал и вот так:
    Код
    if ($result["row"]["price_arr"])
    {
    echo '<div class="shop-item-price">';
    echo '<span class="price">'.$result["row"]["price_arr"][0]["price"].' '.$result["result"]["currency"];
    if (!empty($result["row"]["price_arr"]["old_price"]))
    {
    echo '<span class="price-old"><span class="shop_price_value"> <s>'.$result["row"]["price_arr"][0]["old_price"].' '.$result["result"]["currency"].'</s></span></span>';
    }
    echo '</span>';
    echo '</div>';
    }


    но тоже старая цена не показывается...

    Прошу подсказать как верно написать условие, чтобы если старая цена есть, показывало, а если ее нет, то блок со старой ценой исчезал???
    • 05 августа 2015 г.
    • может так:
      Код
      if (!empty($result["row"]["price_arr"]["old_price"]))
      {
      if(!empty($result["row"]["price_arr"][0]["old_price"])) {
      echo '<span class="price-old"><span class="shop_price_value"> <s>'.$result["row"]["price_arr"][0]["old_price"].' '.$result["result"]["currency"].'</s></span></span>';
      }
      }
      • 05 августа 2015 г.
      • Спасибо. Сделал вот так (должно соответствовать вашему коду):
        Код
        if ($result["row"]["price_arr"])
        {
        echo '<div class="shop-item-price">';
        echo '<span class="price">'.$result["row"]["price_arr"][0]["price"].' '.$result["result"]["currency"];

        if (!empty($result["row"]["price_arr"]["old_price"]))
        {
        if(!empty($result["row"]["price_arr"][0]["old_price"]))
        {
        echo '<span class="price-old"><span class="shop_price_value"> <s>'.$result["row"]["price_arr"][0]["old_price"].' '.$result["result"]["currency"].'</s></span></span>';
        }
        }
        echo '</span>';
        echo '</div>';
        }

        старая цена вообще не отображается. увы.
  • 05 августа 2015 г.
  • Заработал вот такой вариант:
    Код
    if ($result["row"]["price_arr"])
    {
    echo '<div class="shop-item-price">';
    echo '<span class="price">'.$result["row"]["price_arr"][0]["price"].' '.$result["result"]["currency"];
    if ($result["row"]["price_arr"][0]["old_price"] != "0")
    {
    echo '<span class="price-old"><span class="shop_price_value"> <s>'.$result["row"]["price_arr"][0]["old_price"].' '.$result["result"]["currency"].'</s></span></span>';
    }
    echo '</span>';
    echo '</div>';
    }


    Условие написала Анастасия, как раз появилась из отпуска.

Новости

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