Strona główna forum Wsparcie Konfiguracja Custom Options cena opcji zależna od ilości dodanej do kosza

Custom Options cena opcji zależna od ilości dodanej do kosza

Wszystko o konfiguracji, możliwościach i ustawieniach...


Posty: 28
Gadu-Gadu: 0

Jak w temacie potrzebuję zmodyfikować nieco funkcjonalność Custom Options (ostatniej zakładki w menu dodawania produktu).
A mianowicie potrzebuję żeby była możliwość wstawiania różnych cen za opcje dodatkowe.
W zależności od tego jaką ilość danego produktu klient wybierze (ilości są już zdefiniowane - mod. fixed quantity) cena za opcję dodatkową będzie dynamicznie dopasowana do danego nakładu.

Np:
przy nakładzie 10000szt - opcja dodatkowa kosztuje 1zł/szt, a przy nakładzie 500szt tego samego produktu, ta sama opcja dodatkowa kosztuje już 2zł/szt.

Custom Options cena opcji zależna od ilości dodanej do kosza

PostTeraz jest 22 lut 2025, o 10:40
Google

Posty: 427
Lokalizacja: Internet


Posty: 28
Gadu-Gadu: 0

OK, widzę że trzeba zacząć coś działać. Krok po kroku postaram się opisać to co robię, może komuś się przyda, a może i ktoś pomoże - na co liczę :)

1. W bazie danych w tabeli catalog_product_option dodaję dwie nowe kolumny - from_qty i to_qty korzystając z konsoli sql (najpierw zaznaczam tą tabelę):
ALTER TABLE  `catalog_product_option` ADD  `from_qty` INT( 10 ) DEFAULT  '0' AFTER  `sort_order` ;


i jeszcze druga kolumna:

ALTER TABLE  `catalog_product_option` ADD  `to_qty` INT( 10 ) DEFAULT  '0' AFTER  `from_qty` ;


OK tabele mamy gotowe, jeszcze z poziomu struktury tabeli catalog_product_option edytuję nowe kolumny ustawiając atrybut: unsigned, komentarz:from_qty i to_qty i odznaczam NULL.

Baza danych gotowa, teraz kod. Zaczynam od modyfikacji layout-u adminhtml:

Go to:
\www\magento\app\design\adminhtml\default\default\template\catalog\product\edit\options


Tutaj mam plik option.phtml

Teraz wstawiam poniżej linii 43:
'<th class="opt-order"><?php echo Mage::helper('catalog')->__('Sort Order') ?></th>'+


następujący kod:
'<th class="opt-qty"><?php echo Mage::helper('catalog')->__('From Qty') ?><span class="required">*</span></th>'+
'<th class="opt-qty"><?php echo Mage::helper('catalog')->__('To Qty') ?><span class="required">*</span></th>'+


Następnie w tym samym pliku poniżej kodu około linii 55:
'<td><input type="text" class="validate-zero-or-greater input-text" name="<?php echo $this->getFieldName() ?>[{{id}}][sort_order]" value="{{sort_order}}"></td>'+


wstawiam ten kod:
'<td><input type="text" class="required-entry input-text" id="<?php echo $this->getFieldId() ?>_{{id}}_from_qty" name="<?php echo $this->getFieldName() ?>[{{id}}][from_qty]" value="{{from_qty}}"></td>'+
'<td><input type="text" class="required-entry input-text" id="<?php echo $this->getFieldId() ?>_{{id}}_to_qty" name="<?php echo $this->getFieldName() ?>[{{id}}][to_qty]" value="{{to_qty}}"></td>'+


Co zostało zrobione: dwie kolumny przetrzymujące przedział ilościowy - od ilości i do ilości, oraz zmodyfikowana została karta produktu, a dokładnie zakładka Custom Options - w której teraz podczas dodawania nowej opcji mamy możliwość zdefiniowania przedziału cenowego co ładnie nam się zapisuje do bazy.

W tym momencie funkcjonalność modyfikacji pozwala na zapisanie do bazy wartości from_qty i to_qty, ale jeszcze ich nie wyświetla.

Aby to naprawić, Go to:
\www\magento\app\code\core\Mage\Adminhtml\Block\Catalog\Product\Edit\Tab\Options


Otwieram plik Option.php

Pod linią 238:
$value['sort_order'] = $option->getSortOrder();


Dodajemy kod:
$value['from_qty'] = $option->getFromQty();
$value['to_qty'] = $option->getToQty();


Teraz w panelu w zakładce Custom Options edycji produktu ładnie wyświetlają się widełki od ilości i do ilości.

No i teraz chwila namysłu co dalej?
Fundament jest, trzeba go zastosować do frontend-u
jeśli ktoś wie jak to zrobić to niech pisze, ja myślę co dalej z tym, jak coś będę miał to się podzielę.


Posty: 28
Gadu-Gadu: 0

Logicznie patrząc na tą całość to trzeba teraz sprawdzić:

czy (getFromQty<= getQty && getQty < getToQty)
jeśli tak to wyświetl opcję w karcie produktu w frontend, a jeśli nie to nie, tylko teraz zastanawiam się gdzie coś w tym stylu wstawić i jak ten kod powinien wyglądać poprawnie?


Powrót do Konfiguracja