2010-08-22 21 views
12

ho Magento 1.3.2 e ho strano problema:Magento -> getSku() o getData ('sku') restituisce una stringa vuota

Quando sono in list.phtml, e cerco di prendere lo SKU utilizzando getSku() o getData('sku') Ottengo una stringa vuota. getName() funziona. Tuttavia, quando lo faccio da altre pagine, funziona bene.

I var_dump -ed e non viene visualizzato alcun SKU.

Cosa può causare questo?

risposta

22

L'altra opzione è di ricaricare l'oggetto del prodotto in list.phtml utilizzando l'ID del prodotto già presente. Il codice si legge qualcosa di un po 'come:

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

Nota che $ _Product è quello che hai trovato nella vostra collezione già, e si noti che getSku è case sensitive (come lo sono tutti gli attributi di Magento getter/setter).

@ La soluzione di Prattski è preferibile in quanto non si vuole veramente scherzare con il caricamento/manipolazione degli oggetti, ma sembra che la tua collezione sia un po 'incasinata. SKU è uno dei campi principali esistenti nella tabella catalog_product_entity di base, quindi sarebbe insolito non essere caricato.

+2

Cari futuri lettori, questa soluzione ha un notevole impatto sulle prestazioni se viene utilizzata all'interno di foreach loop over collection. – mkutyba

4

Probabilmente sku non viene aggiunto all'elenco di attributi quando viene recuperata una raccolta. Presumo che tu stia parlando del file /template/catalog/product/list.phtml. In tal caso, è necessario estendere il corrispondente file di codice (/app/code/core/Mage/Catalog/Block/Product/List.php).

penso che la cosa migliore è di sovraccaricare il metodo getLoadedProductCollection() a:

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

Questo non potrebbe funzionare, non sono stato in grado di testare, come nel mio negozio SKU e tutti gli altri attributi sono accessibili nel file modello list.phtml.

+0

potrebbe essere una buona soluzione, ma vi consiglio di non estendere la classe, ma piuttosto utilizzare osservatore evento per questo (forse 'catalog_block_product_list_collection'). – mkutyba

40

Mi sorprende che nessuno ti ha ancora dato la risposta più semplice e corretto:

andare al vostro amministratore, Catalogo >> >> Attributi gestire gli attributi. Quindi modificare l'attributo 'sku'. Modificare "Utilizzato in Elenco prodotti" da 'No' a 'Sì'. Si avrà quindi accesso ad esso dall'oggetto prodotto in list.phtml con ->getSku()

+0

Stanno mostrando lì. il getSku() semplicemente non funziona .. – Himberjack

+1

Questo era totalmente il mio problema, grazie. – UltimateBrent

+0

bella idea solo ne ho bisogno al check-out –

-1

Ho avuto lo stesso problema troppo ma provato $ _Product [ 'sku'] funziona per me

-4

$ _Product [ "SKU"]; abbastanza per ottenere il prodotto sku.

0

Prova questa:

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