Question

Dans la liste des produits, je montre le fabricant et tout fonctionne très bien. Mais quand je fais une recherche, au lieu de montrer le nom du fabricant, il montre Non, j'utilise le code suivant pour montrer les marques:

$_product->getResource()->getAttribute('manufacturer')->getFrontend()->getValue($_product)

J'utilise magento 1.7.0.2.

Était-ce utile?

La solution

Diagnostiquer votre problème réel:

  • Assurez-vous que la collection de produits utilisés pour la recherche inclut l'attribut fabricant ou que l'attribut fabricant est défini dans le back-end à afficher sur l'interface (voir capture d'écran ci-dessous).
  • Assurez-vous que l'attr manufacturer est définie pour la vue magasin approprié ! Dans la vue de gérer modifier des produits du catalogue, assurez-vous que le menu déroulant est en cours de la valeur de la vue magasin, pas le magasin / site / vue par défaut .
  • Assurez-vous réindexer. Si vous êtes sur CE, exécutez l'indexeur manuellement. Si sur l'EE assurez-vous que vos index sont mises à jour à partir Cron ou via $ php shell/indexer.php reindexall.
  • Effacer toutes vos caches. Rincer le stockage du cache. rm -rf var/cache et toutes les choses destructrices. Vérifier la existance d'un dossier /tmp/magento.
  • Désactiver / activer catalogue plat et réindexation.

Activer un attribut pour la page frontend / produit / visibilité de collection:

entrer image description ici

Pourquoi cela se produit:

Alors, il y a une raison valable pourquoi les retours Magento « Non » quand il n'y a pas de données disponibles. Le procédé getFrontend retourne un objet qui est une sous-classe de Mage_Eav_Model_Entity_Attribute_Frontend_Abstract.

Dans la méthode getValue, s'il n'y a pas d'options disponibles / set, la valeur par défaut booléen de sortie. Ainsi, la valeur de « Non » - qui est l'équivalent frontend booléenne de false:

public function getValue(Varien_Object $object)
{
    $value = $object->getData($this->getAttribute()->getAttributeCode());
    if (in_array($this->getConfigField('input'), array('select','boolean'))) {
        $valueOption = $this->getOption($value);
        if (!$valueOption) {
            $opt     = Mage::getModel('eav/entity_attribute_source_boolean');
//....

Une fois ce qui précède les points de dépannage sont effectuées - si vous recevez encore « Non » et il est une réponse appropriée (par exemple, vous avez pas d'ensemble du fabricant sur un produit, et sur le but), vous pouvez tester conditionnellement la sortie avant l'écho:

$value = $_product->getResource()->getAttribute('manufacturer')->getFrontend()->getValue($_product);
echo $value=="No" ? "" : $value;
Licencié sous: CC-BY-SA avec attribution
Non affilié à magento.stackexchange
scroll top