Hook sBasket::sCountBasket (absolute Artikelanzahl)

Hi, ich versuche vergebens einen denkbar einfachsten Hook für die absolute Anzahl von Artikeln neben dem Warenkorb. Es funktioniert hervorragend die direkte Änderung von 'SELECT COUNT(*) FROM auf 'SELECT SUM(quantity) FROM in sCountBasket() in sBasket.php in shopware\engine\core\class. Allein der Hook will nun nicht gelingen, ohne den ganzen Shop nach erfolgter plugin Aktivierung zur globalen Fehlermeldung zu zwingen. private function registerEvents() { $this-\>subscribeEvent( 'sBasket::sCountBasket::replace', 'replaceCountBasket' ); } public function sCountBasket() { return $this-\>db-\>fetchOne( 'SELECT COUNT(\*) FROM s\_order\_basket WHERE modus = 0 AND sessionID = ?', array($this-\>session-\>get('sessionId')) ); } public function replaceCountBasket() { return $this-\>db-\>fetchOne( 'SELECT SUM(quantity) FROM s\_order\_basket WHERE modus = 0 AND sessionID = ?', array($this-\>session-\>get('sessionId')) ); } Für einen kurzen kritischen Blick wäre ich sehr dankbar! Vielen Dank! VG

[quote=„maxxyoo“]Allein der Hook will nun nicht gelingen, ohne den ganzen Shop nach erfolgter plugin Aktivierung zur globalen Fehlermeldung zu zwingen.[/quote] Die Fehlermeldung solltest du uns nicht verschweigen :slight_smile: Viele Grüße

$session und $db sind private Variablen der Klasse sBasket, darauf kannst Du in deinem Plugin-Context nicht ohne weiteres zugreifen oder hast Du diese vorher initialisiert? So könnte es funktionieren: public function replaceCountBasket() { $db = Shopware()-\>Db(); $session = Shopware()-\>Session(); return $db-\>fetchOne( 'SELECT SUM(quantity) FROM s\_order\_basket WHERE modus = 0 AND sessionID = ?', array($session-\>get('sessionId')) ); }

:slight_smile: und das tut es sogar!! … also zumindest liefert mit ein debug log das korrekte Ergebnis der DB Abfrage. Was ich mir nicht erklären kann ist nun nur noch, weshalb nicht auch der return value ganz normal aufgelöst wird und auf der Seite angezeigt. Vor dem Warenkorb ist nichts … z. B. auch wenn ich einen festen Return Value angebe. … Das würde bedeuten, dass die Hook replace Funktion korrekt aufgerufen wird, aber Ihr Rückgabewert dann nicht? public function install() { $this-\>registerEvents(); return array('success' =\> true, 'invalidateCache' =\> array('frontend','backend', 'proxy')); } public function uninstall() { return array('success' =\> true, 'invalidateCache' =\> array('frontend','backend', 'proxy')); } private function registerEvents() { $this-\>subscribeEvent( 'sBasket::sCountBasket::replace', 'replaceCountBasket' ); } public function sCountBasket() { return $this-\>db-\>fetchOne( 'SELECT COUNT(\*) FROM s\_order\_basket WHERE modus = 0 AND sessionID = ?', array($this-\>session-\>get('sessionId')) ); } public function replaceCountBasket() { $db = Shopware()-\>Db(); $session = Shopware()-\>Session(); $result = $db-\>fetchOne( 'SELECT SUM(quantity) FROM s\_order\_basket WHERE modus = 0 AND sessionID = ?', array($session-\>get('sessionId')) ); Shopware()-\>Debuglogger()-\>info($result); return $result; }

Probiers mal mit public function replaceCountBasket(Enlight\_Hook\_HookArgs $args) { $db = Shopware()-\>Db(); $session = Shopware()-\>Session(); $result = $db-\>fetchOne( 'SELECT SUM(quantity) FROM s\_order\_basket WHERE modus = 0 AND sessionID = ?', array($session-\>get('sessionId')) ); Shopware()-\>Debuglogger()-\>info($result); $args-\>setReturn($result); }

1 Like

Perfekter geht es nicht! Vielen herzlichen Dank!!

Hallo zusammen,

danke dafür. Kann mir jetzt noch jemand helfen wie ich den BasketCount als Variable in das Template bekomme.

Danke!

mfg

Ratzinger