web-dev-qa-db-fra.com

Comment afficher un attribut personnalisé dans le panier (Magento)

J'ai essayé beaucoup de stuf mais aucun d'entre eux ne fonctionne. Je pense pouvoir obtenir les attributs personnalisés sur la page du produit, mais je me demandais: comment les obtenir sur la page du panier? (l'attribut est juste un simple texte écrit)

15
pomaaa

$_item->getProduct()->load() rechargera toutes les données de produit de la base de données. Bien que cela fonctionne, gardez à l’esprit que chaque fois que vous appelez load(), Magento exécutera une requête dans la base de données.

La même chose peut être faite avec de bien meilleures performances en chargeant l'attribut avec l'élément de devis. Créez simplement un module personnalisé et ajoutez-le au fichier config.xml

<global>
    <sales>
        <quote>
            <item>
                <product_attributes>
                    <one_custom_attribute_code />
                    <another_custom_attribute_code />
                </product_attributes>
            </item>
        </quote>
    </sales>
</global>

Cela fait, vous pouvez accéder à votre attribut personnalisé sans requérir de requêtes de base de données supplémentaires.

$_item->getProduct()->getAnotherCustomAttributeCode();

Voici un article à ce sujet: https://www.atwix.com/magento/accessing-custom-attribute-at-checkout-or-cart/

46

Parlez-vous d'option personnalisée ou d'attribut simple?

Attribut simple (texte):
(Dans votre default.phtml)

<?php $_item = $this->getItem()?>
<?php $_product= Mage::getSingleton('catalog/product')->load($_item->getProductId()) ?>
<?php echo $_product->getResource()->getAttribute('attribute_code')->getFrontend()->getValue($_product); ?>
25

J'ai utilisé ceci

(dans app/design/frontend/default/your_theme/template/checkout/cart/item/default.phtml)

pour mon attribut (textfield):

<?php 
$_item = $this->getItem();
$_product = $_item->getProduct()->load();
?>
<?php echo $_product->getCustomAttribute(); ?>
7
Sander Looijenga

Ce n'est pas la meilleure façon, dans votre attribut (magento/admin), vous pouvez définir l'option:

Visible à la caisse

Donc, l'attribut va à la

$_options Array ($_options = $this->getOptionList()) (in checkout/cart/item/default.phtml)

Vous pouvez utiliser l'attribut (le tableau $_option) comme:

array(4) { ["label"]=> string(10) "Lieferzeit" ["value"]=> string(8) "2-3 Tage" ["print_value"]=> string(8) "2-3 Tage" ["code"]=> string(13) "delivery_time" } 

De cette façon, vous n'aurez plus besoin de connecter la base de données et d'optimiser les performances.

1
Marco

Afficher attribut sélectionné dans la liste d'options :

Changer dans: app/design/frontend/base/default/template/checkout/cart/item/default.phtml

$_customOptions = $_item->getProduct()->getTypeInstance(true)->getOrderOptions($_item->getProduct());

foreach($_customOptions['attributes_info'] as $_option){ echo option['label']; }
1
kileMANjaro

Une méthode possible consiste à utiliser un modèle singleton design. Voici comment obtenir un attribut.

$_item = $this->getItem();
$_product= Mage::getSingleton('catalog/product')->load($_item->getProductId());
echo $attrValue=$_product->getAttributeText('attrCode');
0
user1668260

Vous pouvez procéder comme suit pour afficher un attribut de produit personnalisé, dans ce cas un attribut de produit de garantie sur la page de visualisation du produit.

Étape 1: Créez un nouvel attribut "garantie" dans le dorsal Magento sous STORES->Attributes->Product. Définissez les valeurs sur «OUI» dans les options «Visible sur la page d'affichage du produit sur Front-end» et «Utilisé dans la liste de produits» sous Propriétés de la vitrine lors de la création de l'attribut pour l'afficher dans la liste des produits et les pages d'affichage.

Étape 2: Attribuez le nouvel attribut «garantie» à l’attribut par défaut défini dans STORES->Attributes->Attribute set.

Étape 3: / Maintenant, vous verrez l'attribut lors de la création des produits. Vous pouvez donner la valeur que vous voulez.

Étape 4: Modifiez le fichier catalog_product_view.xml et mettez à jour le contenu suivant. Vous pouvez ajouter cette section à l'intérieur du conteneur product.info.main. Vous pouvez ajouter votre bloc à côté du bloc product.info.overview. Donc, il sera affiché à côté de la description courte.

<block class="Magento\Catalog\Block\Product\View\Description" name="product.info.demo" template="product/view/demo.phtml" after="-">
<arguments>

<argument name="at_call" xsi:type="string">getWarranty</argument>

<argument name="at_code" xsi:type="string">warranty</argument>

<argument name="css_class" xsi:type="string">warranty </argument>

<argument name="at_label" xsi:type="string">warranty </argument>

<argument name="add_attribute" xsi:type="string">itemprop="warranty "</argument>

</arguments>

</block>

Étape 5: Créez un nouveau fichier warranty.phtml sous mageno2root/vendor/magento/module-catalog/view/frontend/templates/product/view avec le contenu ci-dessous.

<?php

$_helper = $this->helper('Magento\Catalog\Helper\Output');

$_product = $block->getProduct();

$_code = $block->getAtCode();

$_className = $block->getCssClass();

$_attributeLabel = $block->getAtLabel();

$_attributeType = $block->getAtType();

$_attributeAddAttribute = $block->getAddAttribute();



if ($_attributeLabel && $_attributeLabel == 'default') {

$_attributeLabel = $_product->getResource()->getAttribute($_code)->getFrontendLabel();

}

$_attributeValue =$_product->getResource()->getAttribute($_code)->getFrontend()->getValue($_product);

?>

<?php if ($_attributeValue): ?>

<div class="product attibute <?php echo $_className?>">

<?php if ($_attributeLabel != 'none'): ?><strong class="type"><?php echo $_attributeLabel?></strong><?php endif; ?>

<div class="value" <?php echo $_attributeAddAttribute;?>><?php echo $_attributeValue; ?></div>

</div>

<?php endif; ?>
0
Henry Roger

Après toutes les contributions, j'ai pris la première réponse et je me suis demandé autour de magento.

J'ai trouvé une solution que je n'avais pas à refaire le chargement (). J'ai édité le fichier config.xml sur le chemin suivant,

app/code/core/Mage/Sales/etc/config.xml

et sur les attributs d'article/produit, j'ai ajouté l'attribut personnalisé

<item>
    <product attributes>
        <sku/>
        <type_id/>
        <my_custom_attribute_id/>

puis sur mon fichier cart.phtml, j'ai pu obtenir l'attribut simplement en utilisant:

$_item->getProduct()->getmy_custom_attribute_id();

Je ne sais pas si c'est la meilleure ou la bonne chose à faire, mais cela a certainement résolu le problème.

À votre santé

0
Tiago H Moreira
<?php $_product= Mage::getSingleton('catalog/product')->load($_item->getProductId()) ?>
                <?php echo $_product->getResource()->getAttribute('attribute_code')->getFrontend()->getValue($_product); ?>
0
arvinda kumar