2010-04-07 2 views
1

J'ai ajouté un nouvel attribut à mes produits (un champ "yes/no" booléen). C'est une variable pour activer/désactiver le prix d'affichage sur la page de détail du produit, et la vue de la grille.Impossible d'obtenir l'attribut nouveau produit dans l'affichage de la grille

J'ai réussi à le faire fonctionner sur la page d'informations sur le produit. Mais sur la page de grille de produit je ne peux pas sembler accéder à cette variable. Plus précisément, le modèle avec lequel je travaille est catalog/product/price.phtml. D'après ce que je peux dire, le prix est affiché par le même groupe d'instructions if sur la page de détail du produit et la page de grille. Cela m'a confondu parce que je ne peux pas trouver de code sur ce modèle pour gérer plusieurs produits, juste un tas d'instructions imbriquées.

C'est ainsi que je tente d'accéder à cette nouvelle variable en utilisant $ _displayPrice. sur la ligne 36 du catalogue/produit/price.html

<?php $_product = $this->getProduct(); ?> 

<?php $_id = $_product->getId() ?> 
<?php $_displayPrice = $_product->getDisplayPrice() ? "Yes" : "No"; 

echo $_displayPrice;?> 

Ce qui m'a encore plus confuse est que lorsque l'affichage _product- $> getData(), ma nouvelle variable est nulle part parmi ces données.

grâce à l'avance

Répondre

3

D'accord, d'abord la raison pour laquelle vos attributs ne se charge pas. Magento utilise un modèle EAV pour stocker les données du catalogue. Cela signifie que (principalement) toutes les données du tableau getData proviennent d'une jointure de table. Cela signifie que Magento est avare de la façon dont il demande des données à partir de la base de données. S'il n'a pas besoin de votre champ, il ne prendra pas la peine de l'inclure (et économisera du temps de requête). Ainsi, lors du chargement d'une page de catalogue, Magento utilise Mage_Catalog_CategoryController et l'action de visualisation. Grâce à la magie de Magento, cela appelle par la suite Mage_Catalog_Model_Layer::getProductCollection, qui charge tous les attributs nécessaires. Comment choisit-il les attributs à inclure, dites-vous? Il les obtient de la configuration dans Mage_Catalog_Model_Config::getProductCollectionAttributes bien sûr! Donc, si nous voulons inclure votre nouvel attribut, nous devons changer la configuration.

En regardant le fichier de configuration, le chemin qui gère les colonnes sont chargées est frontend/product/collection/attributes, vous aurez donc besoin d'ajouter ce qui suit au fichier config.xml une extension:

<frontend> 
    <product> 
     <collection> 
      <attributes> 
       <display_price /> 
      </attributes> 
     </collection> 
    </product> 
</frontend> 

Cela ajoutera les display_price Attribuez à la liste d'attributs à charger dans la collection de produits par défaut, et vous devriez maintenant pouvoir appeler $_product->getDisplayPrice() et obtenir les données que vous recherchez. Assurez-vous de vider votre cache avant de vous attendre à voir des changements!

Espérons que ça aide.

Merci, Joe

+0

qui démystifie TOUT! A contourné le problème en ajoutant mon if-déclaration à catalog/product/view.html à la place, où il affecte uniquement les détails du produit. Idéalement, je peux utiliser les informations que vous m'avez données pour fixer price.phtml, donc je n'ajoute pas trop d'if-statements unessasary dans des modèles aléatoires. Merci yo! – russjman

+0

Je ne peux toujours pas sembler accéder aux nouveaux attributs. Je les ai ajoutés à la liste dans app/core/Mage/Catalogue/etc/config.xml, et j'ai désactivé le cache du site. Je suppose que l'ajout de la les rendrait accessibles dans template/catalog/product/list.phtml. – russjman

+2

Est-ce seulement moi, ou Magento est vraiment trop compliqué et gonflé? : | – jayarjo

Questions connexes