Перейти к содержанию
devel

[Поиск решения] Модуль "Больше-Меньше" для количества товаров в заказе

Рекомендуемые сообщения

Есть что-то подобное?

oc7.jpg

post-7857-0-27212300-1384195844_thumb.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Нашел в jquery такой виджет: spinner . Синтаксис такой:

$('input[type=number]').each(function() {		var $input = $(this);		$input.spinner({			min: $input.attr('min'),			max: $input.attr('max'),			step: $input.attr('step')		});	});};

в шаблоне должен быть <input type-"number" value="">

Пробовал это использовать в дефолтном шаблоне - никаких изменений. Отсюда вопрос: входит ли этот виджет в состав jquery opencart или его нужно отдельно скачивать? Вопрос нубский, конечно. Но он имеет место быть )

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

при редактировании заказа столько всего "происходит(обрабатывается/отправляется)", что проще добавить такой же товар с нужным кол-вом или удалить, чем пытаться сделать "увеличение/уменьшение для кол-ва".

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Возможно вы правы. Мне на форуме где-то попадался модуль, который меняет количество товара в корзине. Я полагал, что в бэкенде можно сделать это с той же легкостью, что и во фронтенде. Поэтому рискнул выдвинуть такую идею. Начал "копать", обнаружил несколько решений работы с формами. Во-первых, на javascript. Учитывая, что это админка js можно смело использовать. Во-вторых - jquery. По сути одно и то же, но проще. Поскольку я не знаю ни того, ни другого - вариант выбрал "проще", т.е jquery spinner. 

Jquery Spinner в opencart не входит, пришлось его подключить самостоятельно. Далее был найден модуль, написаный форумчанином, который позволяет менять кол-во товара через обычный input. Задача становится проще - обединить модуль и spinner.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Процесс продвигается )







<script>
    $(function() {
    var inpf = 'input[name=\'order_product[<?php echo $product_row; ?>][quantity]\']';
        $(inpf).spinner({
        spin: function (event, ui)
        {alert (ui.value);},
            min: 1,
            max: 99,
            step: 1            
        });        
   });
</script>

Мои долгие поиски привели к промежуточному результату. Счетчики (спинеры) уменьшают/увеличивают значение. Не меняется Total. Это и понятно, т.к. ui.value дальше функции не передан. Как передать? return (ui.value)? Как к нему из шаблона обращаться?

post-7857-0-61297900-1384439028_thumb.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Делюсь дальнейшими результатами. 

Наблюдение 1) 

Если спинеры "накрутить" и нажать кнопку "Сохранить", то значения input-ов прекрасно пишутся в БД. Это видно по таблице order_product. Нажатие на эту кнопку отправляет значения всех инпутов, включая hidden.

Наблюдение 2)

Если принудительно в шаблоне написать вместо:

<input type="hidden" name="order_product[<?php echo $product_row; ?>][total]" value="<?php echo $order_product['total']; ?>" />

что-то типа:

<input type="hidden" name="order_product[<?php echo $product_row; ?>][total]" value="111" />

то произойдет любопытная штука. Открываем существующий заказ: из БД подгружаются totals, которые сформировались при оформлении заказа кастомером. Т.е. все как обычно. Если теперь нажать кнопку "Сохранить", то в БД total всех товаров этого заказа станет равен 123. Это можно использовать. 

В предыдущем посте я смог получить значение спина, т.е. цифру кол-ва конкретного товара. Это множитель. Множимое - это Цена. Перемножив эти переменные получим актуальный тотал для каждого товара. Присвоим его инпуту и все. Нажав на конпку "Сохранить" в БД запишутся новые значения тотал.

Осталось дело за малым : правильно код написать =)

С этим беда. Есть нюансы. Программистам - пару раз плюнуть, но я не осилил пока. Нужна подсказака, заполнить недостающие строки кода:

<script>
    $(function() {
    var inpf = 'input[name=\'order_product[<?php echo $product_row; ?>][quantity]\']';
    var inpp = 'input[name=\'order_product[<?php echo $product_row; ?>][pricel]\']';
    var inpt = 'input[name=\'order_product[<?php echo $product_row; ?>][total]\']';
        $(inpf).spinner({
        spin: function (event, ui)
        {
//alert (ui.value);
// Здесь мы узнаем значение спина.

var total = $(inpp).attr('value') * $(inpf).attr(ui.value); //Примерно так я представляю подсчет тотал
// вот этот var total и нужно присвоить инпуту
 },
            min: 1,
            max: 99,
            step: 1            

             }); 
                   
   });
</script>

должно получиться что-то типа:

<input type="hidden" name="order_product[<?php echo $product_row; ?>][total]" value="<?php echo $наш_тотал ?>" />

Ай нид хелп! =)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

завязывай с изобретением самоката.

я писал тебе в другой теме, где происходит обработка

catalog/controller/checkout/manual.php
открой файл и посмотри, что есть что.

своим самокатом ты игноришь весь функционал ценообразования (и не только) в движке.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

afwollis, очередной раз спасибо за совет!

Про catalog/controller/checkout/manual.php я помню. Даже немного вник, что там к чему. Но пока я разбирался с javascript jquery php, выяснил (это на самом деле очевидно, но я не задумывался), что js и jquery работают на стороне клиента, а php на стороне сервера. Поэтому правильно, (не игноря весь функционал ценообразования), отправить данные из формы аякс запросом в контроллер (catalog/controller/checkout/manual.php), а он сам уже тотал посчитает, и через модель запишет его в БД. И по идее, реквестом можно вывести этот тотал сразу в шаблон. И было бы круто, если бы я понимал, как это кодом оформить. Но пока трудно. Посоветовать можете?

Кроме того пимпу "Сохранить" все равно надо жать, чтобы сохранить данные формы. Получается, что мы данные аяксом отправили, записали в БД, нажали кнопку и снова их же (данные) записали. Или я чето упустил?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Похоже, это никому не нужно... Сносите тему, вопрос снят. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.