Comment obtenir la valeur d'un attribut de produit spécifique si je connais l'ID du produit sans charger le produit entier ?
Comment obtenir le texte de l'option ? quelqu'un le sait-il ?
Comment obtenir la valeur d'un attribut de produit spécifique si je connais l'ID du produit sans charger le produit entier ?
Ce code fonctionne bien. J'ai cherché beaucoup de blog mais aucun code n'a fonctionné pour moi sauf celui-ci. Vraiment bien.
Ce code ne fonctionne que lorsque le modèle de produit contient la valeur de l'attribut, lorsque vous ne connaissez que l'id du produit, cela ne fonctionnera pas.
Cela fonctionne pour les attributs comme les listes déroulantes, mais si l'attribut est un simple champ de texte, une fonction différente est nécessaire. Si l'attribut est mon_nom, le code devient $product->getMyName().
Il semble impossible d'obtenir une valeur sans charger le modèle du produit. Si vous jetez un coup d'oeil au fichier app/code/core/Mage/Eav/Model/Entity/Attribute/Frontend/Abstract.php vous verrez la méthode
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 = new Mage_Eav_Model_Entity_Attribute_Source_Boolean();
if ($options = $opt->getAllOptions()) {
foreach ($options as $option) {
if ($option['value'] == $value) {
$valueOption = $option['label'];
}
}
}
}
$value = $valueOption;
}
elseif ($this->getConfigField('input')=='multiselect') {
$value = $this->getOption($value);
if (is_array($value)) {
$value = implode(', ', $value);
}
}
return $value;
}
Comme vous pouvez le voir, cette méthode requiert un objet chargé pour en récupérer les données (3ème ligne).
Nous devons d'abord nous assurer que l'attribut souhaité est chargé, puis l'éditer. Utilisez ceci :
$product = Mage::getModel('catalog/product')->load('<product_id>', array('<attribute_code>'));
$attributeValue = $product->getResource()->getAttribute('<attribute_code>')->getFrontend()->getValue($product);
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
1 votes
Ce n'est pas une bonne réponse, mais vous pourriez créer un modèle qui interroge directement les tables appropriées :)