Varianten - Preisupdate

…wie ihr seht bin ich grad hart dran am thema varianten.

ich möchte per JS den preis updaten sobald die variante geändert wird.

mit onchange rufe ich mein JS auf. Doch wie greife ich auf den entsprechenden preis zu?

mit

this.selectedIndex

könnte ich die entsprechende variante ansprechen, doch ich weiß nicht wie ich mit den oxid variablen auf die variante zugreifen kann:

[{ $variant->getFPrice() }]

der ausdruck liefert den letzten wert. wie spreche ich nun die anderen an? Ich kenne die notation nicht, wie ich nun die preise im “array” (wenns eines ist) ansprechen kann.

geht das über weiter pfeilnotationen? Hoff mich kann jmd aufklären.

Vielen Dank. Gruß

Ok, ich versuch mich ran zu tasten:

Mein Ziel per Index den entsprechenden preis auszugeben:

per [{debug}] kann ich sehen, welche variablen und welche typen mir zur verfügung stehen.

Also: variants ist ein object vom Typ oxArticleList

jedoch wird im zusammenhang mit den varianten imm die variable $variant verwendet.
Hier müssten doch alle Daten drin sein, oder?

müsste also nur auf das array dieser variable zugreifen. ist das korrekt?
mein hauptproblem ist, dass ich nicht weiß, wie ich auf die arrays zu greifen kann.

mir scheint nun, dass variant gar kein array ist, sondern nur immer der letzte datensatz? oder falsch?

        [{foreach from=$product->getVariantList() item=variant}]
	
          <option value="[{$variant->sOXID}]">[{ $variant->oxarticles__oxvarselect->value }] [{oxhasrights ident="SHOWARTICLEPRICE"}]   [{ $variant->getFPrice() }] [{ $currency->sign|strip_tags}]* [{/oxhasrights}]</option>
        [{/foreach}]

Wenn variant nun kein array ist und ich für den preis eine zusätzliche variable machen möchte, da ich sonst alle variants-variablen im template ändern müsste.

…werde parallel weiter forschen, aber ist echt frustrierend. hoffe auf einen tipp aus euren reihen :wink:

–> habs dummerweise mit php versucht. nun folgt die JS variante. arrrgh

Aber jetzt komme ich der sache schon näher. nur ein problem mit der übergabe des variantenpreises habe ich noch. hier kommt in der funktion nichts an.

Warum wird der Funktion nichts übergeben?

Hier der gesamte abschnitt:

<script type="text/javascript">
var hilf =0;
variants = new Array ();

function varianten (varpreis){
alert (varpreis);
variants[hilf] = varpreis;
hilf=hilf+1;

}
</script>

 [{foreach from=$product->getVariantList() item=variant}]

<script type="text/javascript">
[B] varianten ([{ $variant->getFPrice() }]);[/B]
</script>
		
<option value="[{$variant->sOXID}]">123[{ $variant->oxarticles__oxvarselect->value }] [{oxhasrights ident="SHOWARTICLEPRICE"}]   [{ $variant->getFPrice() }] [{ $currency->sign|strip_tags}]* [{/oxhasrights}]</option>
[{/foreach}]

Nur $variant->getFPrice() zu übergeben geht auch nicht.

Ich bin mal wieder die Frustration pur :wink:

$variant->getFPrice()

Ich meine bei FPrice steht das F für formated.

varianten ([{ $variant->getFPrice() }]);

Hier übergibst Du einer Funktion wahrscheinlich einen formatierten Preis.

varianten (12,34);

[B]12Komma34[/B] ist keine Zahl.
Wenn Du Zahlen übergeben willst, dann 12.34.
Bei Texten Hochkommas setzen ‘12,34’.

…und bitte keinen wirren Smarty Code mehr.
Du siehst ja, dass die genauen Werte der Variablen von Interesse sind.
Also solche Codeausschnitte besser in HTML. Ist auch für die die helfen wollen einfacher das mal schnell zu testen.

