Magento Version 1.9.0.1 entfernen von “Alle anzeigen” bei Unterkategorie – rwd Template

Das neue Magento Version 1.9 hat eine Funktion, die sich erstmal praktisch anhört, aber zu großen Probleme führt. Es wird automatisch in Unterkategorien ein Eintrag “Alle anzeigen” als erste Unterkategorie erzeugt. Ich habe noch nicht getestet, ob es generell bei 1.9 der Fall ist oder nur für das RWD Template. Vermute jedoch es ist ein generelles Problem.

update: Lösung gefunden(!)

Probleme sind:

Der Eintrag wird falsch generiert. Es fehlt ein Leerzeichen. Die Ausgabe für eine Kategorie mit Toastern wäre z.B.”Alle anzeigenToaster”.

Noch viel störender ist, dass man die Kategorien von Magento so nicht mehr für die Strukturierung von Inhalten verwenden kann. Angenommen man erstellt eine Top Kategorie “Unternehmen” und darunter “Über uns”, “Kontakt” und ähnliches. Dann wird das erste Item im Top Menü “Alle anzeigenUnternehmen”. Das macht natürlich keinen Sinn.

 

Den Eintrag selbst bekommt man über den Adminbereich scheinbar nicht deaktiviert und ein deaktivieren per Code scheint auch nicht offensichtlich zu sein.

Möglichkeiten zur Entfernung der Funktion:

(1) per CSS und first-child den ersten Menüpunkt schlicht entfernen über “display:none”. Die Variante ist jedoch ziemlich unsauber…

(2) direkt im Code entfernen (siehe unten)

 

Die zu bearbeitende Datei ist renderer.phtml hier

\app\design\frontend\rwd\default\template\page\html\topmenu\renderer.phtml

 

Der Bereich, der die Ausgabe “alle anzeigen” generiert ist dieser hier:

ca. Zeile 60 bis 70

Folgenden Bereich ersetzen:

    if (!empty($_hasChildren)) {
$html .= ‘<ul>’;
$html .=     ‘<li>’;
$html .=         ‘<a href=”‘. $child->getUrl() .'”>’;
$html .=             $this->__(‘View All ‘) . $this->escapeHtml($this->__($child->getName()));
$html .=         ‘</a>’;
$html .=     ‘</li>’;
$html .=     $this->render($child, $childrenWrapClass);
$html .= ‘</ul>’;
}

Durch folgende Version (Zeile 60 bis 70)

if (!empty($_hasChildren)) {
$html .= ‘<ul>’;
$html .=     $this->render($child, $childrenWrapClass);
$html .= ‘</ul>’;
}

 

Cache flushen bzw. leeren nicht vergessen(!) Die Änderungen werden erst aktiv nachdem der Cache komplett geleert wurde.

 

Bessere Lösung (leider noch ohne Codebeispiele)

Am Besten wäre ein zusätzliches Kategorie-Attribut mit welchem man steuern kann für welche Kategorien die Funktion verwendet werden soll und wo nicht.

Bei vielen Kategorien mag die  “zeige alle Funktion” sinnvoll sein(!) Wenn diese jedoch immer verwendet wird ist das sehr unpraktisch. Dadurch kann man viele tolle Dinge mit Magento nicht mehr machen.

Dann ist es einfacher die Funktion auszubauen und wie bisher eine neue Kategorie anzulegen und diese z.B. “Alle Toaster” zu nennen und diese als erste Subcategory zu listen. Oder man ergänzt in der Parent Kategorie alle Produkte.

 

Hat jemand eine Anleitung für den Einbau eines Kategorie-Attributes für genau diesen Fall? Freue mich auf einen Kommentar!

4 Antworten auf „Magento Version 1.9.0.1 entfernen von “Alle anzeigen” bei Unterkategorie – rwd Template“

  1. Ist halt typisch Magento. Der Entwickler, der das verbockt hat, kam wohl nicht auf die Idee, dass in anderen Sprachen der Satzaufbau ein anderer sein könnte. Dann geht die Übersetzung natürlich in die Hose. Daher habe ich es so gelöst:

    In der Datei app/design/frontend/rwd/default/template/page/html/topmenu/renderer.phtml die Zeile 66 von

    $html .= $this->__(‘View All’) . ‘ ‘ . $this->escapeHtml($this->__($child->getName()));

    geändert in

    $html .= $this->__(‘View All %s’, $this->escapeHtml($this->__($child->getName())));

    Und in die translate.csv diese Zeile hinzugefügt:

    “Mage_Page::View All %s”,”Alle %s ansehen”

    Diese Lösung mag ebenfalls nicht immer die passende sein. Wenn man allerdings nur Unterkategorien hat, die einem herkömmlichen Shop entsprechen (Kleider, Hosen, Jacken, Schrauben, Windeln usw.), ist man hiermit jedoch auf der übersetzbaren Seite 😉

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.