2010-08-22 14 views
12

mam Magento 1.3.2 i mam dziwny problem:Magento -> getSku() lub getData ('sku') zwraca pusty ciąg

Kiedy jestem w list.phtml i próbuję pobrać za pomocą SKU getSku() lub getData('sku') Otrzymuję pusty ciąg znaków. getName() działa. Jednak gdy robię to z innych stron, działa dobrze.

I var_dump -ed it i nie ma SKU.

Co może być przyczyną?

Odpowiedz

22

Inną opcją jest ponowne załadowanie obiektu produktu do pliku list.phtml przy użyciu identyfikatora produktu, który już posiadasz. Kod odczytuje czegoś podobnego:

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

Zauważ, że $ _product to, co otrzymujesz w swojej kolekcji już i zauważ, że getSku jest wielkość liter (jak wszystkie atrybuty Magento getter/ustawiające).

@ Rozwiązanie Prattskiego jest lepsze, ponieważ nie chcesz mieć problemów z ładowaniem/manipulowaniem obiektami, ale brzmi to tak, jakby twoja kolekcja była trochę pomieszana. SKU jest jednym z podstawowych pól, który istnieje w tabeli podstawowej catalog_product_entity, więc nietypowe by nie być załadowane.

+2

Drodzy przyszli czytelnicy, to rozwiązanie ma dość duży wpływ na wydajność, jeśli jest używane w pętli foreach nad kolekcją. – mkutyba

4

Prawdopodobnie sku nie jest dodawane do listy atrybutów, gdy kolekcja jest pobierana. Zakładam, że mówisz o pliku /template/catalog/product/list.phtml. Jeśli tak, to musisz rozszerzyć odpowiedni plik kodu (/app/code/core/Mage/Catalog/Block/Product/List.php).

Myślę, że najlepiej jest przeciążyć metodę getLoadedProductCollection() w celu:

public function getLoadedProductCollection() 
    { 
     return $this->_getProductCollection()->addAttributeToSelect('sku'); 
    } 

To może nie działać, nie udało się go przetestować, jak w moim sklepie SKU i wszystkie inne atrybuty są dostępne w pliku szablonu list.phtml.

+0

To może być dobrym rozwiązaniem, ale ja nie polecam rozszerzenie klasy, ale raczej używać obserwatora zdarzeń dla tego (może 'catalog_block_product_list_collection'). – mkutyba

40

Jestem zaskoczony nikt nie dał ci najprostszy i najbardziej właściwą odpowiedź jeszcze:

Idź do swojego administratora, katalog >> Atrybuty >> zarządzanie atrybutami. Następnie edytuj atrybut "sku" sku '. Zmień "Używany w wykazie produktów" od "Nie" do "Tak". Będziesz wtedy mieć do niego dostęp z obiektu produktu w list.phtml z ->getSku()

+0

Oni tam są. getSku() po prostu nie działa. – Himberjack

+1

To był całkowicie mój problem, dziękuję. – UltimateBrent

+0

fajny pomysł, po prostu potrzebuję go w kasie –

-1

miałem ten sam problem zbyt ale starał $ _product [ 'sku'] to działa na mnie

-4

$ _product [ "sku"]; wystarczy, aby uzyskać sku produktu.

0

Spróbuj tego:

<?php 
    $current_product = Mage::registry('current_product'); 
    if($current_product) { 
     $sku = $current_product->getSku(); 
     // output sku 
     echo $sku; 
    } 
?> 
Powiązane problemy