Писать на форуме DIAFAN.CMS могут только зарегистрированные пользователи. Войдите или зарегистрируйтесь.
Вывести цену одного значения характеристики
-
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>';
Работает с виду хорошо, но это как-то "по-шамански".. нельзя ли "по-человечески"? -
-
-
-
- Андрей (R4W)
- 140
-
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 -
-
-
-
- Андрей (R4W)
- 140
-
24 ноября 2013 г.
-
Ну я тоже не программер, но немного научился. $result["row"]["price_arr"]["param"] - вот с этим массивом надо работать, вроде как.
Посмотрите через print_r ($result["row"]["price_arr"]["param"]) что там лежит, а потом найдите подходящую функцию для сортировки. -
-
-
-
24 ноября 2013 г.
-
Спасибо! Это Вы по поводу того, что движок глючит и каждый раз сохраняет значения характеристики поменяв направление сортировки?
Надо создать в пожеланиях указание на ошибку, да вот, все не найду время четко сформулировать проблему. -
-
-
-
- Андрей (R4W)
- 140
-
25 ноября 2013 г.
-
Не, в этом массиве все цены сидят. Можно из него доставать только ту, которая вам нужна.
Если дадите фтп, могу попробовать помочь, если время будет :) -
-
-
-
-
23 ноября 2013 г.
-
И зачем мне "массивы", если на паблике из всех 3 или 10 цен надо вывести только одну?
-
-
-
-
-
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; }
Но теперь перестало работать, зараза! В некторых местах получаются накладки.
Может кто-то предложить способ показа только одной цены вместо списка цен??? Кнопки "КУпить" нет, не нужна. -
-
-
-
- Dmitry (weissfl)
- 161
-
31 июля 2015 г.
-
А вот это: https://user.diafan.ru/forum/show650/ Как вариант вам не подойдет?
-
-
-
-
31 июля 2015 г.
-
Не нашел там ничего интересного, разве что добрые пожелания мне в отпуске.
-
-
-
-
- Dmitry (weissfl)
- 161
-
05 августа 2015 г.
-
Хм, видимо перепутал ссылку, я имел в виду вот это https://user.diafan.ru/forum/show1906/
-
-
-
-
05 августа 2015 г.
-
спасибо. Почти о том же.
Но тут мы пошли другим путем, вывели первую цену товара (у нас все цены одинаковые, отличается только размеры).
У нас проблема, никак не можем нормально вывести "старую цену". -
-
-
-
- Dmitry (weissfl)
- 161
-
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>';
} -
-
Поблагодарили: Валерий Викторович (Sherrlok)
-
-
-
-
-
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>';}
Условие написала Анастасия, как раз появилась из отпуска. -
-
-
Новости
-
18 июня
-
В сборке большое обновление demo-шаблона, дополнительная защита от спама, улучшение YML-импорта и еще много важного и интересного.
-
24 апреля
-
В новой сборке совершили революцию в структурировании кастомизированной информации в шаблонах, добавили авторегистрацию пользователей, усовершенствовали защиту от спама, актуализировали накопительную скидку, а также улучшили производительность и стабильность работы системы.
-
12 января
-
После выхода сборки 7.1 мы выпустили уже три патча, в каждом из которых улучшаем административную часть сайта. Сборка DIAFAN.CMS 7.1.3 уже доступна к установке.
Блоги
-
24.04.2024
-
Выпустили новую сборку DIAFAN.CMS 7.1.4.
Блоги
-
12.01.2024
-
В данном руководстве познакомим вас с панелью управления DIAFAN.CMS