Dynamische Preisänderung bei Varianten - welche Funktion macht das?

Hallo,

in der CE gibt es ja schon eine Funktion, die bei Varianten eine dynamische Preisänderung ermöglicht wenn über die Auswahlboxen eine Variante mit anderem Preis ausgewählt wird.

Ich habe jetzt bei einem Shop die Templates etwas umgestrickt, um nicht mehr die zusätzlichen Boxen bei Varianten zu bekommen und anstelle dessen die Variantenauswahl mit in den Details zu haben. Zuerst hatte ich die nur die bei Varianten auftauchende “ab … Euro”-Variante verwendet und die dynamische Variante per display:none verschwinden lassen. Jetzt soll es aber doch die dynamische Preisanzeige sein.
Generell erst mal kein Problem, da sich ja alles schon fast da befindet wo es hin soll.

http://www.ant-design.de/shop/Angebote/Angebote-Umstandsmode/Testjoppe.html

Aber … ich würde jetzt gerne noch den dynamisch änderbaren Preis aus dieser div-Schachtelung von variantslist, md_variant_box und product thinest herausbekommen und dort hinsetzen wo der andere, feste Preis im Moment sitzt. [B](den kleineren Preis, der jetzt unter den Varianten-Selectboxen sitzt hätte ich gerne dort wo jetzt der große “ab”-Preis sitzt … und auch funktionsfähig )[/B]
Das gelingt mir bloß im Moment nicht. Sobald ich den entsprechenden Abschnitt aus der inc/product.tpl in die detail.tpl kopiere, bekomme ich ihn zwar dort angezeigt wo ich will, aber der Preis reagiert nicht mehr auf die Änderungen der Selectbox. Meiner Meinung nach ist folgender Code in der inc/product.tpl zuständig:

    [{capture name=product_price}]
    [{oxhasrights ident="SHOWARTICLEPRICE"}]
        <div class="price">
            [{if $product->getFTPrice() && $size=='big' }]
                <b class="old">[{ oxmultilang ident="DETAILS_REDUCEDFROM" }] <del>[{ $product->getFTPrice()}] [{ $currency->sign}]</del></b>
                <span class="desc">[{ oxmultilang ident="DETAILS_REDUCEDTEXT" }]</span><br />
                <sub class="only">[{ oxmultilang ident="DETAILS_NOWONLY" }]</sub>
            [{/if}]
            [{if $product->getFPrice()}]
              <big>[{ $product->getFPrice() }] [{ $currency->sign}]</big><sup class="dinfo"><a href="#delivery_link" rel="nofollow">*</a></sup>
            [{else}]
              <big> </big>
            [{/if}]
        </div>
    [{/oxhasrights}]
    [{/capture}]
	
    [{if $size=='big'}][{$smarty.capture.product_price}][{/if}]

Ich denke mal, dass das entsprechende JavaScript da auf irgendwelche IDs oder ähnliches angesetzt ist, die nun nicht mehr da sind.
Kann mir jemand sagen wo ich die für die Preisänderung zuständige JS-Funktion finde?
Oder liegt es doch an etwas anderem?

Hm, niemand der mir sagen kann welche Funktion für die dynamische Preisänderung verantwortlich ist?
Also, um noch mal bildlich zu zeigen was ich will …
So funktioniert es bereits standardmäßig:

Jetzt möchte ich aber gerne den dynamisch änderbaren Preis woanders haben:

Im Moment liegt der änderbare Preis in einer div-Verschachtelung (etwas verkürzt etwa so)

<div class="variantslist">
  <div id="md_variant_box">
    <div class="product thinest lastinlist">
      <div class="price">hier sitzt der Preis</div>
   </div>
  </div>
</div>

Und sobald ich versuche den Preis aus dieser Verschachtelung herauszuholen fiunktioniert die dynamische Änderung nicht mehr.
In einem anderen Thread zu diesem Thema schrieb jemand, dass die dynamische Preisänderung von der Funktion mdAttachAll kommen soll. Aber ich kann irgendwie beim besten Willen nicht erkennen, wie das der Fall sein soll.

        mdAttachAll: function()
        {
            if (!mdVariantSelectIds) {
                mdVariantSelectIds = Array();
            }

            if (!mdRealVariants) {
                mdRealVariants = Array();
            }

            for (var i = 0; i < mdVariantSelectIds.length; i++) {
                if (mdVariantSelectIds[i]) {
                    for (var j=0; j < mdVariantSelectIds[i].length; j++) {
                        //attach JS handlers
                        var mdSelect = document.getElementById(mdVariantSelectIds[i][j]);
                        if (mdSelect) {
                            mdSelect.onchange = oxid.mdVariants.resetMdVariantSelection;
                        }
                    }
                }
            }
        }

Ich kann da nichts erkennen was darauf hindeuten würde.
Da die Seite für die Preisänderung nicht neu geladen wird muß es 'ne JS-Funktion sein. Aber wo liegt die? Und so umfangreich ist ja die oxid.js auch, dass man da den Überblick verlieren würde.

Also, in details.tpl wird inc/variant_selector.tpl eingebunden. Dort werden erstmal alle Varianten dargestellt und mit style=“display: none” versteckt. Dann wird hiermit

  [{oxvariantselect value=$product->getMdVariants() separator=" " artid=$product->getId()}]

das Smarty-Plugin core/smarty/plugins/function.oxvariantselect.php aufgerufen, welches die Select-Boxen für alle Varianten, und JS-Arrays mit den Namen der Selects und DIVs der Varianten erstellt.

Danach werden hiermit:


  [{oxscript add="oxid.mdVariants.mdAttachAll();"}]
  [{oxscript add="oxid.mdVariants.showMdRealVariant();"}]

noch zwei Scriptaufrufe im Footer platziert, mdAttachAll hängt die Funktion “resetMdVariantSelection” an den onchange-Event der Select-Boxen, showMdRealVariant lädt die erste Variante.

Wenn jetzt an den Select-Boxen eine Änderung passiert, wird dadurch die Funktion resetMdVariantSelection aufgerufen (onchange-Event), diese versteckt alle Select-Listen und zeigt dann die neuen Select-Listen an. Dann wird showMdRealVariant aufgerufen, welches die aktuell gewählte Variante in diesen Container

<div id="md_variant_box"></div>

schreibt.

Ah … mist. Das hab ich befürchtet. Deshalb funktioniert es also nicht wenn ich den Preis da herausbaue und woanders hinsetze. Es wird also immer der komplette Inhalt für die Varianten ausgetauscht und an einzelne Geschichten, wie hier eben den Preis, komme ich so gar nicht heran.

Danke erstmal für die Antwort.

Ja genau, aber wenn du die “normale” Ansicht nicht benutzt kannst du evtl. das Template ändern so dass statt der kompletten Variante nur der Preis ausgegeben wird.

Ah ja … ok das muß ich mal schauen wie ich das ohne “große Zerstörungen” umgebaut bekomme.
Danke für die Tipps.