[QUOTE=Carino;54832]Bei mir wurde im IE auch alles verschoben, habe nun das Script in die _header.tpl gesetzt:
Der Inhalt der JS Datei ist das genannte Script. Nur leider funktioniert es so nicht. Im Quelltext finde ich die Datei, welche auch ausführbar ist.
Habe ich hier einen Denkfehler?
Danke für jeden Tipp,
Carino[/QUOTE]
Hi Carino,
diesen Weg hatte ich zunächst auch gewählt, hauptsächlich weil mir das große Script im Header zu unübersichtlich war… Es funktioniert nicht über eine externe Datei da innerhalb des Scripts Daten mit smarty eingefügt werden. Da OXID “nur” die Templates Parst und nicht die externen Dateien die mit eingebunden werden (CSS oder JS Dateien), werden die Daten nicht mit smarty eingefügt und stehen dem Script dann auch nicht zur Verfügung…
Bsp:
function toFloat(aString){
var dezimals="[{$currency->dec}]";
Mit leeren Variablen arbeitet ein Script natürlich nicht.
hallo!
ich wollte das nun auch bei mir einbauen (vorübergehende domain: www.computer-salzburg.de).
habe den ersten teil am ende meiner details.tpl eingefügt und den zweiten teil direkt danach.
ich hatte es bei 2 templates (basic + azure) versucht, aber leider tut sich rein gar nichts. der preis bleibt bei 0,00€ stehen. den haken in den grundeinstellungen hab ich gesetzt, mir werden auch die preise der auswahlliste angezeigt und im warenkorb problemlos berechnet.
Hallo,
ich verwende bei einem Kunden auch noch Version 4.4. Habe den Code eingefügt, und soweit funktioniert auch alles, nur leider wird der neue Preis nicht an den Warenkorb übergebe. Dort wird immer der Preis des ersten Eintrags aus dem Dropdown übernommen. Was mache ich hier noch falsch?
hat das Ganze schon jemand mit prozentualen Preisaufschlägen zum Laufen bekommen?
Mir fehlt gerade irgendwie der Durchblick hierfür. Eventuell komme ich Morgen auf nen grünen
Zweig im Winter Heute ist der Kopf schon zu…
<!-- PREISAKTUALISIERUNG START -->
<script type="text/javascript">
function toFloat(aString){
var dezimals="[{$currency->dec}]";
aString=aString.replace(/\[{$currency->thousand}]/g,"");
if (dezimals != '.'){
aString=aString.replace(/\[{$currency->dec}]/g,".");
}
return parseFloat(aString);
}
/*Array zum speichern des Preises sowie der Auf-/Abschläge*/
var prices=new Array();
/*Index 0 ist immer der Basispreis*/
prices[0]=toFloat("[{$product->getFPrice()}]");
/*Hilfsfunktion um das Ergebnis zu trimmen*/
function trim(str){
if (str){
str=str.replace(/^s*|s*$/g,"");
}
return str;
}
/*Funktion zum Runden und formatieren des Ergebnisses
je nach Einstellung von OXID*/
function formatCurrency(num){
var thousand="[{$currency->thousand}]";
var dezimals="[{$currency->dec}]";
var sign="[{$currency->sign}]";
var decimal=Math.pow(10,[{$currency->decimal}]);
num = num.toString();
if (isNaN(num)){
num="0";
}
numsign=(num==(num=Math.abs(num)));
num = Math.floor(num*decimal+0.5000000000);
cents = num%decimal;
num = Math.floor(num/decimal).toString();
if (cents<10){
cents = "0" + cents;
}
for (i=0;i<Math.round((num.length-(1+i))/3);i++){
j=num.length-(4*i+3);
if (num.length == 3)
thousand = "";
num=num.substring(0,j)+thousand+num.substring(j);
}
if (cents=="00"){
cents="00";
}
return trim((((numsign)?"":"00") + num + dezimals + cents)) + " " + sign;
}
/* Berechnet den Preis und aktualisiert das Anzeigefeld*/
function CalculateAndUpdate(ground, percent){
var price_field = document.getElementById("test_product_price");
var m = prices.length;
var cur_price=0;
var vground = document.getElementById("groundprice").innerHTML;
vground = parseFloat(vground.replace(/,/g,"."));
for (i=0;i <= m;i++){
if (prices[i]){
per_price = vground / 100 * percent;
cur_price = vground + per_price;
}
}
if (ground != false){
price_field.innerHTML = formatCurrency(vground);
}
else {
price_field.innerHTML=formatCurrency(cur_price);
}
}
/*Event-Handler für onChange bei der betreffenden Auswahlliste*/
function change_price(selectobj){
var opti_field=selectobj.selectedIndex;
var idx=selectobj.options[opti_field].getAttribute("rev");
var opti=selectobj.options[opti_field].getAttribute("rel");
var ground = false;
if (idx >=0){
idx++;
if (opti){
prices[idx] = parseFloat(opti.replace(/,/g,"."));
} else {
ground = true;
}
}
CalculateAndUpdate(ground, prices[idx]);
}
</script>
So funktioniert das Ganze. Muss natürlich noch in Quellcode ein DIV mit dem Grundpreis. Vielleicht hat jemand noch ne elegantere Lösung parat…
ich habe vor einer ganzen Weile die dynamische Preisänderung im Artikel eingebaut. Funktioniert 1a.
Danke schonmal dafür
Interessieren würde mich, ob so etwas ähnliches auch für den Warenkorb möglich ist. Hier aber nicht für die Varianten, sondern “einfach” für die Menge.
Wenn man also seine Artikel bereits im Warenkorb ist und die Anzahl ändern möchte geht das ja natürlich bereits im Standard Oxid Shop. Das ganze aber per javascript zu realisieren wäre schon noch etwas “moderner”
Oder ist dies für einen schnellen “Hack” zu aufwendig?
Hallo, ich nutze die aktuelle CE 5.5.7 und habe den Code von Seite 2 eingebaut. Grundsätzlich funktioniert es schon mal sehr gut, allerdings habe ich ein Problem mit der MwSt.:
In meinem Shop werden alle Preise, auch die Aufschläge in den Auswahllisten, netto eingegeben.
Das ist im Normalfall völlig problemlos, da die Preise alle automatisch inkl.MwSt. im Frontend ausgegeben werden, auch in den Auswahllisten erscheinen die Aufschläge inkl. MwSt.
Das Script zur dyn. Preisänderung rechnet allerdings nur genau die in den Auswahllisten eingetragenen Netto-Preise hinzu, ohne MwSt. und zeigt diese auch so an: Brutto-Artikelpreis + Netto-Aufschlag aus der Auswahlliste.
Wäre es denkbar, das Problem zu lösen, indem man irgendwo *1.19 anhängt? Wenn ja wo? Vielen Dank schonmal
Hallo nickname,
Du hast das Script von Seite 2 in der details.tpl bei der CE 4.5.7 und es funktioniert? Bei mir funktioniert es nämlich nicht, es passiert gar nichts. Ich habe beide Codebeispiele am Ende eingefügt. Ich sehe lediglich den Hinweis auf einen Syntaxfehler bei: [{if $currency->thousand != “”}]
Im Backend sind für die Artikel wie auch in den Auswahllisten netto Beträge eingetragen. Im Frontend werden die Artikel und Auswahllisten dann natürlich in brutto angezeigt. Aber leider passiert gar nichts beim ändern einer Auswahl.
Hat jemand eine Idee dazu?
Nachtrag:
Hatte den Code an einer falschen Stelle eingebunden! Jetzt funktioniert die Aktualisierung, aber auch ich habe das Problem, dass nur der Nettowert aus der Auswahlliste hinzugefügt wird. Wie nickname es im Post vor mir schon beschrieben hat:
[I]…Das Script zur dyn. Preisänderung rechnet allerdings nur genau die in den Auswahllisten eingetragenen Netto-Preise hinzu, ohne MwSt. und zeigt diese auch so an: Brutto-Artikelpreis + Netto-Aufschlag aus der Auswahlliste.
Wäre es denkbar, das Problem zu lösen, indem man irgendwo *1.19 anhängt? Wenn ja wo? Vielen Dank schonmal [/I]
Auch ich wäre für einen Tipp dankbar, wie man das noch ändern kann
Hallo Zusammen,
wir versuchen uns auch gerade am 4.6.2 und auch bei uns tut sich nix bei der Auswahlliste.
Hat die Preisaktualisierung schon jemand in das Azure tpl erfolgreich einbauen können ?
falls jmd. noch nach einer lösung sucht, ich habe eine auf basis des azure themes für oxid 4.6.1 entwickelt. man braucht nur eine javascript datei in details.tpl einbinden und fertig.
das skript arbeitet mit den preisen, die direkt auf dem template ausgegeben werden (egal ob netto oder brutto). bei interesse, bitte pn an mich schicken.
hatte gerade versucht, das Snippet ins Azure-Template zu packen, und musste feststellen, dass sich hier in der Zwischenzeit zu viel geändert hat, als dass es noch funktionieren könnte.
Aktuell hat man mMn ohne entsprechendes Modul nicht mal die Möglichkeit, den Aufpreis einer Auswahllisten-Auswahl in einem Template (alleinstehend) auszugeben. Dementsprechend auch keine Möglichkeit das rel="" mit dem Aufpreis zu füllen.
Kleiner Witz am Rande:
Ich habe eine Auswahlliste, die erste Auswahl heißt !P!, die zweite @@. Warum wird die Liste wird nicht angezeigt?
Stehe gerade auch vor dem gleichen Problem. Gibt es eine Lösungsmöglichkeit bei Azure und CE 4.6.5 den Artikelpreis dynamisch anhand der Auswahlliste anzupassen?