Avoir des problèmes d'extension de la vue de produit / de la classe AddtOcart (PHP et PHTM)

magento.stackexchange https://magento.stackexchange.com//questions/41022

  •  12-12-2019
  •  | 
  •  

Question

J'ai besoin de prérégloter la quantité de produit sur la page du produit.

NB1: Mes produits ont un nouvel attribut oui / non défini dans le backend appelé formule_price-actif. NB2: Pour le produit Formula_Price_Active, je passe des paramètres via URL de produit pour pré-configurer ma page de produit

J'ai ensuite étendu la classe View.php pour ajouter / surcharger des fonctions personnalisées:

    <?php
    class Mine_Quotemodule_Block_Catalog_Product_View extends Mage_Catalog_Block_Product_View
    {
        /**
         * Get default qty - either as preconfigured, or as 1.
         * Also restricts it by minimal qty.
         *
         * @param null|Mage_Catalog_Model_Product $product
         * @return int|float
         */
        public function getProductDefaultQty($product = null)
        {
            if (!$product) {
                $product = $this->getProduct();
            }

            $FPA_att_value = $product->getAttributeText('formula_price_active');

            if (isset($FPA_att_value) && (($FPA_att_value == 'yes') || ($FPA_att_value == 'oui')))
            {
                $params = Mage::app()->getRequest()->getParams();
                $urlParams = array();

                foreach ($params as $name=>$value)
                {
                    if ($name!="id") 
                    {
                    $urlParams[$name] = base64_decode($value);
                    }
                }

                if (isset($urlParams['Devis_Qty']))
                {
                    $qty = $urlParams['Devis_Qty'];
                }   
                else 
                {               
                    $qty = $this->getMinimalQty($product);
                    $config = $product->getPreconfiguredValues();
                    $configQty = $config->getQty();
                    if ($configQty > $qty) {
                        $qty = $configQty;
                    }
                }
            }
            else
            {
                $qty = $this->getMinimalQty($product);
                Mage::log('Qty'.$qty);

                $config = $product->getPreconfiguredValues();
                $configQty = $config->getQty();
                Mage::log('configQty '.$configQty);
                if ($configQty > $qty) {
                    $qty = $configQty;
                }

            }
            Mage::log('Final Qty'.$qty);
            return $qty;

        }

        public function testProductFP($product = null)
        {
             if (!$product) {
                $product = $this->getProduct();
            }

            $FPA_att_value = $product->getAttributeText('formula_price_active');

            if (isset($FPA_att_value) && (($FPA_att_value == 'yes') || ($FPA_att_value == 'oui')))
            {
                $params = Mage::app()->getRequest()->getParams();
                $urlParams = array();

                foreach ($params as $name=>$value)
                {
                    if ($name!="id") 
                    {
                    $urlParams[$name] = base64_decode($value);
                    }
                }

                if (isset($urlParams['Devis_Qty']))
                {
                    $result = true;
                }   
                else 
                {               
                    $result = false;
                }
            }
            else
            {
                $result = false;
            }

            return $result;
        }
...

et la vue.phtml Pour ajouter des supports personnalisés (mais de manière théoriquement n'a rien à voir avec le problème actuel):

…

                <div class="extra-info">
                    <?php echo $this->getReviewsSummaryHtml($_product, 'default', false)?>

                    <!-- Modifs Perso -->
                    <!--<?php echo $this->getChildHtml('product_type_availability'); ?>-->
                    <?php echo $this->getDimHtml() ?>
                    <!-- ******************** -->

                </div>
…

Cela semble bien fonctionner: - Cas 1: Si Formula_Price_Active est défini sur NO OU si elle est définie sur Oui, mais les paramètres nécessaires ne sont pas présents, la méthode de base getDefaultity est utilisée. -Case 2: Lorsque la formule_price_active est définie sur Oui et les paramètres sont OK, il définit la quantité souhaitée.

J'ai ensuite ajouté un addtocart.phtml personnalisé afin de désactiver la quantité d'entrée de quantité au casieral 2.

Mais, quand je l'ajoutez à ma licence.xml, le problème apparaît:

Dans le cas 2, il fonctionne, mais dans le cas 1, la quantité est réglée sur 0?

Qu'est-ce qui est étrange, c'est que la mise en page de Qté change tel que défini ...

Voici mon licissant.xml

  <?xml version="1.0"?>
    <layout version="0.1.0">
        <default>
            <reference name="content">
            </reference>
            <reference name="head">
                <action method="addItem"><type>skin_css</type><name>css/quote_form.css</name></action>
            </reference>
        </default>

        <routeurfrontend_index_index>
            <reference name="content">
                <block type="quotemodule/quoteformblock"  name="quoteform_quoteformblock"
                              template="quotemodule/quoteform.phtml" />
            </reference>
        </routeurfrontend_index_index>

        <catalog_product_view>
            <reference name="product.info">
                <action method="setTemplate">
                    <template>quotemodule/catalog/product/view.phtml</template>
                </action>
            </reference>

            <reference name="product.info.addtocart">
                <action method="setTemplate">
                    <template>quotemodule/catalog/product/view/addtocart.phtml</template>
                </action>
            </reference>
        </catalog_product_view>

    </layout>

Merci pour votre aide,

Était-ce utile?

La solution

C'était une erreur stupide ... désolé ...

i basé mon addtocart.phtml sur le mauvais modèle (base / valeur par défaut au lieu de RWD / par défaut).La base / par défaut ne remplace pas la valeur Qté par 1 si GetProductDefaultqty renvoie Null alors que le RWD / Par défaut fait:

base / défaut addtocart.phtml

<input type="text" name="qty" id="qty" maxlength="12" value="<?php echo $this->getProductDefaultQty() * 1 ?>" title="<?php echo $this->__('Qty') ?>" class="input-text qty" />

rwd / défaut addtocart.phtml

<input type="text" pattern="\d*" name="qty" id="qty" maxlength="12" value="<?php echo max($this->getProductDefaultQty() * 1, 1) ?>" title="<?php echo $this->__('Qty') ?>" class="input-text qty" />

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