Ein seltsames Phänomen tauchte heute in einem von mir betreuten Magento-Shop auf. In der Kategoriezuordnung eines Artikels war der Kategoriebaum unvollständig. Der Fehler war dank StackOverflow schnell gefunden. „Magento Kategorien im Adminpanel unvollständig“ weiterlesen
Magento-like Template-Hints in Laravels Blade Engine
Wer Magento kennt, kennt sicherlich auch die zuschaltbaren Templat-Hints – ein sehr nützliches Tool für Entwickler. Um dieses Tool auch in Laravel umzusetzen braucht es nur eine neue Datei und eine Änderung am AppServiceProvider.
„Magento-like Template-Hints in Laravels Blade Engine“ weiterlesen
Magento Model debuggen
Häufig kommt es vor, dass man die Daten eines Magento-Models ansehen muss. Dies kann man recht einfach mit dem Systemlogger machen, z.B. so:
1 |
Mage::log($_product); |
Allerdings führt das durch Rekursion innerhalb des Objekts (hier Mage_Catalog_Model_Product ) zu hohem Speicherverbrauch „Magento Model debuggen“ weiterlesen
Magento Cache leeren
Der Magento-Cache wird normalerweise über das Adminpanel geleert. Ist dieses – zB wegen einer Exception durch eine Plugin-Installation – nicht erreichbar und hilft das Leeren des var/cache/ Verzeichnisses nicht, so kann der Cache auch durch Ausführung eines Skriptes geleert werden:
1 2 3 4 |
require_once('pfad/zur/app/Mage.php'); Mage::app('admin')->setUseSessionInUrl(false); Mage::app()->cleanCache(); |
Layout Update via Observer
Um, zB das Template der Produktdetailseite abhängig von einem Attribut anzupassen, kann man über einen Observer ein Layout-Update einspeisen, bevor die Seite gerendert wird. Natürlich ist das auch am Produkt selbst im Tab Design möglich, diese Methode hier ist jedoch für zB Redakteure einfacher zu bedienen. So wäre es möglich, ein Attribut „view_template“ mit verschiedenen Werten zu belegen und dementsprechend auszulesen. Der Einfachheit halber verwende ich in diesem Beispiel die SKU des Artikels.
Artikel und Summen im Warenkorb
Folgende Funktionen liefern die Anzahl der Artikel zurück, die sich zur Zeit im Warenkorb befinden:
1 |
Mage::helper('checkout/cart')->getSummaryCount(); |
Die Gesamtsumme erhält man so
1 2 |
Mage::getSingleton('checkout/session')->getQuote()->getSubtotal(); Mage::getSingleton('checkout/session')->getQuote()->getGrandTotal(); |
Cross-Selling, Up-Selling, Zubehör (Related Products)
Cross-Selling
Diese Produkte werden in der Warenkorbübersicht angezeigt.
Jedoch nur wenn ein Artikel im Warenkorb liegt, dem auch Produkte via cross-selling zugeordnet sind.
Ausgehend von Ihrer Auswahl könnten Sie auch an den folgenden Produkten interessiert sein: ….. „Cross-Selling, Up-Selling, Zubehör (Related Products)“ weiterlesen
Produktgrid im Adminhtml um zusätzliche Spalten erweitern
Kopiere die Datei
/app/code/core/Mage/Adminhtml/Block/Catalog/Product/Grid.php
nach
/app/code/local/Mage/Adminhtml/Block/Catalog/Product/Grid.php
Füge z.B. folgendes unter den anderen $this->addColumn ein. „Produktgrid im Adminhtml um zusätzliche Spalten erweitern“ weiterlesen
Hierarchien in Magentos CMS-Seiten simulieren
Ohne eine Zeile Code, kann man in Magento Hierarchien von CMS-Inhalten anlegen und sogar auf eine automatisch erzeugte Navigation zugreifen. „Hierarchien in Magentos CMS-Seiten simulieren“ weiterlesen
Pushing und Stacking ohne Laravels Blade
Um das hier beschriebene Pushing und Stacking ohne die Blade Syntax umsetzen zu können, nutze ich in Magento folgenden Helper:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
<?php class Myvendor_Core_Helper_Data extends Mage_Core_Helper_Abstract { /** * push string to session to send it to the browser at a later moment * @see laravel blade template 'stacking' * @see self::endStack() * @see self::getStack() * @see self::unStack() * * */ public function startStack() { ob_start(); } public function endStack($key) { $buffer = ob_get_contents(); ob_end_clean(); $session = Mage::getSingleton("core/session"); $key = 'stack-' . $key; if (!$session->getData($key)) { $data = [$buffer]; } else { $data = $session->getData($key); $data[] = $buffer; } $session->setData($key, $data); } public function hasStack($key) { return Mage::getSingleton("core/session")->getData('stack-' . $key) ? true : false; } public function unStack($key) { $session = Mage::getSingleton("core/session"); $key = 'stack-' . $key; $output = $session->getData($key); $session->unsetData($key); echo implode("", $output); return; } /** * end of stacking functions here * * */ } |
Im Template angewendet sieht das dann so aus. Dies kann beliebig oft wiederholt werden, die Einträge werden alle in der Session zwischengespeichert, um diese dann in der korrekten Reihenfolge am Ende des Dokuments wieder auszuliefern. Zu diesem Zeitpunkt sollten dann alle nötigen Bibliotheken bereits geladen sein.
1 2 3 |
<?php $this->helper('myvendor_core')->startStack(); ?> jshelpers.responsiveTabs("#product-tabs"); <?php $this->helper('myvendor_core')->endStack('footerjs'); ?> |
In der zweiten Zeile steht JavaScript ohne <script> Tags? Diese werden erst beim Stacking im footer außenherum gewrappt:
1 2 3 4 5 6 7 8 |
<?php /* js that has beed stacked during layout rendering will be output here */ ?> <?php if ($this->helper('myvendor_core')->hasStack('footerjs')): ?> <script type="text/javascript"> jQuery(function() { <?php $this->helper('myvendor_core')->unStack('footerjs') ?> }); </script> <?php endif ?> |