Frage

Ich habe ein seltsames Problem: Sagen wir Kategorie A hat ein individuelles Design. Wenn ich das Produkt über öffne domain.com/category-a/product.html Das benutzerdefinierte Design gilt korrekt.

Aber wenn ich das Produkt über Magentos kanonische/Google -Sitemap -URL öffne domain.com/product.html Das benutzerdefinierte Design gilt nicht.

Wie kann ich dieses Verhalten umgehen? Ich nehme an, Magento weiß nicht, welches benutzerdefinierte Design der Kategorie als Produkt mehr als eine Kategorie haben kann?

Layoutstruktur ist:

  • Maßgefertigtes Design
  • -> Standard
  • -> category_custom
War es hilfreich?

Lösung

Die Produktseite wird aus gerendert Mage_Catalog_Helper_Product_View::prepareAndRender(). Diese Methode berücksichtigt die aktuelle Kategorie durch Anrufe Mage_Catalog_Helper_Product_View::initProduct() In diesem Code: Code:

$categoryId = $params->getCategoryId(); 
//...
if ($categoryId) {
    $category = Mage::getModel('catalog/category')->load($categoryId);
    $product->setCategory($category);
    Mage::register('current_category', $category);
} 

Der Fluss ist also so etwas:

  1. Initieren Sie das Produkt mit seinen Optionen (einschließlich der Kategorie -ID)
  2. Rendern Sie das Produkt basierend auf dem Ergebnis von init.

Sie können versuchen, in der Init -Phase eine Logik hinzuzufügen, um die Kategorie anzugeben.
Am Ende, wenn die initProduct Methode, dieses Ereignis wird versandt.

Mage::dispatchEvent('catalog_controller_product_init', array('product' => $product)); 

Sie können dazu einen Beobachter erstellen und die Produktkategorie (ähnlich dem obigen Code) festlegen, und der Rendering -Teil sollte Ihre Kategorie berücksichtigen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit magento.stackexchange
scroll top