Bei Klick > zur Variante

Hallo Leute,

hoffe ich bekomme wieder so eine hilfreiche Antwort wie in meinem letzten Thema. :slight_smile: Es geht darum (die Frage kam leider schonmal von mir, war da noch etwas grün hinter den Ohren ;)). wie ich Varianten verlinken kann. Ich zeig es gleich wieder mit Bildern.

Ich will das wie in der neuesten Version von Oxid (Tpl Azure), sobald man sich eine Variante wählt (klickt) diese nicht nur in den Warenkorb legt (sowie jetzt) sondern man direkt weitergeleitet wird zu dieser Variante. Zusätzlich sollten noch in der Variante die anderen Varianten angezeigt werden. Suche jetzt schon eine Weile. Habe viele Schnipsel, jedoch bin ich bis jetzt noch nicht so klar gekommen damit. :frowning:

Danke euch!

Das geht nur mit JavaScript. onChange ist das Event. Hier kannst Du dann eine beliebige JS-Aktion ausführen oder eben auch eine Funktion aufrufen. Die URL des Artikels müßtest Du im Template ja ansprechen können - habs nicht genau im Kopf. Dann onchange=“window.location = [ARTIKELURL]” indie option-Tags rein und es sollte funktionieren.

Gruß, Kai

Danke für die Antwort. Hilft schonmal viel in sofern das ich leider kein Java kann. :frowning: Von der onChange Aktion habe ich gelesen bzw. geprüft. (Man hat ja wenn man es so nimmt die gleiche Version im Adminbereich beim Stamm ganz unten > wenn man Varianten angelegt hat) sozusagen in den admin templates variantlist.tpl. Leider habe ich aber keine Ahnung wie ich das umschreiben soll für meine tpl. Habe zwar schon probiert aber nichts klappt. :frowning:

