Trade Republic - Provisionsfrei Aktien handeln
Neuigkeiten
  • Die modified eCommerce Shopsoftware ist kostenlos, aber nicht umsonst.
    Spenden
  • Damit wir die modified eCommerce Shopsoftware auch zukünftig kostenlos anbieten können:
    Spenden
  • Thema: ANLEITUNG: Attribut Dropdown Anzeige ergänzen mit "bitte wählen"

    peril

    • Frisch an Board
    • Beiträge: 71
    ANLEITUNG: Attribut Dropdown Anzeige ergänzen mit "bitte wählen"
    Antwort #15 am: 07. August 2010, 18:11:49
    Hallo noch einmal,

    wollte nicht nerven aber vielleicht mag sich das noch einmal jemand anschauen?

    Ich habe keinen Plan wo genau ich da ansetzen muss. Eventuell bei dem Lager-Stock-Code?

    Also wenn Lagerstand -1000 dann Attribut nicht anzeigen. Dürfte ja für den Dropdown wie auch für die anderen Anzeigemöglichkeiten die gleiche Abfrage sein oder?

    Gruß

    Templateshop - Eine große Auswahl an neuen und modernen Templates für die modified eCommerce Shopsoftware

    guest5548

    • Gast
    probier's mal so:

    Code: PHP  [Auswählen]
    $col = 0;
    while ($products_options = xtc_db_fetch_array($products_options_query,true)) {
     
    ersetzen mit:

    Code: PHP  [Auswählen]
    $products_options_data[$row]['DATA'][0] = array ('ID' => 0, 'TEXT' => PULL_DOWN_DEFAULT);
    $col = 1;
    while ($products_options = xtc_db_fetch_array($products_options_query,true)) {
    Hallo, habe das oben eingebaut. Wenn Kunden nun Artikel mit "bitte wählen" in den Warenkorb legt, erhält er ja die Meldung "nicht in ausreichender Menge verfügbar". Gibt es hier auch eine Möglichkeit, dass der Kunde hier eine Meldung bekommt, dass er vergessen hat eine Größe auszuwählen?

    LG, Daniela

    GTB

    • modified Team
    • Gravatar
    • Beiträge: 6.227
    • Geschlecht:
    Hallo Daniela,

    das muss per Javascript abgefragt werden.

    Modulfux

    • Experte
    • Beiträge: 3.590
    • Geschlecht:
    @GTB

    Irgendwie stehe ich gerade auf dem Schlauch.

    Bisher bin ich so vorgegangen:
    - in der templates/module/product_options/multi_options.html steht ein Javascript im Stil von:

    Code: Javascript  [Auswählen]
    function wk_check(form){
      if(form.select.options && form.select.options.value == 0) {
       alert("Achtung! bitte zuerst Ausführung wählen.");
       return false;
      }
    }
     
    Diese Funktion wird in der includes/product_info.php in der Zeile vom <form>-Tag so aufgerufen:

    Code: PHP  [Auswählen]
    $info_smarty->assign('FORM_ACTION', xtc_draw_form('cart_quantity', xtc_href_link(FILENAME_PRODUCT_INFO, xtc_get_all_get_params(array ('action')).'action=add_product'),'post','onsubmit="return wk_check(this)"'));
     
    Doch leider kommt kein Alert und somit landet das Produkt mit dem Attribut "Bitte wählen" im Warenkorb.

    Hakt es noch woanders im Shopsystem?

    Gruß
    Ronny

    GTB

    • modified Team
    • Gravatar
    • Beiträge: 6.227
    • Geschlecht:
    Ich schau mal nach... Hab da irgendwo was auf meine Platte rumliegen.

    h-h-h

    • modified Team
    • Beiträge: 4.562
    Code: Javascript  [Auswählen]
    function wk_check(form){
      if(document.getElementsByName("id[1]")[0].checked == true) {
       alert("Achtung! bitte zuerst Ausführung wählen.");
       return false;
      }else{
       return true;
      }
    }

    GTB

    • modified Team
    • Gravatar
    • Beiträge: 6.227
    • Geschlecht:
    Das geht auch ohne JS.  :B

    h-h-h

    • modified Team
    • Beiträge: 4.562
    ? das war jetzt Javascript.
    Ohne Javascript müsste dann die Abfrage gemacht werden, wenn das Produkt in den Warenkorb gelegt wird.

    Gruß

    h-h-h

    GTB

    • modified Team
    • Gravatar
    • Beiträge: 6.227
    • Geschlecht:
    des Fallbacks wegen sollte das gemacht werden  :whistle:

    Modulfux

    • Experte
    • Beiträge: 3.590
    • Geschlecht:
    Ich hatte auch schon versucht, wenn "value == 0" ist, das option-Tag auf "disabled" zu setzen. Doch leider ist das nicht ganz Browserkonform. Wäre aber dann die einfachste Variante gewesen.

    Bin mal gespannt, was GTB aus dem Hut zaubert, denn ich war auch immer davon überzeugt, die Sache mit JS abzufangen.

    GTB

    • modified Team
    • Gravatar
    • Beiträge: 6.227
    • Geschlecht:
    Ich zaubere hier gar nichts aus dem Hut.  :PP

    web28

    • modified Team
    • Beiträge: 9.404
    Man könnte in der cart_action einen Abfragetest für den Valuenamen einbauen.

    z.B- bei "--- Bitte wählen ---" auf das Vorhandensein der 3 Minuszeichen testen
    Das wäre dann auch mehrsprachfähig.

    GTB

    • modified Team
    • Gravatar
    • Beiträge: 6.227
    • Geschlecht:
    ich will mal nicht so sein. Hier die JS Lösung:

    Code: PHP  [Auswählen]
    <script type="text/javascript"><!--
    function wk_check(){
    var element = document.forms["cart_quantity"].elements;
            for (var i=0;i<element.length;i++) {
        if(element[i].options[element[i].selectedIndex].text.indexOf("Bitte") != -1) {
          alert(unescape("Achtung%21 bitte zuerst Ausf%FChrung w%E4hlen."));
          return false;
        }
      }
    }
    //-->
    </script>
     
    wie es einzubauen ist, hat Ronny schon geschrieben.

    Gruss Gerhard

    Modulfux

    • Experte
    • Beiträge: 3.590
    • Geschlecht:
    Danke GTB und das ist vorerst die perfekte Lösung. Javascript-Paranoide sind mir erst einmal egal.

    Noch ein kleiner Hinweis, damit man das Skript auch direkt in die Optionsvorlage packen kann, ohne dass Smarty meckert:

    Code: Javascript  [Auswählen]
    {literal}
    <script type="text/javascript"><!--
    function wk_check(){
    var element = document.forms["cart_quantity"].elements;
        for (var i=0;i<element.length;i++) {
        if(element[i].options[element[i].selectedIndex].text.indexOf("Bitte") != -1) {
          alert(unescape("Achtung%21 bitte zuerst Ausf%FChrung w%E4hlen."));
          return false;
        }
      }
    }
    //-->
    </script>
    {/literal}

    GTB

    • modified Team
    • Gravatar
    • Beiträge: 6.227
    • Geschlecht:
    ACHTUNG: Ein Modul für Shopversion 2.x gibt es hier: MODUL: Attributauswahl als Pflichtfeld und vorbelegt mit "Bitte wählen"

    Hier meine Lösung für einen JS Check inkl. Fallback. Damit wird die Auswahl auch geprüft, wenn JS deaktiviert ist.

    Das ganze ist auch Multilingual.

    Also los:

    in der "/includes/modules/product_info.php"

    das hier:

    Code: PHP  [Auswählen]
    $info_smarty->assign('FORM_ACTION', xtc_draw_form('cart_quantity', xtc_href_link(FILENAME_PRODUCT_INFO, xtc_get_all_get_params(array ('action')).'action=add_product')));

    mit dem hier ersetzen:

    Code: PHP  [Auswählen]
        $info_smarty->assign('FORM_ACTION', xtc_draw_form('cart_quantity', xtc_href_link(FILENAME_PRODUCT_INFO, xtc_get_all_get_params(array ('action')).'action=add_product'),'post','onsubmit="return wk_check(\''.PULL_DOWN_DEFAULT.'\')"'));

    und die Funktion so ins Template am Anfang einfügen:

    /templates/xtc5/module/product_info/product_xx.html

    Code: PHP  [Auswählen]
    {literal}
    <script type="text/javascript"><!--
    function wk_check(search){
    var element = document.forms["cart_quantity"].elements;
        for (var i=0;i<element.length;i++) {
        if(element[i].options[element[i].selectedIndex].text.indexOf(search) != -1) {
          alert(unescape("Achtung%21 bitte zuerst Ausf%FChrung w%E4hlen."));
          return false;
        }
      }
    }
    //-->
    </script>
    {/literal}

    und das an gewünschter Stelle im Template platzieren:

    Code: PHP  [Auswählen]
    {if $error}<div class="errormessage">{$error}</div>{/if}

    jetzt muss nur noch das "Bitte wählen" als Default Wert zugeordnet werden. Das am besten so:

    /includes/modules/product_attributes.php

    das hier:

    Code: PHP  [Auswählen]
        $col = 0;
        while ($products_options = xtc_db_fetch_array($products_options_query,true)) {

    mit dem hier ersetzen:

    Code: PHP  [Auswählen]
    $products_options_data[$row]['DATA'][0] = array ('ID' => 0, 'TEXT' => PULL_DOWN_DEFAULT);
    $col = 1;

    while ($products_options = xtc_db_fetch_array($products_options_query,true)) {

    und vor dem hier:

    Code: PHP  [Auswählen]
      }

    if ($product->data['options_template'] == '' or $product->data['options_template'] == 'default') {

    das hier einsetzen:

    Code: PHP  [Auswählen]
    if (isset($_GET['error']) && $_GET['error']=='attributecheck') {
      $info_smarty->assign('error', ATTRIBUTE_ERROR);
    }

    /includes/cart_actions.php

    im case 'add_product' :

    vor dem hier:

    Code: PHP  [Auswählen]
                            $_SESSION['cart']->add_cart((int) $_POST['products_id'], $_SESSION['cart']->get_quantity(xtc_get_uprid($_POST['products_id'], $_POST['id'])) + xtc_remove_non_numeric($_POST['products_qty']), $_POST['id']);

    das hier einfügen:

    Code: PHP  [Auswählen]
    if (isset($_POST['id'])) {
      while (list ($option, $value) = each($_POST['id'])) {
        if($value==0){
          xtc_redirect(xtc_href_link(FILENAME_PRODUCT_INFO, 'products_id=' . (int) $_POST['products_id'] . '&error=attributecheck','NONSSL'));
        }
      }
    }

    Jetzt muss man nur noch die Sprachvariablen einfügen.

    /lang/german/german.php

    das hier einfügen:

    Code: PHP  [Auswählen]
    define('ATTRIBUTE_ERROR', 'Bitte wählen sie eine Ausführung');

    damit ist das Ganze auch Mehrsprachig, inkl. Fallback.

    Gruss Gerhard

    ACHTUNG: Ein Modul für Shopversion 2.x gibt es hier: MODUL: Attributauswahl als Pflichtfeld und vorbelegt mit "Bitte wählen"

    [EDIT Tomcraft 30.12.2011: Fehler in Anleitung korrigiert, Danke an Caro für den Hinweis.]
    [EDIT Tomcraft 16.10.2017: Modul für Shopversion 2.x verlinkt.]
    Shop Hosting
    14 Antworten
    5084 Aufrufe
    21. Juli 2010, 11:25:14 von peril
    1 Antworten
    3461 Aufrufe
    22. Mai 2012, 23:17:09 von jannemann
    15 Antworten
    13571 Aufrufe
    10. Dezember 2013, 21:27:31 von olli0578