Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

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


Recommended Posts

Нашел в 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 користувачів

    • Ні користувачів, які переглядиють цю сторінку

×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.