Ich würd`s Dir ja wieder schreiben, habe aber i.M. ein Zeitproblem. Zeig doch mal, was Du schon gemacht hast. Schaue es mir in Kürze an.

ungetestet und ohne Gewähr:

[B]DIESER CODE FUNKTIONIERT NICHT - weiter unten gibt es ein getestetes Snippet, das funktioniert[/B]

[{foreach from=$oView->getVariantListExceptCurrent() name=variants item=variant}]
    <option value="[{$variant->getId()}]" onChange="window.location.href = '[{$variant->getLink()}]'">[{ $variant->oxarticles__oxvarselect->value }] [{oxhasrights ident="SHOWARTICLEPRICE"}] [{ $variant->getFPrice() }] [{ $currency->sign|strip_tags}]* [{/oxhasrights}]</option>
[{/foreach}]

Das musst du im Zweifel noch an Deine foreach-Schleife anpassen, die in DEINEM Template steht. Das ist jetzt aus einem Standard-Template oxid 4.4.8 …

Hallo rubbercat,

danke schonmal für deine Antwort hast mir letztes mal sehr geholfen. :slight_smile:

Leider kann ich dir keinen Code posten da ich wie gesagt nur versucht habe. Leider ist dabei nichts rausgekommen was helfen könnte. :frowning:

Das ist was in der Variantlist steht (adminbereich)

[{if $oxid != "-1"}]
<script type="text/javascript">
<!--
function JumpVariant(obj)
{
    var oTransfer = document.getElementById("transfer");
    oTransfer.oxid.value=obj.value;
    oTransfer.cl.value='article_main';

    //forcing edit frame to reload after submit
    top.forceReloadingEditFrame();

    var oSearch = parent.list.document.getElementById("search");
    oSearch.oxid.value=obj.value;
    oSearch.submit();
}
//-->
</script>
<table cellspacing="2" cellpadding="2" border="0">
  <tr>
    <td>
      <select name="art_variants" onChange="Javascript:JumpVariant(this);" class="editinput">
        [{foreach from=$thisvariantlist key=num item=variant}]
          <option value="[{$variant[0]}]" [{if $oxid eq $variant[0]}]selected[{/if}]>[{$variant[1]}]</option>
        [{/foreach}]
      </select>
    </td>
  </tr>
</table>
[{/if}]

Leider sind meine Programmierkenntnisse in der Richtung wenig, das ich nicht weis wie ich die foreach ändern soll. Vorher geposteter Code funktioniert leider nicht. :frowning: Naja, bin dann mal weiter am rumbasteln, macht irgendwie Spaß (wenn man dann irgendwie weis wie es geht :slight_smile:

Ach ja Oxid Version 4.2.0 :o

Sooo …


    [{ if $oView->getVariantList()}]
    <div id="variant_selectbox" class="clear">
        [{if $oView->drawParentUrl()}]
            <a id="test_backToParent" href="[{$oView->getParentUrl()}]">[{oxmultilang ident="INC_PRODUCT_VARIANTS_BACKTOMAINPRODUCT"|oxmultilangassign|cat:" "|cat:$oView->getParentName() }]</a>
        [{/if}]

        <select id="test_selectvariants_[{$testid}]">
        [{if !$oView->drawParentUrl()}]
            <option value="parent">HAUPTARTIKEL</option>
        [{else}]
            <option value="parent">WEITERE VARIANTEN</option>
        [{/if}]
        [{foreach from=$oView->getVariantList() item=variant}]
            <option value="[{$variant->getId()}]" onClick="window.location.href='[{$variant->getLink()}]'">[{ $variant->oxarticles__oxvarselect->value }] [{oxhasrights ident="SHOWARTICLEPRICE"}] [{ $variant->getFPrice() }] [{ $currency->sign|strip_tags}]* [{/oxhasrights}]</option>
        [{/foreach}]
        </select>
    </div>
    [{/if}]

Das ist zwar immer noch ein bisschen quick and dirty, aber es ist getestet und funktioniert in einer 4.2er Oxid. Sollte aber auch in anderen Versionen laufen. Die Handhabung von [{if !$oView->drawParentUrl()}] ist mal jedem selber überlassen, aber damit das alles funktioniert, muss eben ein zusätzlicher Eintrag in die Liste. Übersetzung per oxmultilang und so weiter bekommt Ihr dann ja selber hin, denke ich …

Viel Spaß damit …

Hallo,

Ich danke dir vielmals für den netten Code! :slight_smile: Glaube hätte es allein wirklich nicht geschafft. Jetzt muss ich nur noch zusehen wie ich in den Varianten die Varianten Auswahl anzeigen lassen kann.

MFG

Ich nochmal.

Also der Code funktioniert super, bis auf eine Sache. Bin ich in der Variante und habe die weitere Varianten Auswahl dann kann ich die Variante auf der ich gerade bin nicht mehr in den Warenkorb legen. :frowning:

Codeschnipsel steht weiter unten:

    [{ if $product->getVariantList() && ($size!='thinest') }]


      [{ if $product->hasMdVariants() }]
      <select id="mdVariant_[{$testid}]" name="mdVariant_[{$testid}]">
        [{ if !$product->isParentNotBuyable()}]
          <option value="[{$product->getId()}]">[{ $product->oxarticles__oxvarselect->value }] [{oxhasrights ident="SHOWARTICLEPRICE"}] [{ $product->getFPrice() }] [{ $currency->sign|strip_tags}]*[{/oxhasrights}]</option>
        [{/if}]

        [{foreach from=$product->getMdSubvariants() item=mdVariant}]
          <option value="[{$mdVariant->getLink()}]">[{ $mdVariant->getName() }] [{oxhasrights ident="SHOWARTICLEPRICE"}] [{ $mdVariant->getFPrice()|strip_tags }]* [{/oxhasrights}]</option>
        [{/foreach}]
      </select>
      [{else}]
      [{/if}]

    [{if $showMainLink}]
        [{assign var='_productLink' value=$product->getMainLink()}]
    [{else}]
        [{assign var='_productLink' value=$product->getLink()}]
    [{/if}]

    [{elseif $product->getDispSelList()}]
      [{foreach key=iSel from=$product->selectlist item=oList}]
        <label>[{ $oList.name }] :</label>
        <select id="test_sellist_[{$testid}]_[{$iSel}]" name="sel[[{$iSel}]]" onchange="oxid.sellist.set(this.name,this.value);">
          [{foreach key=iSelIdx from=$oList item=oSelItem}]
            [{ if $oSelItem->name }]
              <option value="[{$iSelIdx}]"[{if $oSelItem->selected }]SELECTED[{/if }]>[{ $oSelItem->name }]</option>
            [{/if}]
          [{/foreach}]
        </select>
      [{/foreach}]
    [{/if}]


    [{ if $oView->getVariantList()}]
    <div id="variant_selectbox" class="clear">
    <label>[{ $product->oxarticles__oxvarname->value }]:</label>
        <select  id="test_varSelect_[{$testid}]" name="aid">
        [{if !$oView->drawParentUrl()}]
            <option value="parent">HAUPTARTIKEL</option>
        [{else}]
            <option value="parent">Weitere Varianten</option>
        [{/if}]
        [{foreach from=$oView->getVariantList() item=variant}]
            <option value="[{$variant->getId()}]" onClick="window.location.href='[{$variant->getLink()}]'">[{ $variant->oxarticles__oxvarselect->value }]</option>
        [{/foreach}]
        </select>
    </div>
    [{/if}]


    </div>

    [{if $size!='big'}] [{$smarty.capture.product_price}] [{/if}]

    [{oxhasrights ident="TOBASKET"}]
        [{ if !$product->isNotBuyable() && !$product->hasMdVariants() }]



    [{oxhasrights ident="TOBASKET"}]

        [{ if $product->isBuyable() }]
         <div class="tocart"><input id="test_toBasket" type="submit" value="[{if $size=='small'}][{oxmultilang ident="INC_PRODUCTITEM_ADDTOCARD3" }][{else}][{oxmultilang ident="INC_PRODUCTITEM_ADDTOCARD2"}][{/if}]" onclick="oxid.popup.load();"></div>

               <div class="amount">
                <label>[{ oxmultilang ident="DETAILS_QUANTITY" }]</label><input id="test_AmountToBasket" type="text" name="am" value="1" size="3">
               </div>


        [{/if}]
    [{/oxhasrights}]

Füge ich den Code an eine andere Stelle ein dann kann ich die Variante in den Warenkorb legen die ich vorher ausgewählt habe, jedoch habe ich dann keine weitere Varianten Auswahl. :frowning:

Code:

    [{ if $product->getVariantList() && ($size!='thinest') }]


      [{ if $product->hasMdVariants() }]
      <select id="mdVariant_[{$testid}]" name="mdVariant_[{$testid}]">
        [{ if !$product->isParentNotBuyable()}]
          <option value="[{$product->getId()}]">[{ $product->oxarticles__oxvarselect->value }] [{oxhasrights ident="SHOWARTICLEPRICE"}] [{ $product->getFPrice() }] [{ $currency->sign|strip_tags}]*[{/oxhasrights}]</option>
        [{/if}]

        [{foreach from=$product->getMdSubvariants() item=mdVariant}]
          <option value="[{$mdVariant->getLink()}]">[{ $mdVariant->getName() }] [{oxhasrights ident="SHOWARTICLEPRICE"}] [{ $mdVariant->getFPrice()|strip_tags }]* [{/oxhasrights}]</option>
        [{/foreach}]
      </select>
      [{else}]


     [{ if $oView->getVariantList()}]
    <div id="variant_selectbox" class="clear">
    <label>[{ $product->oxarticles__oxvarname->value }]:</label>
        <select  id="test_varSelect_[{$testid}]" name="aid">
        [{if !$oView->drawParentUrl()}]
            <option value="parent">HAUPTARTIKEL</option>
        [{else}]
            <option value="parent">Weitere Varianten</option>
        [{/if}]
        [{foreach from=$oView->getVariantList() item=variant}]
            <option value="[{$variant->getId()}]" onClick="window.location.href='[{$variant->getLink()}]'">[{ $variant->oxarticles__oxvarselect->value }]</option>
        [{/foreach}]
        </select>
    </div>
    [{/if}]


      [{/if}]

    [{if $showMainLink}]
        [{assign var='_productLink' value=$product->getMainLink()}]
    [{else}]
        [{assign var='_productLink' value=$product->getLink()}]
    [{/if}]

    [{elseif $product->getDispSelList()}]
      [{foreach key=iSel from=$product->selectlist item=oList}]
        <label>[{ $oList.name }] :</label>
        <select id="test_sellist_[{$testid}]_[{$iSel}]" name="sel[[{$iSel}]]" onchange="oxid.sellist.set(this.name,this.value);">
          [{foreach key=iSelIdx from=$oList item=oSelItem}]
            [{ if $oSelItem->name }]
              <option value="[{$iSelIdx}]"[{if $oSelItem->selected }]SELECTED[{/if }]>[{ $oSelItem->name }]</option>
            [{/if}]
          [{/foreach}]
        </select>
      [{/foreach}]
    [{/if}]
    </div>

    [{if $size!='big'}] [{$smarty.capture.product_price}] [{/if}]

    [{oxhasrights ident="TOBASKET"}]
        [{ if !$product->isNotBuyable() && !$product->hasMdVariants() }]



    [{oxhasrights ident="TOBASKET"}]

        [{ if $product->isBuyable() }]
         <div class="tocart"><input id="test_toBasket" type="submit" value="[{if $size=='small'}][{oxmultilang ident="INC_PRODUCTITEM_ADDTOCARD3" }][{else}][{oxmultilang ident="INC_PRODUCTITEM_ADDTOCARD2"}][{/if}]" onclick="oxid.popup.load();"></div>

               <div class="amount">
                <label>[{ oxmultilang ident="DETAILS_QUANTITY" }]</label><input id="test_AmountToBasket" type="text" name="am" value="1" size="3">
               </div>


        [{/if}]
    [{/oxhasrights}]

    [{if $product->hasMdVariants() }]
    <span class="btn moreinfo">
        <a id="test_variantMoreInfo_[{$testid}]" class="" href="[{ $_productLink }]" onclick="oxid.mdVariants.getMdVariantUrl('mdVariant_[{$testid}]'); return false;">[{ oxmultilang ident="INC_PRODUCT_VARIANTS_MOREINFO" }]</a>
    </span>
    [{/if}]

    </form>

    [{if $removeFunction && (($owishid && ($owishid==$oxcmp_user->oxuser__oxid->value)) || (($wishid==$oxcmp_user->oxuser__oxid->value))) }]
    <form action="[{ $oViewConf->getSelfActionLink() }]" method="post">
      <div>
          [{ $oViewConf->getHiddenSid() }]
          <input type="hidden" name="cl" value="[{ $oViewConf->getActiveClassName() }]">
          <input type="hidden" name="fnc" value="[{$removeFunction}]">
          <input type="hidden" name="aid" value="[{$product->oxarticles__oxid->value}]">
          <input type="hidden" name="am" value="0">
          <input type="hidden" name="itmid" value="[{$product->getItemKey()}]">
      </div>
      <div class="fromlist">
          <input id="test_remove_[{$testid}]" type="submit" value="[{ oxmultilang ident="INC_NOTICE_PRODUCT_ITEM_REMOVE" }]">
      </div>
    </form>
    [{/if}]

Kann jemand helfen? :frowning: