Question

J'ai un système de développement, voici tout ce travail de comme prévu. Et j'ai un système de mise en scène, ici l'attribut est pas chargé. Il se sent comme le sytem ne sais pas, que l'attribut n'existe pas dans le magasin / attribute_set / ...?

J'ai un artist_id d'attribut et cet attribut est pas chargé.

Les collections sont initialisés avec l'attribut:

if (!is_null($this->_productCollection)) {
    return $this->_productCollection;
}
$collection = parent::_getProductCollection();
$collection->addAttributeToSelect('artist_id');

J'ai vérifié wether l'attribut est dans la collection et il est:

[_selectAttributes:protected] => Array
    (
        [name] => 71
        [short_description] => 73
        [price] => 75
        [special_price] => 76
        [special_from_date] => 77
        [special_to_date] => 78
        [small_image] => 86
        [thumbnail] => 87
        [news_from_date] => 93
        [news_to_date] => 94
        [status] => 96
        [url_key] => 97
        [required_options] => 110
        [image_label] => 112
        [small_image_label] => 113
        [thumbnail_label] => 114
        [msrp_enabled] => 118
        [msrp_display_actual_price_type] => 119
        [msrp] => 120
        [tax_class_id] => 122
        [price_type] => 124
        [weight_type] => 126
        [price_view] => 127
        [shipment_type] => 128
        [links_purchased_separately] => 129
        [links_exist] => 132
        [artist_id] => 146
    )

Mais quand j'essaie d'obtenir $_product->getArtistId() il n'y a pas id.

Débogage sur ce système est vraiment difficile. J'ai essayé de trouver la partie où la requête est construite, mais n'a pas trouvé encore.

UPDATE :. Tables plat OFF

Et maintenant la mauvaise partie: Un peu

<?php $_product->load($_product->getId()); ?>

dans le foreach des product/list.phtml résout le problème; -)

Pour être honnête. Je pense que je me suis cassé quelque chose dans la base de données alors que la modification des paramètres directy dans les tableaux

Y at-il un lien entre les attributs et les magasins
Toutes les idées sur ce problème?

Était-ce utile?

La solution 4

J'ai abssolutely aucune idée de la façon dont cette happend, voici la fin de l'histoire:

Le backend_type a été varchar au lieu de int.

Il est évident pour moi, que la collection ne peut pas charger le artist_id si magento ne savent pas où chercher la valeur, mais pourquoi est $_product->load() en mesure d'obtenir la valeur? Je dois enquêter sur ce sujet.

Autres conseils

Jetez un oeil à des paramètres d'attribut, assurez-vous que « Visible sur le produit Voir la page sur la fin avant » est oui et « Utiliser la navigation en couches » est oui aussi (uniquement si l'attribut est menu déroulant)

Mise à jour:

Une autre chose que vous pouvez essayer d'ajouter:

    <product>
        <collection>
            <attributes>
                <artist_id/>
            </attributes>
        </collection>
    </product>

config.xml d'un module, dans la section .

Si cela fonctionne sur dev, mais pas sur la mise en scène - et la base de code est une copie exacte -. Alors votre problème est votre DB lui-même

Vous pouvez très facilement confirmer en remplaçant votre mise en scène DB avec celle de votre développement DB et voir si cela arrive encore.

Ce que vous décrivez juste ne devrait pas arriver à moins que vous avez faites des modifications manuelles dans le DB -. Ou le code est différent de vos deux sites

Y at-il une valeur par défaut pour cet attribut dans la table EAV? Jetez un oeil à cette requête:

SELECT
  `t_d`.`entity_id`,
  `t_d`.`attribute_id`,
  `t_d`.`value` AS `default_value`,
  `t_s`.`value` AS `store_value`,
  IF(t_s.value_id IS NULL, t_d.value, t_s.value) AS `value`
FROM `catalog_product_entity_varchar` AS `t_d`
LEFT JOIN `catalog_product_entity_varchar` AS `t_s`
  ON t_s.attribute_id = t_d.attribute_id AND t_s.entity_id = t_d.entity_id AND t_s.store_id = 3
...

Voici comment Magento charge tous les attributs EAV dans les collections. Comme vous le voyez, s'il n'y a pas de valeur définie pour le magasin par défaut (pas d'entrée dans la base de données, NULL serait bien), la première partie de la requête renvoie aucun résultat, les LEFT JOIN ne fonctionnera pas et votre won d'attribut » t get chargé -. même si vous avez une valeur spécifique magasin

Malheureusement, je suis tombé une fois déjà, nous avons fait quelque chose de mal avec une importation et je devais déboguer beaucoup jusqu'à ce que je compris ce qui est arrivé. Peut-être vérifier votre DB.

Peut-être essayer:

$product->getData('artist_id');

Vérifiez si l'attribut ( 'artist_id') est ajoutée à la Attribut ensemble à laquelle appartient le produit particulier.

Licencié sous: CC-BY-SA avec attribution
Non affilié à magento.stackexchange
scroll top