minishop2 корзина как сделать input в графе "вес" как и у "количество"?
Здравствуйте!
Подскажите, пожалуйста, как сделать input в столбце Вес, в точности как и у Количество.
Добавить то я добавил, но почему-то при сохранении заказа в админке вес также указывается 0.
Что нужно сделать? Заранее благодарю за помощь
Подскажите, пожалуйста, как сделать input в столбце Вес, в точности как и у Количество.
Добавить то я добавил, но почему-то при сохранении заказа в админке вес также указывается 0.
Что нужно сделать? Заранее благодарю за помощь
Комментарии: 30
Первое что приходит в голову это скопировать поле и поменять ms2_frontend_count_unit на ms2_frontend_weight_unit. А вам для чего это нужно?
не работает. долго объяснять, но попытаюсь попроще: мне нужно сделать сайт для менеджера по закупам. Он заходит на сайт, добавляет товары из каталога в корзину и формирует заявку. Не всегда получается найти товар по цене с каталога, чаще дороже, поэтому после закупа он должен внести корректировки в заявку — дописать фактическую цену. Например перчатки в каталоге по цене 30р и ему надо купить 10 пар, но он купил 10 по цене 40р.
Почему именно вес решил, потому что он автоматом умножает на количество и мне останется лишь переименовать столбец в админке и вывод в корзине.
Почему именно вес решил, потому что он автоматом умножает на количество и мне останется лишь переименовать столбец в админке и вывод в корзине.
Это так не работает, от того что вы измените вес на фронте, заказ корректно не пересчитается. Когда вы меняете количество отправляется ajax запрос на сервер в котором передается только количество, при этом даже если вы скопируете поле и дадите ему другое имя на сервере обработается только переданное количество, поэтому менять вес нет никакого смысла. Из вашего же объяснения следует, что менять надо цену, для этого нужен плагин на событие msOnChangeInCart, который будет из массива $_POST брать новую цену и менять старую. Вот тут docs.modx.pro/komponentyi/minishop2/razrabotka/sluzhbyi/korzina#%D0%A1%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%BD%D1%8B%D0%B5-%D1%81%D0%BE%D0%B1%D1%8B%D1%82%D0%B8%D1%8F написано какие переменные доступны в плагине. Чтобы посмотреть как выглядит корзина используйте вот такую конструкцию $tmp = $cart->get(); Распечатайте в консоль и посмотрите. Скорее всего должно получится как-то так:
switch ($modx->event->name) {
case 'msOnChangeInCart':
$tmp = $cart->get();
$tmp[$key]['price'] = $_POST['price'];
$cart->set($tmp);
break;
}
в том то и дело, что мне не нужно менять цену. Давайте объясню: у нас есть список товаров (наименование и цена). Менеджер создает заявку на закуп и получает деньги на закуп, но иногда он может купить товар дороже, а иногда дешевле. Вот чтобы видеть разницу нужна графа Цена фактическая, а не менять цену товара, так как из-за этого нельзя будет отследить разницу.
Плагин который я предложил меняет цену ТОЛЬКО в корзине, т.е. в самом ресурсе цена не меняется, другая цена будет в этом конкретном заказе. Соответственно можно будет сравнить цену в заказе и цену у ресурса.
ааа, вот оно как. Круто, спасибо большое! Теперь надо попробовать кастомизировать админку minishop2, чтобы там отображались только нужные поля и заодно считалась разница. Спасибо еще раз, буду пробовать
не сработало к сожалению, отправляется также цена та, что есть.
Странно. На фронте поле для ввода цены добавил? name какой? В плагине $_post смотрел? Вообще дебаг какой-то проводил или просто код скопировал и он не сработал?
Да добавил, name сделал price2. В коде соответственно сделал так
$tmp[$key]['price'] = $_POST['price2'];
Смотрел только результат POST запроса в Network
В плагине напиши $modx->log(1, print_r($_POST,1) только журнал ошибок почисть сначала, потом посмотр что приходит. Так же $tmp распечатай, посмотри что там. Ну да, ты же в настройках плагина галочку поставил напротив события msOnChangeInCart?
Событие поставил.
Пардон, а в каком месте плагина именно вставить, просто я в PHP нулина
Пардон, а в каком месте плагина именно вставить, просто я в PHP нулина
switch ($modx->event->name) {
case 'msOnChangeInCart':
$modx->log(1, print_r($_POST,1));
$tmp = $cart->get();
$modx->log(1, print_r($tmp,1));
$tmp[$key]['price'] = $_POST['price'];
$cart->set($tmp);
break;
}
а закрывающую скобку сразу или после всех операций в конце после фигурной?
С телефона неудобно писать код, так что за опечатки сорри
ладно друг, спасибо большое за уделенное время, но видимо я все таки не справлюсь с этой задачей. Сделал все, в логе только «Невозможно запустить функцию mail», пробовал выводить и на фронте. Заказ в админке появляется но со старыми ценами. Плагина код:
<?php
switch ($modx->event->name) {
case 'msOnChangeInCart':
$modx->log(1, print_r($_POST,1,'HTML'));
$tmp = $cart->get();
$modx->log(1, print_r($tmp,1,'HTML'));
$tmp[$key]['price'] = $_POST['price2'];
$cart->set($tmp);
break;
}
Форма на сайте<form method="post" class="ms2_form" role="form">
<input type="hidden" name="key" value="{$product.key}"/>
<div class="form-group">
<div class="input-group input-group-sm">
<input type="number" name="price2" value="" class="form-control"/>
<div class="input-group-append">
<span class="input-group-text">{'ms2_frontend_currency' | lexicon}</span>
</div>
</div>
<button class="btn btn-sm" type="submit" name="ms2_action" value="cart/change">↻</button>
</div>
</form>
Я только что всё проверил всё работает. Ты плагин создавал в админке на вкладке элементы? Вот тут галочку поставил yadi.sk/i/xsqoAy8g1mG2LA?
да, на вкладке элементы, галочку давно поставил
извини за назойливость. я все таки смог изменить значение weight и теперь переименовал эту графу. теперь мне нужно вывести разницу total_price и total.weight, но когда я пишу в чанке так:
{$total.cart_cost - $total.cart_weight}
то у меня выводится либо 0 либо 1. Подскажи как сделать такую простую вещь? {$total.cart_cost - $total.cart_weight}
это ваши переменные?
да, верно. при этом выводится 0, если $total.cart_cost меньше $total.cart_weight, и выводится 1 если наоборот
Откуда в массиве $total взялись cart_cost и cart_weight?
это же общий вес и общая стоимость товаров в корзине. Если выводить просто по отдельности, то нормальные числа, но как только делаю математические операции, то они оба будто определяются как 1.
вроде понял. обе переменные пусть и принимают числовые значения, но являются строками. нужно просто конвертировать строки в числа перед вычислением
$total.count вот общее количество, а вот $total.weight общий вес. Откуда $total.cart_cost и $total.cart_weight?
эти переменные были в шаблоне tpl.msGetOrder — не я их создавал. Да и в любом случае, даже используя просто $total.weight и $total.cost я получаю тоже самое. Не знаю как преобразовать строку в число
{($total.cost | replace: ' ' : '') - $total.weight}
не работает, выводит странное число
{($total.cost | replace: ' ' : '') - ($total.weight | number: '0' : '.' : '')}
спасибо большое, решилось само по себе после очистки кэша…
Прекрасно
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.