Schau mal hier:
http://de.selfhtml.org/javascript/objekte/options.htm#value

Vielleicht kannst Du das auch so machen.
Funktion CheckAuswahl ist recht interessant.

Hallo Markus,

vielen Dank für Dein feedback. hab erst jetzt die zeit gefunden, mich mit deinem post auseinander zu setzen.

also mit dem selfhtml beispiel kann ich den value des entsprechenden index abfragen.
ich werd das am wochenende mal wieder testen. leider komme ich vorher nicht mehr dazu.

werde euch auf dem laufenden halten. irgendwann schaffe ich den preis zu updaten :wink:

sicherlich werde ich aber wieder vorher ein paar fragen haben :smiley:

Ne Idee:

1.) könnte ja das [B]options[i].value[/B] mit [B]this.selectedIndex[/B] kombinieren.
Dann sollte das doch funktionieren. In der theorie…

2.) Des Weitern mein Problem in einem anderen thread “bitte wählen…” kann ich per onchange per [B]= null[/B] wieder löschen. hab ich durch deinen link eben gefunden. Danke!!

Hi zusammen,

also ich hab das folgend gelöst:

In der detail.tpl nach <div class=“actions”>…</div>

<script type="text/javascript">
   var default_price = 0;
   function CheckAuswahl () {		
     if(default_price == 0) default_price = document.getElementById('test_product_price').innerHTML;
      var price = document.getElementById("test_varSelect_[{$testid}]").options[document.getElementById("test_varSelect_[{$testid}]").options.selectedIndex].text.substr(3);
    document.getElementById('test_product_price').innerHTML = (price != '') ? price : default_price;
    }
</script>

eingefügt und

[{ if !$product->isParentNotBuyable()}]
          <option value="[{$product->sOXID}]">[{ $product->oxarticles__oxvarselect->value }] [{oxhasrights ident="SHOWARTICLEPRICE"}] [{ $product->getFPrice() }] [{ $currency->sign|strip_tags}]* [{/oxhasrights}]</option>
      [{/if}]

auskommentiert.

Funktion wird hier aufgerufen:


<label>[{ $product->oxarticles__oxvarname->value }] :</label>
      <select type="hidden" id="test_varSelect_[{$testid}]" name="aid" onchange="CheckAuswahl()">
      <option value="0">...</option>

<option value=“0”>…</option> habe ich hinzugefügt…

Viel Spaß beim ausprobieren :slight_smile:

hallo netformic,

hab grad wenig zeit. werde mich baldmöglichst um deinen ansatz kümmern.
mein szenario ist für die list.tpl. sollte aber gleich funktionieren.

muss erst mal ausloten, wo deine function aufgerufen werden soll…

danke für deine hilfe!!! hat mir sicher geholfen.

Wenn du das lösen könntest würde mich das ebenfalls brennend interessieren :slight_smile:

Für mich wäre das sowohl für die list.tpl als auch für die detail.tpl interessant.

@netformic:

Könntest du mir erklären wie bzw. wo du die Funktion dann aufrufst?

Mein Szenario: Listenübersicht (List.tpl)

Hab die Lösung gefunden. Man muss einfach der Function die aktuelle $testid übergeben.
Arbeitet dann immer mit dieser übergebenen variabel und nicht mit der $testid selbst, da diese den letzten wert intus hat.

wenns hierzu noch probs gibt, melden :wink:

Ich hab nun noch das Problem, dass ich den Preis noch korrekt darstellen muss, denn die text.substr(3) taugt für mich nicht wirklich.

Hab folgende Lösung genommen. geht aber nur weil ich keine artikel über 100 EUR habe.
zuerst per length prüfen wie lang der inhalt der variabel ist, anschließend per substr entsprechend “zuschneiden”.
Gruß

Genau diese Funktion suche ich für die Auswahllisten. Ich bekomme es aber einfach nicht hin. Bitte gebt mir einen Tipp, was zu tun ist. Danke.

Gruss René