Testowałem dzisiaj sklep (na wersji 1.5.6) i zauważyłem, że w bazie danych w tabeli z zamówieniami (oc_order) mam prawie 30 zamówień a w panelu administratora nie widać ich. Poza tym w dwóch powiązanych tabelach też są wpisy - oc_order_product i oc_order_total.
Testowanie polegało na wypełnianiu zamówienia aż do ostatniego, 6-tego kroku, bez zakańczania zamówienia, czyli naciskania na przycisk 'Potwierdź zamówienie'. Zamykałem stronę i robiłem nowe zamówienie, bo nie chciałem, żeby jakieś zamówienia były zapisywane. Tak samo klient może się rozmyślić na ostatnim kroku i wyjść ze sklepu.
Myślę, że to jest poważny błąd, ponieważ w bazie danych może pojawić się sporo niepotrzebnych wpisów, poza tym numer zamówienia się zwiększa.
Z tego co do tej pory ustaliłem, po naciśnięciu przycisku 'Kontynuuj' w kroku 5 (Metoda płatności) Opencart tworzy nowe zamówienie - robi wpis do bazy danych. Moim zdaniem powinno to się odbywać po naciśnięciu na 'Potwierdź zamówienie' w kroku 6.
Zaczęłem szukać w kodu odpowiedzialnego za tą sytuację i znalazłem:
W pliku: /catalog/view/theme/default/template/checkout/payment-method.tpl około 41 linii jest kod:
- Kod: Zaznacz cały
<?php if ($text_agree) { ?>
<div class="buttons">
<div class="right"><?php echo $text_agree; ?>
<?php if ($agree) { ?>
<input type="checkbox" name="agree" value="1" checked="checked" />
<?php } else { ?>
<input type="checkbox" name="agree" value="1" />
<?php } ?>
<input type="button" value="<?php echo $button_continue; ?>" id="button-payment-method" class="button" />
</div>
</div>
<?php } else { ?>
<div class="buttons">
<div class="right">
<input type="button" value="<?php echo $button_continue; ?>" id="button-payment-method" class="button" />
</div>
</div>
<?php } ?>
i jest powiązany z plikiem: /catalog/view/theme/default/template/checkout/checkout.tpl około 886 linii (javascript):
- Kod: Zaznacz cały
$('#button-payment-method').live('click', function() {
$.ajax({
url: 'index.php?route=checkout/payment_method/validate',
type: 'post',
data: $('#payment-method input[type=\'radio\']:checked, #payment-method input[type=\'checkbox\']:checked, #payment-method textarea'),
...
}
...
}
Nie znam Ajaxa, ale z tego co wyczytałem ta funkcja wskazuje na plik: /catalog/controler/checkout/payment_method.php (adres url)
W linii 157 tego pliku jest funkcja:
- Kod: Zaznacz cały
public function validate() {....}
która prawdopodobnie dodaje wpis do bazy danych. Sprawdzałem dalej i zapytania SQL do bazy danych związane z zamówieniami są w pliku /catalog/model/chceckout/order.php
Teraz pytanie jak sprawić, żeby przycisk 'Potwierdź zamówienie' z kroku 6 przejął działanie 'Kontynuuj' z kroku 5 ?