Hallo,
durch Auswahllisten wird der Preis nicht direkt in der Produktbeschreibung geändert und nur im Warenkorb, wenn die folgende Einstellung gemacht wurde:
Stammdaten -> Grundeinstellungen -> Perform. -> Erweiterte Performance-Einstellungen -> Preisänderungen durch Auswahllisten unterstützen
Mit den folgenden Anpassungen sollte auch der Preis in der Seite mit der Produktbeschreibung geändert werden:
1.) Unter “/out/azure/src/js/widgets” die Datei “oxdynamicprice.js” ablegen
/*
* Please retain this copyright header in all versions of the software
*
* Author Thomas Röstel | 2012 | Version 1.0
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see {http://www.gnu.org/licenses/}.
*/
( function ( $ ) {
oxDynamicPrice = {
_create: function(){
var productPriceElement = $('#productPrice span:first');
var productPriceString = productPriceElement.text();
var productPriceOriginal = oxDynamicPrice.extractPrice(productPriceString);
this.head = this.element;
this.oxDropDown = this.head.parent( 'div' );
this.valueList = this.oxDropDown.children( 'ul' );
var surcharges = oxDynamicPrice.initSurcharges();
oxDynamicPrice.updatePrice(productPriceOriginal,surcharges);
oxDynamicPrice.bindSelectionList(productPriceOriginal,productPriceElement);
},
initSurcharges : function()
{
var selectedValues = $('#productSelections ul li a[class="selected"]');
var surcharges = [];
$.each($(selectedValues), function(i, field) {
var aufschlag = field.innerHTML.replace('.', '').replace(',', '.');
var p = new RegExp('.*([-+]\\d+.\\d+)',["i"]);
aufschlag = p.exec(aufschlag);
if(aufschlag) {
aufschlag = parseFloat(aufschlag[1]);
} else {
aufschlag = 0;
}
surcharges[i] = aufschlag;
});
return surcharges;
},
extractPrice : function(price)
{
return parseFloat(price.replace(/\./g, '').replace(/,/g,'.').replace(/[^\d\.]/g,''), 10);
},
updatePrice : function(originalPrice, surcharges)
{
if(surcharges.length>0) {
var productPriceAdjusted = originalPrice;
for(var i = 0; i < surcharges.length; i++) {
productPriceAdjusted += surcharges[i];
};
$('#productPrice span:first').text(productPriceAdjusted.toFixed(2).replace('.', ','));
}
},
bindSelectionList : function(originalPrice)
{
$.each($('#productSelections ul li a'), function() {
$(this).bind('click', function() {
var surcharges = oxDynamicPrice.initSurcharges();
var aufschlag = $(this).text().replace('.', '').replace(',', '.');
var i = $(this).parent().parent().prev().attr('name').replace(/[^\d\.]/g,'');
var p = new RegExp('.*([-+]\\d+.\\d+)',["i"]);
aufschlag = p.exec(aufschlag);
if(aufschlag) {
aufschlag = parseFloat(aufschlag[1]);
} else {
aufschlag = 0;
}
surcharges[i] = aufschlag;
oxDynamicPrice.updatePrice(originalPrice,surcharges);
});
});
}
}
$.widget("ui.oxDynamicPrice", oxDynamicPrice );
})( jQuery );
2.) Am Anfang der Datei "/application/views/azure/tpl/page/details/inc/productmain.tpl folgende Zeilen einfügen
[{oxscript include="js/widgets/oxdynamicprice.js"}]
[{oxscript add="$( '#productSelections' ).oxDynamicPrice();"}]
Allerdings wird dann hinter dem Preis “NaN” angezeigt, was auf einen fehlerhaften Wert hindeutet. Der Fehler entsteht vermutlich in Zeil 75 von “oxdynamicprice.js”. Dies wurde bereits geprüft, indem Zeile 75 in $(’#productPrice span:first’).text(‘Test’); geändert wurde.
Das ganze wurde getestet mit Oxid CE 4.9.9
Kann mir an dieser Stelle bitte jemand weiterhelfen? Was ist in dem Script falsch damit hinter dem Preis “NaN” angezeigt wird und nicht der gesamte Betrag durch einen Wert ersetzt wird?
Schon mal vielen Dank und allen ein gutes Wochenende
P S
Das Original zum Skript ist zu finden unter:
https://github.com/thomasroestel/Oxid_DynamicPrice
Getestet unter Oxid CE/PE 4.6.x