Spaltenanzahl für Produktlisting ändern…

Im Forum wird immer wieder danach gefragt, wie man die Anzahl der Spalten im Grid-Mode für das Produktlisting anpassen kann. Bisher gibt es keine schnelle Lösung – denn schnell ist diese Anpassung auch nicht gemacht.
Es müssen Änderungen im Layout, Template sund dem Skin vorgenommen werden, wobei die XML-Anpassungen im Layout nicht dokumentiert sind. Viele können nicht verstehen dass man nicht über das Backend die Spaltenanzahl verändern kann. Zur Zeit geht das leider nicht, da man Einstellungen an zu vielen Stellen vornehmen muss. Es wäre machbar, indem man Inner-CSS benutzt und Systemfunktionen von Magento ignoriert. Wir stehen nicht für solche “Basteleien” und möchten erreichen, dass unser Shop für spätere Updates von Magento kompatibel bleibt. Wer allerdings für verschiedene Artikelgruppen, verschiedene Spaltenlayouts benötigt kommt an einer größeren Anpassung nicht vorbei.
Zur Umsetzung
Ich benutze in diesen Tutorial immer “Default” für das Interface und Theme. Passen Sie das Ihrer Shopkonfiguration an.
1. Layout
Als erstes müssen wir die Datei app/design/frontend/default/default/layout/catalog.xml anpassen. Suchen Sie nach allen Vorkommen von:
<block type="catalog/product_list" name="product_list" template="catalog/product/list.phtml">
und fügen Sie folgende Zeile hinzu:
<action method="setColumnCount"><columns>5</columns></action>
Die 5 passen Sie Ihrer gewünschten Spaltenanzahl an.
Damit liefert uns die Funktion $this->getColumnCount(); die richtige Spaltenanzahl.
2. Template
Öffnen Sie nun die Datei app/design/frontend/default/default/templates/catalog/product/list.phtml. Für uns wird es ab ca. Zeile 88 (<?php // Grid Mode ?>) interessant.
Anhand der zugewiesenen Klassen wie listing-type-grid catalog-listing und item, wissen wir schon, welche Einstellungn im Skin/CSS angepasst werden müssen.
Für dieses Tutorial ändern ich das Default Theme auf eine Spaltenanzahl von 5 Produkten ab.
Demo: http://www.demo-store.de/electronics/computers.html?mode=grid
Sie müssen das natürlich Ihren Vorstellungen entsprechend anpassen.
Da ich mich im 3-Spalten Layout befindet, wird es mit 5 Produkt-Spalten sehr eng. D.h. Ausser Bild, Name und Preis kommentiere ist alles weitere aus. Die Produktbilder sollen mit einer Größe von 80px dargestellt werden. Deshalb muss man das IMG-Tag anpassen wie folgt anpassen.
...
<img src="<?php echo $this->helper('catalog/image')->init($_product, 'small_image')->resize(80, 80); ?>" width="80" height="80" ...
Mein gesamter PHP-Code sieht wie folgt aus:
[/php]
<?php // Grid Mode ?>
<div class="listing-type-grid catalog-listing">
<?php $_collectionSize = $_productCollection->count() ?>
<?php $_columnCount = $this->getColumnCount(); ?>
<?php $i=0; foreach ($_productCollection as $_product): ?>
<?php if($i++%$_columnCount==0): ?>
<ol class="grid-row">
<?php endif; ?>
<li class="item">
<p class="product-image">
<a href="<?php echo $_product->getProductUrl() ?>" title="<?php echo $this->htmlEscape($this->getImageLabel($_product, 'small_image')) ?>">
<img src="<?php echo $this->helper('catalog/image')->init($_product, 'small_image')->resize(80, 80); ?>" width="80" height="80" alt="<?php echo $this->htmlEscape($this->getImageLabel($_product, 'small_image')) ?>" title="<?php echo $this->htmlEscape($this->getImageLabel($_product, 'small_image')) ?>" />
</a>
</p>
<h5><a href="<?php echo $_product->getProductUrl() ?>" title="<?php echo $this->htmlEscape($_product->getName()) ?>"><?php echo $this->htmlEscape($_product->getName()) ?></a></h5>
<!--
<?php if($_product->getRatingSummary()): ?>
<?php echo $this->getReviewsSummaryHtml($_product, 'short') ?>
<?php endif; ?>
-->
<?php echo $this->getPriceHtml($_product, true) ?>
<!--
<?php if($_product->isSaleable()): ?>
<button type="button" class="form-button" onclick="setLocation('<?php echo $this->getAddToCartUrl($_product) ?>')"><span><?php echo $this->__('Add to Cart') ?></span></button>
<?php else: ?>
<div class="out-of-stock"><?php echo $this->__('Out of stock') ?></div>
<?php endif; ?>
-->
<!--
<p class="add-to">
<?php if ($this->helper('wishlist')->isAllow()) : ?>
<a href="<?php echo $this->helper('wishlist')->getAddUrl($_product) ?>" class="link-cart"><?php echo $this->__('Add to Wishlist') ?></a>
<?php endif; ?>
<?php if($_compareUrl=$this->getAddToCompareUrl($_product)): ?><br/>
<a href="<?php echo $_compareUrl ?>"><?php echo $this->__('Add to Compare') ?></a>
<?php endif; ?>
</p>
-->
1
3. SKIN
Öffnen Sie die Datei skin/frontend/default/default/css/boxes.php und suchen Sie nach /********************** Catalog Listing */, ca. Zeile 800. Weiter unten bei .listing-type-grid finden Sie den Hintergund für die Spaltenaufteilung. Diesen habe ich mir angepasst und als bkg_products-grid5.gif in das Verzeichnis skin/frontend/default/default/images kopiert.
Download: bkg_products-grid5.zip
Weil bei 5 Spalten die Schrift zu groß wirkt, füge ich folgende Zeile ein:
.listing-type-grid li.item h5 a { font-size: 0.9em; line-height: 0.3em; }
In der Klasse .listing-type-grid li.item passe ich noch die Breite an. So sieht mein komplettes CSS wie folgt aus:
/* Grid Type */
.listing-type-grid { background:url(../images/bkg_products-grid5.gif) 0 0 repeat; }
.listing-type-grid .grid-row { border-bottom:1px solid #d9dde3; }
.listing-type-grid li.item { float:left; width:75px; padding:12px 10px; line-height:1.6em; overflow:hidden; }
.listing-type-grid li.item h5 a { font-size: 0.9em; line-height: 0.3em; }
...
Sie können auch ein alternatives Layout anlegen. Zum Beispiel .col-5-layout und diesen in Ihrem Template eintragen. Ich muss gestehen, diese Idee kam mir erst jeztzt nachdem ich schon fast das ganze Tutorial geschrieben hatte
Nachdem Sie alle Dateien auf Ihren Webserver kopiert haben, war es das auch schon. Sie werden mit den Breitenangaben und dem Hintergrundbild noch etwas “experimentieren” müssen, bis es in Ihr Erscheungsbild passt.
Bei Kauf-Templates kann es sein, dass Sie die Spaltenanzahl manuell eingeben müssen, oder die Klassenbezeichnungen nicht stimmen. Falls Sie Probleme mit Ihren Kauf-Templates haben, müssen Sie sich an den Verkäufer oder Ersteller des Templates wenden.
Viele Grüße
Johannes Teitge
Danke für die ausführliche Information zu diesem Thema.
Die Sache ist die, dass läuft schon auch mit Veränderung von nur einer Datei (der catalog.xml). Allerdings nur im modern Theme (seit etwa 4 Versionen).
Ich finde es wirklich schade das nicht einmal die Core-Themes den gleichen technischen Stand haben. Da brauch man aus meiner Sicht gar nicht erst anfangen über die “Kauf-Themes” zu spekulieren, zumindest so lange bis die Core-Themes nicht wenigstens den 100% gleichen Stand haben.
Habe hier kürzlich was zum Thema geschrieben (Details mit Zeilanangaben) http://www.magenity.de/index.php?page=Thread&postID=78#post78
Ist aber trotzdem mal zu sehen wie das alles zusammen hängt, daher nochmals danke für den Beitrag.
Liebe Grüße – Daniel
War diese Antwort hilfreich?
LikeDislikedamit man nicht ganz soviele änderungen in den xml Dateien machen muss, es betrifft übrigens nicht nur die catalog.xml, bietet es sich an gleich in der list.phtml den Wert zu setzen.
Die Suche ist nach dieser Methode nachwievor 3 Spaltig!!! Um ein durchgängiges Layout zu erstellen mus also auch die Suche entsprechend angepasst werden. Ich habe mir die Änderungen der entsprechenden XML Dateien erspart und direkt in der list.phtml wo ja das grid erzeugt wird, den entsprechenden Wert gesetzt.
Grüße tholie
War diese Antwort hilfreich?
LikeDislikeJa wie tholie bereits beschrieben hat, die Ergebnisse der Suche sind damit leider immer noch 3spaltig und ich habe es auch nicht geschafft, catalogsearch.xml so zu bearbeiten, dass die Spaltenanzahl sich ändert. Wie tholie meinte habe ich daher in list.phtml nach und direkt vor getColumnCount(); ?> folgendes eingefügt: setColumnCount(5); ?>
Die restlichen Änderungen der template datei ebenfalls wie oben beschrieben übernehmen, nur die Änderungen an den Layout Dateien fallen weg. Funktioniert super!
War diese Antwort hilfreich?
LikeDislike