Zitat von
Spooky
Du musst
PHP-Code:
// contao/config.php
$GLOBALS['ISO_HOOKS']['postCheckout'] = [YourClass::class, '__invoke'];
verwenden (statt __invoke geht auch jede andere Methode der Klasse).
Hallo Spooky, ich möchte hier andocken, bei gleichen Systemvorraussetzungen. Ich verstehe Annodationen so, dass ich kleine Scripte ausführen kann, ohne gleich ein Modul zu erstellen. Ich möchte beim Checkout den Lagerbestand reduzieren. Ich habe diese zwei Dateien angelegt:
PHP-Code:
// src/EventListener/UpdateStock.php
namespace App\EventListener;
use Psr\Log\LogLevel; // ... fuer Logging
use Contao\CoreBundle\Monolog\ContaoContext; // ... fuer Logging
use Isotope\Interfaces\IsotopeProduct;
use Isotope\Isotope;
use Isotope\Model\Config;
use Isotope\Model\Product;
use Isotope\Model\ProductCollection\Order;
use Isotope\Model\ProductCollectionItem;
use Isotope\Model\ProductType;
class UpdateStock
{
/**
* @Hook("postCheckout")
*/
public function UpdateStockCheckout(Order $order): void
{
// Do something …
$items = $order->getItems();
$orders = [];
foreach ($items as $item) {
$product = $item->getProduct();
$data = [
'stock' => $product->stock - $item->quantity,
];
if ($data['stock'] <= 0) {
$data['product_soldout'] = true;
}
\System::getContainer()
->get('monolog.logger.contao')
->log(LogLevel::INFO, 'Produkt-ID: '.$product->id', Lagerbestand neu: '.$data['stock'], array(
'contao' => new ContaoContext(__CLASS__.'::'.__FUNCTION__, TL_GENERAL
)));
// $this->databaseUtil->update('tl_iso_product', $data, 'tl_iso_product.id=?', [$product->id]);
}
}
}
PHP-Code:
// contao/config.php
$GLOBALS['ISO_HOOKS']['postCheckout'] = [UpdateStock::class, 'UpdateStockCheckout'];
Zusätzlich habe ich den Application Cache gelöscht, die anderen muss ich wahrscheinlich nicht. Es sollte nun ein Log-Eintrag erfolgen (zum Testen), was aber nicht passiert. Es gibt aber auch keine Fehlermeldung, daher gehe ich davon aus, dass ich das ganze falsch eingebunden habe. Kannst Du mir helfen?
Danke und liebe Grüße!