web-dev-qa-db-fra.com

Magento -> getSku () ou getData (’sku’) renvoie une chaîne vide

J'ai Magento 1.3.2 et j'ai un problème étrange:

Lorsque je suis dans list.phtml et que j'essaie d'extraire le SKU en utilisant getSku() ou getData('sku'), la chaîne est vide. getName() fonctionne. Cependant, lorsque je le fais à partir d'autres pages, cela fonctionne bien.

Je var_dump- édité et aucune référence n'est affichée.

Qu'est-ce qui peut causer ça?

16
Himberjack

L'autre option consiste à recharger l'objet produit dans le fichier list.phtml en utilisant l'ID du produit que vous avez déjà. Le code lit quelque chose comme: 

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

Notez que $ _product est ce que vous obtenez déjà dans votre collection et notez que getSku est sensible à la casse (comme tous les attributs Magento getter/setters). 

La solution de @ Prattski est préférable car vous ne voulez pas vraiment vous occuper du chargement/de la manipulation des objets, mais il semble que votre collection soit un peu foirée. La SKU est l’un des principaux champs de la table de base catalog_product_entity; il serait donc inhabituel de ne pas être chargé. 

25
Jonathan Day

Je suis surpris que personne ne vous ait donné la réponse la plus facile et la plus appropriée à ce jour:

Accédez à votre administrateur, Catalogue >> Attributs >> Gérer les attributs . Puis éditez le 'sku' attribut. Modifiez le "Utilisé dans la liste de produits" de "Non" à "Oui" . Vous y aurez alors accès à partir de l’objet product dans list.phtml avec ->getSku()

45
Prattski

Sku n'est probablement pas ajouté à la liste des attributs lorsqu'une collection est récupérée. Je suppose que vous parlez du fichier /template/catalog/product/list.phtml. Si tel est le cas, vous devez étendre le fichier de code correspondant (/app/code/core/Mage/Catalog/Block/Product/List.php).

Je pense que votre meilleur pari est de surcharger la méthode getLoadedProductCollection () pour:

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

Cela pourrait ne pas fonctionner, je n'ai pas pu le tester, car dans mon magasin, le sku et tous les autres attributs sont accessibles dans le fichier de modèle list.phtml.

4
silvo

Essaye ça:

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