Wie erfolgt bei magento die Anzeige von TOP 10 Produkten? Diese Frage höre ich immer wieder. Nun möchte ich ein weiteres Tutorial speziell für dieses Thema schreiben. Die Anzeigeauswahl kann über zwei Kriterien erfolgen:
1. Nach verkauften Produkten oder
2. nach Seitenaufrufe der Produkte.
Die Anzeigenausgabe im magento Shop selbst erfolgt in einer schmalen Box. Diese Box kann in der rechten oder linken Spalte positioniert werden. Alternativ steht noch die Listenauswahl über z.B. eine CMS-Seite (Homepage) zur Auswahl. Die Listenausgabe wird in einem der noch folgenden Tutorials beschrieben.
Die Top 10 Boxausgabe
1. Toptenbox.php für die Abfrage erstellen
2. toptenbox.phtml Box-Template für die Anzeige erstellen
3. Die Box in die catalog.xml einfügen
1. Die Abfragedatei Toptenbox.php
Die Toptenbox.php ist für die Abfrage zuständig und kann je nach Modifikation die Top 10 der am meisten gesehenen Produkte oder der am meisten verkauften Produkte selektieren.
Hierfür müssen nur zwei Variablen angepasst werden.
Die Datei steht auch am Ende diese Tutorials zum Download bereit.
<?php
class Mage_Catalog_Block_Product_Toptenbox extends Mage_Catalog_Block_Product_Abstract
{
public function __construct()
{
parent::__construct();
$storeId = Mage::app()->getStore()->getId();
$products = Mage::getResourceModel('reports/product_collection')
->addViewsCount()
//->addOrderedQty()
->addAttributeToSelect('*')
->setStoreId($storeId)
->addStoreFilter($storeId)
->setOrder('views', 'desc');
//->setOrder('ordered_qty', 'desc');
Mage::getSingleton('catalog/product_status')->addVisibleFilterToCollection($products);
Mage::getSingleton('catalog/product_visibility')->addVisibleInCatalogFilterToCollection($products);
$this->setProductCollection($products);
}
}
Einfach den Code kopieren und unter den Namen Toptenbox.php in folgendes Verzeichnis speichern:
app/code/local/Mage/Catalog/Block/Product/Toptenbox.php
Fehlen im local Ordner noch die Verzeichnisse, diese dann einfach anlegen.
Voreingestellt ist die Ausgabe nach den meisten Produktansichten (views). Möchten Sie die Ausgabe in am meisten verkauften Produkte ändern bitte diese beiden Änderungen in der toptenbox.php durchführen.
a. Vor ->addViewsCount() zwei // einfügen (also auskommentieren und darunter bei ->addOrderedQty() die beiden // entfernen.
b. Vor ->setOrder(‘views’, ‘desc’); zwei // einfügen und darunter bei ->setOrder(‘ordered_qty’, ‘desc’); die beiden // entfernen.
2. Boxausgabe erstellen
Die Top 10 Box kann wahlweise in der rechten oder linken Spalte Ihres magento Shop integriert werden.
Die Ausgabe wird später in der catalog.xml eingestellt.
<?php if ($_products = $this->getProductCollection()): ?>
<?php
$maxcounter=10;
$counter=1;
?>
<div>
<div><h4><span><?php echo $this->__('Top 10') ?></span></h4></div>
<ol id="recently-viewed-items">
<?php foreach ($_products->getItems() as $_product): ?>
<?php if ($counter <= $maxcounter): ?>
<?php $productUrl = $_product->getProductUrl() ?>
<li><img src="<?php echo $this->helper('catalog/image')->init($_product, 'image')->resize(35); ?>" alt="" style="float: left; margin-right: 8px; border: 1px solid #CCCCCC;" /><?php echo $counter; ?>. <a href="<?php echo $productUrl ?>"><?php echo $_product->name ?></a>
<?php // echo "<br />".(int)$_product->views; // Anzeige der Aufrufe / Display views qty. ?>
<?php // echo "<br />".(int)$_product->ordered_qty; // Anzeige Anzahl der Bestellungen / Display order qty. ?>
</li>
<?php $counter++; ?>
<?php endif; ?>
<?php endforeach; ?>
</ol>
<script type="text/javascript">decorateList('recently-viewed-items')</script>
</div>
<?php endif; ?>
Den Code kopieren und unter den Namen toptenbox.phtml in folgendes Verzeichnis speichern:
app/design/frontend/default/IhrTheme/templates/catalog/product/toptenbox.phtml
Auch diese Datei steht am Ende dieses Tutorials zum Download bereit.
Diese Seite können selbstverständlich nach Ihrem Design gestalten bzw. anpassen.
Die Variable $maxcounter=10 begrenzt die Ausgabe auf 10 Produkte (TOP 10). Diese Variable kann auch beliebig geändert werden.
Die Variable $counter=1 bitte nicht ändern.
Wenn die Selektierung nach views erfolgt können Sie auch die Anzahl der Seitenaufrufe anzeigen lassen. Entfernen Sie einfach die ersten beiden // in Zeile 13.
Alternativ, wenn die Ausgabe nach ordered_qty erfolgt können Sie die Anzahl der Verkäufe anzeigen. Hier müssen dann die beiden // vor Zeile 14 gelöscht werden.
3. Die catalog.xml
Nun muss nur noch die Ausgabe in der catalog.xml eingefügt werden.
Öffnen Sie die catalog.xml aus dem Verzeichnis
app/design/frontend/default/IhrTheme/layout.
Im Abschnitt <default> unterhalb von <reference name=”right”> (ab ca. Zeile 58) diesen Code einfügen
<block type="catalog/product_toptenbox" name="toptenbox" template="catalog/product/toptenbox.phtml" />
Alternativ können Sie auch je nach verwendetem Layout den Code unterhalb von <reference name=”left”> einfügen.
Dann erfolgt die Ausgabe in der linken Spalte statt in der rechten Spalte.
Nun die catalog.xml speichern und im Admin die caches leeren.
Ihre TOP 10 Produkte sollten nun in einem schmalen Block links bzw. rechts angezeigt werden.
Viel Spass bei umsetzen!
Stefan Pröhl – robin2160
mageintern.de
Demo im mageintern Demoshop
Top 10 Datein download für default theme (zip)
Kann ich die Top 10 Box nach Views auch nur für einen gewissen Zeitraum einschränken? Also z.B.: nur die 10 meistgesehenen der letzten Woche oder sowas?
Würde vorraussetzen das Magento einen Timestamp zu jedem View speichern würde; gibt es das?
[Antwort]
Hallo,
ich habe nun versucht das Tut auf die Vers. 1.4.1 anzuwenden.
Die Toptenbox.php liegt im \app\code\local\Mage\Catalog\Block\Product und die toptenbox.phtml im \app\design\frontend\default\f002\template\catalog\product.
Nun bekomme ich eine Leerseite wieder aber die .phtml wird aufgerufen. Es scheint also der Link zur Toptenbox.php nicht zu stimmen.
Habe ich hier einen Denkfehler bzw etwas massiv falsch verstanden?
Beste Grüße
magento_newbie
[Antwort]
Tolles Tutorial – aber leider bekomme ich die Top10 Produkte nicht in die Main/Content-Spalte. Was muss ich dazu ändern?
Besten Danke,
B
[Antwort]
Hallo Stefan
Dies ist wirklich ein gutes feature.
Leider habe ich ein bischen Probleme, die Gestaltung hinzukriegen. Gäbe es eine kleine hilfe zur darstellung? Wie kann ich dies z.B in einer Standardbox im Linken bereich anzeigen lassen?
Warscheinlich mit css, oder?
Gruss aus der Schweiz
[Antwort]
Hallo Zusammen,
warum gibt es keine css – Datei für dieses Tutorial?
[Antwort]
Hi robin2160,
würde gerne das Ganze mit Promotion-Produkte und neue Produkte realisieren. Eine Box rechts, die andere links.
Kannst du mir unter die Arme greifen? oder geht das nicht??
es sollen quasi jeweils 3 Produkte erscheinen.
Im Voraus Dank
Brigitte
[Antwort]
Hi robin2160,
würde das Ganze sehr gerne mit Promotion-Produkte und neu Produkte (jeweils die leztzen 5 z. B.) kannst du mir auf die Sprünge helfen, oder ist es nicht zu realisieren??
Gruß
Brigitte
[Antwort]
Kann ich das Script so einstellen, das ich die Produkte selber bestimmen kann?
[Antwort]
Valentin Antwort vom Februar 1st, 2010 16:10:
ok habs hinbekommen mit einem Atribut und der Scriptzeile:
->addAttributeToFilter(‘top_10′, array(‘yes’=>true));
[Antwort]
So, ich habe jetzt heute das ganze top10 Modul noch einmal neu aufgesetzt
in die entsprechend dem überarbeiteten Tutorial Verzeichnisse die beiden Dateien abgelegt.
Den Aufruf in den default left Bereich meiner catalog xml gesetzt und:
fatal error: Class ‘Mage_Catalog_Block_Product_Toptenbox’ not found in /www/htdocs/w00c1614/magento/app/code/core/Mage/Core/Model/Layout.php on line 462
Was mache ich blos falsch ???
[Antwort]
mageintern - robin2160 Antwort vom Januar 19th, 2010 15:01:
Hi Frank,
die Fehlermeldung besagt das noch eine Datei fehlt.
In app/code/local/Mage/Catalog/Block/Product muß noch die Toptenbox.php hochgeladen werden.
VG Stefan
[Antwort]
Frank Hamm Antwort vom Januar 19th, 2010 17:01:
Ja das hätte ich auch vermutet. Aber die Datei ist da und der Pfad ist richtig.
Ich schicke dir gerade naochmal per mail einen Screenshot damit du mir glaubst
LG Frank
[Antwort]
Frank Hamm Antwort vom Januar 19th, 2010 19:05:
Ja, das wars !!!
Ich hatte mir extra nochmals die download.zip geladen nachdem du im Tutorial die Pfade geändert hattest.
Hab die download.zip jetzt nochmal neu runtergeladen und siehe da, es geht.
Hast du jetzt noch nen Tip für mich, wie ich die Top10 Anzeige wieder unter mein vertikales Menu bekomme??
Danke und Gruß aus dem Westerwald
Frank Hamm
[Antwort]
mageintern - robin2160 Antwort vom Januar 19th, 2010 20:41:
Ich kann in der Kommentarfunktion keine XML Strings posten, daher habe ich dir die Antwort per email geschickt.
VG Stefan
Hallo ich versuche schon seit einigen Tagen die Top10 Box in der linken Splate meines Shops einzubinden. Leider bisher erfolglos.
Leider sind meine Standard Folder etwas original schon etwas anders benannt als in diesem Tutorial, also habe ich die jeweiligen Ordnerstrukturen zusätzlich angelegt und die Datein sowohl in die zusätzlichen als auch in die entsprechenden originalen folder abgelegt.
Odner Produkt heisst original Product
Odner templates heisst original template
Stand derzeit:
Datei Toptenbox.php 2x abgespeichert jeweils unter:
app/code/local/Mage/Catalog/Block/Produkt/Toptenbox.php
app/code/local/Mage/Catalog/Block/Product/Toptenbox.php
Datei toptenbox.phtml 4x abgespeichert jeweils unter:
/templates/catalog/produkt/toptenbox.phtml
/templates/catalog/produkt/toptenbox.phtml
/template/catalog/produkt/toptenbox.phtml
/templates/catalog/produkt/toptenbox.phtml
Die Ausgabe
mit
unterhalb von in der catalog.xml eingefügt und unter:
app/design/frontend/default/uncutdealer/layout.
abgespeichert.
Shop Cash ist komplett abgeschaltet.
Ergebnis – NICHTS – Keine Fehlermeldung, aber auch kein Top10 Block.
Hab auch schon mal testweise die Ausgabe in den rechten Block gelegt – das selbe Ergebnis, nämlich keine Anzeige des Top10 Block.
1. Frage – Was mache ich falsch??
2. Frage – Warum müssen die die Ordener Produkt und Templates heissen? Kann ich die Scripte nicht so umbauen das ich die originale Ordnerstruktur nehmen kann?
Irgendwie finde ich es nicht so behaglich das ich für diesen kleinen Block diese individuellen Ordernstruktur brauche?
Kann mir bitte jemand helfen??? Ist relativ dringend
LG aus dem Westerwald
Frank Hamm
[Antwort]
mageintern - robin2160 Antwort vom Januar 16th, 2010 15:01:
Hi Frank,
ich habe jetzt im Tutorial die Pfade geändert.
Alt: app/code/local/Mage/Catalog/Block/Produkt/Toptenbox.php
Neu: app/code/local/Mage/Catalog/Block/Product/Toptenbox.php
und
Alt: app/design/frontend/default/IhrTheme/templates/catalog/produkt/toptenbox.phtml
Neu: app/design/frontend/default/IhrTheme/templates/catalog/product/toptenbox.phtml
Viel Spaß weiterhin mit den Tutorials und magento
VG Stefan
[Antwort]
Hi Brit,
so wie es aussieht befindet sich die Toptenbox.php nicht im richtigen Verzeichnis app/code/local/Mage/Catalog/Block/Product/Toptenbox.php.
Am besten gehtst du das Tutoral nochmal Step-by-Step durch.
Viele Grüße
Stefan
[Antwort]
Brit Antwort vom Dezember 14th, 2009 14:38:
Hi Stefan,
besten Dank! Der Fehler lag wie immer im Detail: Meine Ordnerstruktur war minimal anders (template statt templates und product statt produkt). Habe die Ordner jetzt zusätzlich angelegt und die Datein dorthin übertragen und jetzt läufts! Super Sache!!!! 1000 Dank!
Viele Grüße,
Brit
[Antwort]
Hi, danke für das Tutorial. Leider bekomme ich nach dem Upload der Dateien und der Veränderung der catalog.xml folgende Fehlermeldung:
Fatal error: Class ‘Mage_Catalog_Block_Product_Toptenbox’ not found in /home/www/inc81/html/magento/app/code/core/Mage/Core/Model/Layout.php on line 462.
Was habe ich falsch gemacht?
[Antwort]
heyjoe Antwort vom Dezember 19th, 2009 18:01:
s.o.
der Ordner muss “Produkt” heissen, nicht “Product” …
[Antwort]