2010-08-22 8 views
12

Ich habe Magento 1.3.2 und ich habe seltsame Frage:Magento -> getSku() oder getData ('sku') gibt leere Zeichenfolge

Als ich in list.phtml bin, und ich versuche, die SKU zu holen, indem Sie getSku() oder getData('sku') Ich bekomme leere Zeichenfolge. getName() funktioniert. Wenn ich das von anderen Seiten mache, funktioniert das gut.

I var_dump -ed es und keine SKU wird angezeigt.

Was kann das verursachen?

Antwort

22

Die andere Option besteht darin, das Produktobjekt in list.phtml mit der ID des bereits vorhandenen Produkts erneut zu laden. Der Code liest etwas ein wenig wie:

$sku = Mage::getModel('catalog/product')->load($_product->getId())->getSku(); 

Beachten Sie, dass $ _product ist das, was Sie in Ihrer Sammlung sind immer schon, und beachten Sie, dass getSku Groß- und Kleinschreibung (wie alle Magento Getter/Setter-Attribute).

@ Prattski-Lösung ist vorzuziehen, da Sie nicht wirklich mit dem Laden/Manipulieren der Objekte zu tun haben wollen, aber es klingt, als ob Ihre Sammlung ein wenig durcheinander ist. SKU ist eines der Kernfelder, die in der Basis catalog_product_entity Tabelle vorhanden sind, daher wäre es ungewöhnlich, nicht geladen zu werden.

+2

Sehr geehrte zukünftige Leser, diese Lösung hat ziemlich große Auswirkungen auf die Leistung, wenn sie innerhalb der foreach-Schleife über die Sammlung verwendet wird. – mkutyba

4

Wahrscheinlich wird SKU nicht zur Liste der Attribute hinzugefügt, wenn eine Sammlung abgerufen wird. Ich nehme an, Sie sprechen über die Datei /template/catalog/product/list.phtml. Wenn dies der Fall ist, müssen Sie die entsprechende Codedatei (/app/code/core/Mage/Catalog/Block/Product/List.php) erweitern.

Ich denke, die beste Wahl, die getLoadedProductCollection() -Methode, um eine Überlastung ist:

Dies könnte nicht funktionieren, ich habe es nicht in der Lage zu testen
public function getLoadedProductCollection() 
    { 
     return $this->_getProductCollection()->addAttributeToSelect('sku'); 
    } 

, wie es in meinem Speicher die sku und alle anderen Attribute sind in der list.phtml-Vorlagendatei verfügbar.

+0

Es könnte eine gute Lösung sein, aber ich empfehle nicht Klasse zu erweitern, sondern Ereignis Beobachter für diese (vielleicht 'catalog_block_product_list_collection') verwenden. – mkutyba

40

Ich bin überrascht, niemand hat Ihnen die einfachste und richtige Antwort noch:

zu Ihrem Admin gehen, Katalog >> Attribute >> Attribute verwalten. Bearbeiten Sie dann das Attribut 'sku'. Ändern Sie die "Verwendet in der Produktliste" von 'Nein' zu 'Ja'. Sie werden dann Zugriff auf sie aus dem Produkt bezwecken in list.phtml mit ->getSku()

+0

Sie zeigen sich dort. das getSku() funktioniert einfach nicht .. – Himberjack

+1

Das war total mein Problem, danke. – UltimateBrent

+0

nette Idee, nur ich brauche es in der Kasse –

-1

ich gleiche Problem auch hatte aber versucht $ _product [ 'sku'] es funktioniert für mich

-4

_product $ [ "sku"]; genug, um das Produkt sku zu bekommen.

0

Versuchen Sie folgendes:

<?php 
    $current_product = Mage::registry('current_product'); 
    if($current_product) { 
     $sku = $current_product->getSku(); 
     // output sku 
     echo $sku; 
    } 
?> 
Verwandte Themen