Antwort #7 am: 01. Mai 2014, 14:06:55
Das ist, vor allem bei vielen Produkten, ein performance-lastiger Ansatz und kein guter Programmierstil.
Bei jedem Seitenaufruf /-wechsel wird diese DB-Abfrage durchgeführt wenn sie in der
application_top.php steht.
Würde man eine solche Query jedoch bei jeder Bestellung produkt-bezogen durchführen, wäre es zwar mehr Code aber nicht performance-lastig, weil eben nur bei einer Bestellung und nur bei den bestellten Produkten durchgeführt.
Ich würde es in der
/checkout_process.php an dieser Stelle machen:
xtc_db_query("UPDATE ".TABLE_PRODUCTS."
SET products_quantity = '".$stock_left."'
WHERE products_id = '".xtc_get_prid($order->products[$i]['id'])."'");
if (($stock_left < 1) && (STOCK_CHECKOUT_UPDATE_PRODUCTS_STATUS == 'true')) {
xtc_db_query("UPDATE ".TABLE_PRODUCTS."
SET products_status = '0'
WHERE products_id = '".xtc_get_prid($order->products[$i]['id'])."'");
}
Aber Achtung, nicht im letzten Code-Teil wo der
products_status gesetzt wird einfach die
products_shippingtime ebenfalls ändern, schau dir den Code genau an.
STOCK_CHECKOUT_UPDATE_PRODUCTS_STATUS wird im Backend bei
Konfiguartion => Lagerverwaltungs Optionen gesetzt.
Der Code sollte also so aussehen:
xtc_db_query("UPDATE ".TABLE_PRODUCTS."
SET products_quantity = '".$stock_left."'
WHERE products_id = '".xtc_get_prid($order->products[$i]['id'])."'");
if($stock_left < 1) {
if(STOCK_CHECKOUT_UPDATE_PRODUCTS_STATUS == 'true') {
xtc_db_query("UPDATE ".TABLE_PRODUCTS."
SET products_status = '0',
products_shippingtime = 'WHAT_EVER'
WHERE products_id = '".xtc_get_prid($order->products[$i]['id'])."'");
} else {
xtc_db_query("UPDATE ".TABLE_PRODUCTS."
SET products_shippingtime = 'WHAT_EVER'
WHERE products_id = '".xtc_get_prid($order->products[$i]['id'])."'");
}
}
Im ersten Teil kann man das Setzen der
products_shippingtime evtl. weglassen da der Artikel deaktiviert wird wenn kein Bestand vorhanden ist.
WHAT_EVER würde ich sogar als Sprachkonstante festlegen damit es nie versehentlich im Backend umbenannt wird, es also somit kein frei editierbarer echter Lieferstatus ist.
Gruß,
noRiddle