2011-05-13 2 views
4

Je souhaite implémenter une telle fonctionnalité si nous avons une option personnalisée avec la valeur de prix 10 et son type de prix est le pourcentage et son prix de base est 0 comment puis-je l'implémenter.Je veux modifier la fonctionnalité de pourcentage de l'option personnalisée

Je veux d'abord de mon premier client choisit la taille et le prix est ajouté en fonction de la taille lorsque le client de choisir la couleur de la couleur déroulant la valeur de pourcentage doit être calculé à partir de la première valeur de la liste déroulante sélectionnez

par exemple

si le client choisit

une option A avec le prix de 20 $ 20 $ est ajouté à son prix et je dois calculer le prix par la baisse calculatiog seond baisse la valeur et le prix de la première choisie dropdowm.

Répondre

5

D'abord, laissez-moi essayer de reformuler votre question:

Dans chaque option personnalisée p, comment calculez-vous le pourcentage basé sur les prix des étapes précédentes plutôt que sur le prix de base du produit? En d'autres termes, comment Magento accumule-t-il les prix des options personnalisées plutôt que de les additionner?

Exemple produit:

  1. Prix de base: $ 0
  2. Taille A: + 20 $
  3. Couleur X: + 10%

calcul de Magento: 10% du prix de base 0 = 0. Prix total 20.

Calcul souhaité: 10% du prix de base ET du prix de la taille = 10% de 20. Prix total 22.

Solution

Pour ce faire, vous devez remplacer la logique de tarification de l'option personnalisée Magento. Les modifications doivent être effectuées dans le modèle de prix (pour les calculs côté serveur) ainsi que dans le code de bloc et de modèle (pour les calculs Javascript côté client).

Dans le modèle de prix Mage_Catalog_Model_Product_Type_Price, modifiez le calcul dans la fonction _applyOptionsPrice:

//$finalPrice += $group->getOptionPrice($quoteItemOption->getValue(), $basePrice); 
$finalPrice += $group->getOptionPrice($quoteItemOption->getValue(), $finalPrice); 

En Mage_Catalog_Block_Product_View_Options, la fonction getJsonConfig calcule le pourcentage du prix de base avant de le retourner au modèle. Modifier pour obtenir la valeur de pourcentage réel retour au modèle:

//$_tmpPriceValues[$value->getId()] = Mage::helper('core')->currency($value->getPrice(true), false, false); 
// Add fixed price or percentage (don't calculate percentage yet, done by JS live instead) 
$_tmpPriceValues[$value->getId()]['pricing_value'] = ($value->getPriceType() != 'percent') ? Mage::helper('core')->currency($value->getPrice(true), false, false) : $value->getPrice(); 
$_tmpPriceValues[$value->getId()]['is_percentage'] = ($value->getPriceType() == 'percent'); 

maintenant modifier le Javascript dans template/catalog/product/view/options.phtml pour calculer le pourcentage de la volée, cumulativement.Dans la classe Javascript Product.Options, ajouter une fonction pour le calcul:

getPriceToAdd : function(optionvalue, oldprice) { 
    var value = parseFloat(optionvalue['pricing_value']); 
    if (optionvalue['is_percentage']) { 
     return Math.round(value*oldprice)/100; 
    } else { 
     return value; 
    } 
} 

et changer la fonction reloadPrice d'utiliser le nouveau calcul:

//price += parseFloat(config[optionId][element.getValue()]); 
price += opConfig.getPriceToAdd(config[optionId][element.getValue()], price); 
... 
//price += parseFloat(this.config[optionId]); 
price += opConfig.getPriceToAdd(this.config[optionId], price); 
... 
//price += parseFloat(this.config[optionId][selectOption.value]); 
price += opConfig.getPriceToAdd(this.config[optionId][selectOption.value], price); 
... 
//price += parseFloat(this.config[optionId]); 
price += opConfig.getPriceToAdd(this.config[optionId], price); 

Comme d'habitude, ne modifiez pas les fichiers core directement. Utilisez des réécritures locales. S'il vous plaît noter votre nouveau modèle de prix doit être déclaré dans la configuration pour chaque type de produit concerné:

<config> 
    <global> 
    <catalog> 
     <product> 
     <type> 
      <simple> 
      <price_model>mymodule/product_type_simple_price</price_model> 
      </simple> 
      ... 
     </type> 
     </product> 
    </catalog> 
    </global> 
</config> 
1

Avec la mise à jour Magento, la ligne modifiée _applyOptionsPrice a été mis à jour:

de: $ finalPrice + = $ group-> getOptionPrice ($ quoteItemOption-> getValue(), $ finalPrice);

à: $ finalPrix + = $ group-> getOptionPrice ($ confItemOption-> getValue(), $ finalPrice);

Questions connexes