rechtstexte für onlineshop
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: Einbau Modul Estelco Attributmatrix in modified shop

    zeolite

    • Fördermitglied
    • Beiträge: 142
    • Geschlecht:
    Gratis Downloadpaket, Quelle & Dank: Estelco . d e - Modul Attributmatrix

    Einsatz:
    Shop Textil Großhandel

    Anforderung:
    Matrix zur Übernahme mehrerer Attribute eines Artikels in merheren Ausführungen in den Warenkorb

    Version Shopsoftware:
    Aktuell in 1.06 Beta 4 eingebaut

    <<-- BACKUP MACHEN -->>

    Datenbank erweitern
    Code: PHP  [Auswählen]
    CREATE TABLE `products_attributes_matrix` (
      `products_id` int(11) NOT NULL,
      `matrix1` int(11) NOT NULL,
      `matrix2` int(11) NOT NULL,
      `quantity` int(11) NOT NULL,
      PRIMARY KEY  (`products_id`,`matrix1`,`matrix2`)
    ) ENGINE=MyISAM;

    ALTER TABLE `products` ADD `products_matrix1` INT(11) NOT NULL ;
    ALTER TABLE `products` ADD `products_matrix2` INT(11) NOT NULL ;

    ALTER TABLE `admin_access` ADD `new_attributes_matrix` INT(1) NOT NULL;
    UPDATE `admin_access` SET `new_attributes_matrix` = 1 WHERE `customers_id` = 1;

    Aus dem Downloadpaket die Ordner [admin] [inc] [lang] auf den Server kopieren

    Aus dem Downloadpaket [templates/xtc4/module] in das eigene Template kopiren (xtc5?)

    Jetzt noch folgende bereits vorhandene Dateien anpassen:

    admin/includes/application_top.php
    ca. Zeile 136
    Code: PHP  [Auswählen]
    define('FILENAME_NEW_ATTRIBUTES','new_attributes.php');
    danach einfügen
    define('FILENAME_NEW_ATTRIBUTES_MATRIX','new_attributes_matrix.php');

    admin/includes/column_left.php
    ca. Zeile 59
    Code: PHP  [Auswählen]
      if (($_SESSION['customers_status']['customers_status_id'] == '0') && ($admin_access['new_attributes'] == '1')) echo '<li><a href="' . xtc_href_link(FILENAME_NEW_ATTRIBUTES, '', 'NONSSL') . '" class="menuBoxContentLink"> -'.BOX_ATTRIBUTES_MANAGER.'</a></li>';
    danach einfügen
      if (($_SESSION['customers_status']['customers_status_id'] == '0') && ($admin_access['new_attributes_matrix'] == '1')) echo '<li><a href="' . xtc_href_link(FILENAME_NEW_ATTRIBUTES_MATRIX, '', 'NONSSL') . '" class="menuBoxContentLink"> -'.BOX_ATTRIBUTES_MATRIX.'</a><li>';  

    checkout_process.php
    Code: PHP  [Auswählen]
    ca. Zeile 275
            $stock_query_raw = "-- /checkout_process.php
                                SELECT products_quantity,

    ersetzen durch

            $stock_query_raw = "
    -- /checkout_process.php
                                SELECT products_quantity, products_matrix1, products_matrix2,

    ca. Zeile 290
            $stock_query = xtc_db_query(" -- /checkout_process.php
                                        SELECT products_quantity

    ersetzen durch

            $stock_query = xtc_db_query("
    -- /checkout_process.php
                                        SELECT products_quantity, products_matrix1, products_matrix2,

    ca. Zeile 304
            xtc_db_query("UPDATE ".TABLE_PRODUCTS."
                             SET products_quantity = '"
    .$stock_left."'
                           WHERE products_id = '"
    .xtc_get_prid($order->products[$i]['id'])."'");
            if (($stock_left < 1) && (STOCK_ALLOW_CHECKOUT == 'false')) {
              xtc_db_query("UPDATE ".TABLE_PRODUCTS."
                               SET products_status = '0'
                             WHERE products_id = '"
    .xtc_get_prid($order->products[$i]['id'])."'");

    ersetzen mit

            if ($stock_values['products_matrix1'] > 0 && $stock_values['products_matrix2'] > 0) {
              $products_attributes = $order->products[$i]['attributes'];
              xtc_db_query("
              UPDATE "
    . TABLE_PRODUCTS_ATTRIBUTES_MATRIX . "
              SET quantity=quantity-"
    . $order->products[$i]['qty'] . "
              WHERE products_id="
    . xtc_get_prid($order->products[$i]['id']) . "
              AND (matrix1="
    . $products_attributes[0]['value_id'] . " AND matrix2=" . $products_attributes[1]['value_id'] . ")
              OR (matrix1="
    . $products_attributes[1]['value_id'] . " AND matrix2=" . $products_attributes[0]['value_id'] . ")
              "
    );
            } else {
              xtc_db_query("update ".TABLE_PRODUCTS." set products_quantity = '".$stock_left."' where products_id = '".xtc_get_prid($order->products[$i]['id'])."'");
              if (($stock_left < 1) && (STOCK_ALLOW_CHECKOUT == 'false')) {
                xtc_db_query("update ".TABLE_PRODUCTS." set products_status = '0' where products_id = '".xtc_get_prid($order->products[$i]['id'])."'");
              }

    includes/cart_actions.php
    ca. Zeile 99
    Code: PHP  [Auswählen]
        case 'add_product':
          if (isset ($_POST['products_id']) && is_numeric($_POST['products_id'])) {
                                    $cart_quantity = (xtc_remove_non_numeric($_POST['products_qty']) + $_SESSION['cart']->get_quantity(xtc_get_uprid($_POST['products_id'], isset($_POST['id'])?$_POST['id']:'')));
            if ($cart_quantity > MAX_PRODUCTS_QTY) {
              $cart_quantity = MAX_PRODUCTS_QTY;
            }
            if (isset($econda) && is_object($econda)) {
              $econda->_emptyCart();
              $old_quantity = $_SESSION['cart']->get_quantity(xtc_get_uprid($_POST['products_id'], isset($_POST['id'])?$_POST['id']:''));
              $econda->_addProduct($_POST['products_id'], $cart_quantity, $old_quantity);
            }
            $_SESSION['cart']->add_cart((int)$_POST['products_id'], $cart_quantity, isset($_POST['id'])?$_POST['id']:''); //DokuMan - 2012-06-11 - added isset-check for $_POST['id']
          }
          xtc_redirect(xtc_href_link($goto, 'products_id=' . (int)$_POST['products_id'] . '&' . xtc_get_all_get_params($parameters)));
          break;

    ersetzen mit

            case 'add_product' :
                if ($_POST['matrix'] == 1) {
                    if (isset ($_POST['products_id']) && is_numeric($_POST['products_id'])) {
                        $values = $_POST;
                        unset($values['x']);
                        unset($values['y']);
                        unset($values['matrix']);
                        unset($values['products_id']);
                        foreach ($values as $key => $value) {
                            if ($value > 0) {
                                $ids = explode("-", $key);
                                $id[$ids[1]] = $ids[0];
                                $id[$ids[3]] = $ids[2];
                                if ($value > MAX_PRODUCTS_QTY)
                                $value = MAX_PRODUCTS_QTY;
                                if (is_object($econda)) {
                                    $econda->_emptyCart();
                                    $old_quantity = $_SESSION['cart']->get_quantity(xtc_get_uprid($_POST['products_id'], $_POST['id']));
                                    $econda->_addProduct($_POST['products_id'], $value, $old_quantity);
                                }
                                $_SESSION['cart']->add_cart((int) $_POST['products_id'], $_SESSION['cart']->get_quantity(xtc_get_uprid($_POST['products_id'], $id)) + xtc_remove_non_numeric($value), $id);
                            }
                        }
                    }
                } else {
                    if (isset ($_POST['products_id']) && is_numeric($_POST['products_id'])) {
                        if ($_POST['products_qty'] > MAX_PRODUCTS_QTY)
                        $_POST['products_qty'] = MAX_PRODUCTS_QTY;
                        if (is_object($econda)) {
                            $econda->_emptyCart();
                            $old_quantity = $_SESSION['cart']->get_quantity(xtc_get_uprid($_POST['products_id'], $_POST['id']));
                            $econda->_addProduct($_POST['products_id'], $_POST['products_qty'], $old_quantity);
                        }
                        $_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']);
                    }
                }
                xtc_redirect(xtc_href_link($goto, 'products_id='.(int) $_POST['products_id'].'&'.xtc_get_all_get_params($parameters)));
                break;

    includes/database_tables.php
    ca. Zeile 78
    Code: PHP  [Auswählen]
      define('TABLE_PRODUCTS_ATTRIBUTES_DOWNLOAD', 'products_attributes_download');

    danach einfügen

      define('TABLE_PRODUCTS_ATTRIBUTES_MATRIX', 'products_attributes_matrix');

    includes/modules/order_details_cart.php
    ca. Zeile 38
    Code: PHP  [Auswählen]
    require_once (DIR_FS_INC.'xtc_check_stock.inc.php');

    danach einfügen

    require_once (DIR_FS_INC.'xtc_check_matrix_stock.inc.php');

    includes/modules/order_details_cart.php
    ca. Zeile 53
    Code: PHP  [Auswählen]
      if (STOCK_CHECK == 'true') {
        $mark_stock = xtc_check_stock($products[$i]['id'], $products[$i]['quantity']);
        if ($mark_stock)
          $_SESSION['any_out_of_stock'] = 1;
     }

    ersetzen durch

      if (STOCK_CHECK == 'true') {
        $mark_stock = xtc_check_stock($products[$i]['id'], $products[$i]['quantity']);
      }

      $sql = xtc_db_query("SELECT products_matrix1, products_matrix2 FROM " . TABLE_PRODUCTS . " WHERE products_id=" . (int)$products[$i]['id']);
      $erg = xtc_db_fetch_array($sql);
      if ($erg['products_matrix1']>0 && $erg['products_matrix2']>0)
      $mark_stock = xtc_check_matrix_stock($products[$i]['id'], $products[$i]['quantity'], $products[$i]['attributes'][$erg['products_matrix1']], $products[$i]['attributes'][$erg['products_matrix2']]);
      if ($mark_stock) $_SESSION['any_out_of_stock'] = 1;

    includes/modules/product_attributes.php
    Code: PHP  [Auswählen]
    ca. Zeile 31
      $products_options_name_query = xtDBquery("SELECT distinct
                                                       popt.products_options_id,
                                                       popt.products_options_name,
                                                       popt.products_options_sortorder
                                                  FROM "
    .TABLE_PRODUCTS_OPTIONS." popt,
                                                       "
    .TABLE_PRODUCTS_ATTRIBUTES." patrib
                                                 WHERE patrib.products_id='"
    .$product->data['products_id']."'
                                                   AND patrib.options_id = popt.products_options_id
                                                   AND popt.language_id = '"
    .(int) $_SESSION['languages_id']."'
                                              ORDER BY popt.products_options_sortorder, popt.products_options_id"

                                              );

      $row = 0;

    danach einfügen

      if ($product->data['products_matrix1'] > 0 || $product->data['products_matrix2'] > 0) {
        $sql = xtc_db_query("SELECT products_options_name FROM " . TABLE_PRODUCTS_OPTIONS . " WHERE products_options_id=" . $product->data['products_matrix1'] . " AND language_id=" . $_SESSION['languages_id']);
        $erg = xtc_db_fetch_array($sql);
        $title = $erg['products_options_name'];
        $sql = xtc_db_query("SELECT products_options_name FROM " . TABLE_PRODUCTS_OPTIONS . " WHERE products_options_id=" . $product->data['products_matrix2'] . " AND language_id=" . $_SESSION['languages_id']);
        $erg = xtc_db_fetch_array($sql);
        $title .= "<br /><hr />" . $erg['products_options_name'];
        $sql = xtc_db_query("SELECT *
                             FROM "
    . TABLE_PRODUCTS_ATTRIBUTES . " pa,
                                  "
    . TABLE_PRODUCTS_OPTIONS_VALUES . " pov
                             WHERE pa.products_id = "
    . $product->data['products_id'] . "
                             AND pa.options_id = "
    . $product->data['products_matrix1'] . "
                             AND pa.options_values_id = pov.products_options_values_id
                             AND pov.language_id = "
    . $_SESSION['languages_id'] . "
                             ORDER BY pa.sortorder"
    );
        $matrix1 = array();
        while ($matrix = xtc_db_fetch_array($sql)) {
          $matrix1[] = array('id' => $matrix['products_options_values_id'], 'text' => $matrix['products_options_values_name']);
        }

        $sql = xtc_db_query("SELECT *
                             FROM "
    . TABLE_PRODUCTS_ATTRIBUTES . " pa,
                                  "
    . TABLE_PRODUCTS_OPTIONS_VALUES . " pov
                             WHERE pa.products_id = "
    . $product->data['products_id'] . "
                             AND pa.options_id = "
    . $product->data['products_matrix2'] . "
                             AND pa.options_values_id = pov.products_options_values_id
                             AND pov.language_id = "
    . $_SESSION['languages_id'] . "
                             ORDER BY pa.sortorder"
    );
        $matrix2 = array();
        while ($matrix = xtc_db_fetch_array($sql)) {
          $matrix2[] = array('id' => $matrix['products_options_values_id'], 'text' => $matrix['products_options_values_name']);
        }
        $sql = xtc_db_query("SELECT * FROM " . TABLE_PRODUCTS_ATTRIBUTES_MATRIX . " WHERE products_id=" . $product->data['products_id']);
        $quantity = array();
        while ($erg = xtc_db_fetch_array($sql)) {
          $quantity[$erg['matrix1']][$erg['matrix2']] = $erg['quantity'];
        }
        $i=0;
        $j=0;
        $products_options_data = array ();
        for ($i=0; $i <= sizeof($matrix2); $i++) {
          if ($i==0) {
            $products_options_data[$i]['DATA'][$j]['content'] = $title;
          } else {
            $products_options_data[$i]['DATA'][$j]['content'] = $matrix2[$i-1]['text'];
          }
          for ($j=1; $j <= sizeof($matrix1); $j++) {
            if ($i==0) {
              $products_options_data[$i]['DATA'][$j]['content'] = $matrix1[$j-1]['text'];
            } else {
              if (ATTRIBUTE_STOCK_CHECK == 'false' || $quantity[$matrix1[$j-1]['id']][$matrix2[$i-1]['id']] > 0) {
                $products_options_data[$i]['DATA'][$j]['content'] = '<input type="text" name="' . $matrix1[$j-1]['id'] . "-" . $product->data['products_matrix1'] . "-" . $matrix2[$i-1]['id'] . "-" . $product->data['products_matrix2'] . '" value="0" size="4" onMouseOver="showWMTT(\'tooltip\', \'' . TEXT_AVAILABLE_QUANTITY . $quantity[$matrix1[$j-1]['id']][$matrix2[$i-1]['id']] . '\')" onMouseOut="hideWMTT(\'tooltip\')" />';
              } else {
                $products_options_data[$i]['DATA'][$j]['content'] = ' ';
              }
            }
          }
        }
        // Show javascript tooltip only when stock is controlled by shop
     $module_smarty->assign('show_quantity', stock_limited === 'true');
     
    } else {

    ca. Zeile 183
     //if PRICE for option is 0 we don't need to display it

    davor einfügen

    }

    Mouseover in der product_attributes deaktivieren: onMouseOver="hideWMTT(\'tooltip\', \''

    lang/german/german.php
    Code: PHP  [Auswählen]
    Am Ende (vor dem ?>) einfügen

    define('TEXT_AVAILABLE_QUANTITY', 'Verf&uuml;gbare Menge: ');

    lang/german/admin/german.php
    ca. Zeile 151
    Code: PHP  [Auswählen]
    define('BOX_ATTRIBUTES_MANAGER','Attribut Verwaltung');

    danach einfügen

    define('BOX_ATTRIBUTES_MATRIX','Attribut Matrix');

    templates/xtc5(?)/stylesheet.css
    Code: PHP  [Auswählen]
    Am Ende einfügen

    .tooltip {
            position: absolute;
            display: none;
            background-color: #CCF;
            border: 1px solid #66F;
            padding: 3px;
    }

    /includes/modules/product_info.php
    ca. Zeile 113
    Code: PHP  [Auswählen]
      // check if customer is allowed to add to cart
      if ($_SESSION['customers_status']['customers_status_show_price'] != '0'
          && (($_SESSION['customers_status']['customers_fsk18'] == '1' && $product->data['products_fsk18'] == '0')
          || $_SESSION['customers_status']['customers_fsk18'] != '1')) {
        $add_pid_to_qty = xtc_draw_hidden_field('products_id', $product->data['products_id']);
        $info_smarty->assign('ADD_QTY', xtc_draw_input_field('products_qty', '1', ($hide_qty ? '' : 'size="3"'), ($hide_qty ? 'hidden' : 'text')).' '.$add_pid_to_qty);
        $info_smarty->assign('ADD_CART_BUTTON', xtc_image_submit('button_in_cart.gif', IMAGE_BUTTON_IN_CART));
      }

    ersetzen mit

    $matrix = ($product->data['products_matrix1'] > 0 && $product->data['products_matrix2'] > 0) ? true : false;  

      // check if customer is allowed to add to cart
     


      if ($_SESSION['customers_status']['customers_status_show_price'] != '0'
          && (($_SESSION['customers_status']['customers_fsk18'] == '1' && $product->data['products_fsk18'] == '0')
          || $_SESSION['customers_status']['customers_fsk18'] != '1')) {
        $add_pid_to_qty = xtc_draw_hidden_field('products_id', $product->data['products_id']);
     
        if ($matrix) {
                   
        $info_smarty->assign('ADD_QTY', xtc_draw_hidden_field('products_id', $product->data['products_id']) . xtc_draw_hidden_field('matrix', '1'));
        } else {
        $info_smarty->assign('ADD_QTY', xtc_draw_input_field('products_qty', '1', ($hide_qty ? '' : 'size="3"'), ($hide_qty ? 'hidden' : 'text')).' '.$add_pid_to_qty);
      }
        $info_smarty->assign('ADD_CART_BUTTON', xtc_image_submit('button_in_cart.gif', IMAGE_BUTTON_IN_CART));
      }
     
    Die FSK 18 Anpassungen habe ich nicht kontrolliert - diese benötige ich aber nicht.

    Bei den Artikeloptionen funktionieren neben der table_matrix im Moment keine weiteren Optionen mit Auswahlmöglichkeit.

    Es ist nur möglich, den Artikel mit gewünschter Stückzahl in den Warenkorb zu übernehmen. Mehr benötige ich im Moment nicht, falls es so weit sein sollte, werde ich das Modul anpassen, wenn es wer anderer zuvor benötigt & löst, darf er mich gerne daran teilhaben lassen!

    Jetzt sollte alles funktionieren!

    Linkback: https://www.modified-shop.org/forum/index.php?topic=23706.0
    Trade Republic - Provisionsfrei Aktien handeln

    Dato

    • Mitglied
    • Beiträge: 214
    Re: Anleitung: Einbau Modul Estelco Attributmatrix in modified shop
    Antwort #1 am: 12. Dezember 2012, 00:12:44
    aus welchem ???
    Zitat
    Aus dem Downloadpaket

    ich sehe nur Bilder.

    zeolite

    • Fördermitglied
    • Beiträge: 142
    • Geschlecht:
    Re: Anleitung: Einbau Modul Estelco Attributmatrix in modified shop
    Antwort #2 am: 12. Dezember 2012, 00:15:49
    Siehe erste Zeile

    Zitat
    Estelco . d e - Modul Attributmatrix

    Gruß

    Simon

    • Viel Schreiber
    • Beiträge: 1.369
    Re: Anleitung: Einbau Modul Estelco Attributmatrix in modified shop
    Antwort #3 am: 12. Dezember 2012, 00:38:24
    Vielen Dank zeolite, dass du dir die Arbeit gemacht hast.  :thumbs:
    Das wird so manchem helfen, nachdem die alten Einbauanleitungen oft nicht mehr zu gebrauchen sind und man immer wieder Anpassungen vornehmen muss.

    Das es hier keinen Download-Link zum Estelco-Modul gibt liegt daran, dass der Link bislang immer vom Forum gefiltert wurde. Da muss halt jeder kurz googeln, das ist doch kein Problem.

    zeolite

    • Fördermitglied
    • Beiträge: 142
    • Geschlecht:
    Re: Anleitung: Einbau Modul Estelco Attributmatrix in modified shop
    Antwort #4 am: 12. Dezember 2012, 02:40:52
    Änderung:

    checkout_process.php

    Behaltet die unbearbeitete. Checkout läuft dann einwandfrei. Wofür die Änderungen sein sollen, ist mir noch nicht ganz klar, aber dafür ist es heute auch zu spät.

    Gruß

    zeolite

    • Fördermitglied
    • Beiträge: 142
    • Geschlecht:
    Hallo

    vielleicht hat jemand einen Denkanstoß für mich!

    Ich stehe aktuell vor folgendem Problem und hab keine Ahnung woran es liegen könnte.

    Momentan sind im Shop 80 Artikel angelegt, davon habe ich ca. 65 Mit Attributen (Farben und Größen) hinterlegt. Das ist einwandfrei gegangen und ich war froher Dinge, mich jetzt um die Endgestaltung kümmern zu können. Jetzt wollte ich bei den letzten Artikel noch die Attribute hinterlegen und auf einmal passiert folgendes:

    Wenn ich Farbe(n) und Größen selektiere und die Reihenfolge der Größen eingebe (S=1, M=2, L=3 usw.) wird teilweise gar nichts gespeichert, oder die Reihenfolge wird nicht gespeichert oder nur für 1 oder 2 Elemente.

    Wenn ich direkt in der Datenbank die Reihenfolge eingebe, dann stimmt es wieder. Wenn ich allerdings danch über die Weboberfläche wieder eine Änderung vornehme uns speichere, hab ich das selbe Ergebnis wie vorher.

    Einzige Lösung bisher die mir einfällt, wäre die Reihenfolge, welche aktuell bei den product_attributes gespeichert und jedes mal einzeln vergeben wird, in die product_options_values geben und dort fix vorbelegen - was für mich kein Problem ist, weil die Reihenfolge der Größen immer dies selbe ist.

    Lieber wäre mir aber, ich könnte den "Fehler" oder wo hier auch immer das Problem entsteht, bereinigen. Hat jemand einen Tip für mich, wo ich ansetzen muss?

    Ich habe auch seit gestern keine Änderungen am Shop selbst vorgenommen.

    www.look-gmbh.at/shop
    Korrekt zB: http://look-gmbh.at/shop/Tops/04199-Bottega-Top::48.html
    Problem zB: http://look-gmbh.at/shop/Tuniken/04147-Bottega-Tunika::51.html

    Bin wirklich sehr dankbar für jeden noch so kleinen Hinweis!

    Gruß zeolite

    Modulfux

    • Experte
    • Beiträge: 3.590
    • Geschlecht:
    Es hat mit der Begrenzung der Anzahl der $_POST Variablen zu tun.

    Abhilfe bringt dir auch dieses hier:
    Attribute speichern

    Gruß
    Ronny

    zeolite

    • Fördermitglied
    • Beiträge: 142
    • Geschlecht:
    Super! Danke! Genau das war es!

    Ich war heute deswegen schon bei meinem Hoster auf ein Bier, weil ich dachte, dass es innerhalb der Datenbank vielleicht irgendwie begrenzt ist, aber soweit habe ich nicht gedacht, dass es im Shop begrenzt sein könnte  :datz:

    Gruß zeolite

    gonzo88

    • Mitglied
    • Beiträge: 171
    Hallo,

    Danke erstmal für das Modul.
    Ich bekomme, wenn ich die Matrix für ein produkt definieren möchte, folgenden Screen:

    1146 - Table 'testdomaindb1.TABLE_PRODUCTS_ATTRIBUTES_MATRIX' doesn't exist
    SELECT * FROM TABLE_PRODUCTS_ATTRIBUTES_MATRIX WHERE products_id=50

    Ich habe in der Datenbank nachgeschaut, die products_attributes_matrix existiert jedoch!

    Hat jemand einen Tipp für mich?
    Danke & Grüße
    Gonzo

    zeolite

    • Fördermitglied
    • Beiträge: 142
    • Geschlecht:
    Hallo,

    includes/database_tables.php
    ca. Zeile 78

    Code: PHP  [Auswählen]
          define('TABLE_PRODUCTS_ATTRIBUTES_DOWNLOAD', 'products_attributes_download');
         
        danach einfügen
         
          define('TABLE_PRODUCTS_ATTRIBUTES_MATRIX', 'products_attributes_matrix');

    und nächste auch eingefügt?

    includes/modules/product_attributes.php

    Code: PHP  [Auswählen]
        ca. Zeile 31
          $products_options_name_query = xtDBquery("SELECT distinct
                                                          popt.products_options_id,
                                                          popt.products_options_name,
                                                          popt.products_options_sortorder
                                                     FROM "
    .TABLE_PRODUCTS_OPTIONS." popt,
                                                          "
    .TABLE_PRODUCTS_ATTRIBUTES." patrib
                                                    WHERE patrib.products_id='"
    .$product->data['products_id']."'
                                                      AND patrib.options_id = popt.products_options_id
                                                      AND popt.language_id = '"
    .(int) $_SESSION['languages_id']."'
                                                 ORDER BY popt.products_options_sortorder, popt.products_options_id"

                                                  );
         
          $row = 0;
         
        danach einfügen
         
          if ($product->data['products_matrix1'] > 0 || $product->data['products_matrix2'] > 0) {
            $sql = xtc_db_query("SELECT products_options_name FROM " . TABLE_PRODUCTS_OPTIONS . " WHERE products_options_id=" . $product->data['products_matrix1'] . " AND language_id=" . $_SESSION['languages_id']);
            $erg = xtc_db_fetch_array($sql);
            $title = $erg['products_options_name'];
            $sql = xtc_db_query("SELECT products_options_name FROM " . TABLE_PRODUCTS_OPTIONS . " WHERE products_options_id=" . $product->data['products_matrix2'] . " AND language_id=" . $_SESSION['languages_id']);
            $erg = xtc_db_fetch_array($sql);
            $title .= "<br /><hr />" . $erg['products_options_name'];
            $sql = xtc_db_query("SELECT *
                                FROM "
    . TABLE_PRODUCTS_ATTRIBUTES . " pa,
                                     "
    . TABLE_PRODUCTS_OPTIONS_VALUES . " pov
                                WHERE pa.products_id = "
    . $product->data['products_id'] . "
                                AND pa.options_id = "
    . $product->data['products_matrix1'] . "
                                AND pa.options_values_id = pov.products_options_values_id
                                AND pov.language_id = "
    . $_SESSION['languages_id'] . "
                                ORDER BY pa.sortorder"
    );
            $matrix1 = array();
            while ($matrix = xtc_db_fetch_array($sql)) {
              $matrix1[] = array('id' => $matrix['products_options_values_id'], 'text' => $matrix['products_options_values_name']);
            }
         
            $sql = xtc_db_query("SELECT *
                                FROM "
    . TABLE_PRODUCTS_ATTRIBUTES . " pa,
                                     "
    . TABLE_PRODUCTS_OPTIONS_VALUES . " pov
                                WHERE pa.products_id = "
    . $product->data['products_id'] . "
                                AND pa.options_id = "
    . $product->data['products_matrix2'] . "
                                AND pa.options_values_id = pov.products_options_values_id
                                AND pov.language_id = "
    . $_SESSION['languages_id'] . "
                                ORDER BY pa.sortorder"
    );
            $matrix2 = array();
            while ($matrix = xtc_db_fetch_array($sql)) {
              $matrix2[] = array('id' => $matrix['products_options_values_id'], 'text' => $matrix['products_options_values_name']);
            }
            $sql = xtc_db_query("SELECT * FROM " . TABLE_PRODUCTS_ATTRIBUTES_MATRIX . " WHERE products_id=" . $product->data['products_id']);
            $quantity = array();
            while ($erg = xtc_db_fetch_array($sql)) {
              $quantity[$erg['matrix1']][$erg['matrix2']] = $erg['quantity'];
            }
            $i=0;
            $j=0;
            $products_options_data = array ();
            for ($i=0; $i <= sizeof($matrix2); $i++) {
              if ($i==0) {
                $products_options_data[$i]['DATA'][$j]['content'] = $title;
              } else {
                $products_options_data[$i]['DATA'][$j]['content'] = $matrix2[$i-1]['text'];
              }
              for ($j=1; $j <= sizeof($matrix1); $j++) {
                if ($i==0) {
                  $products_options_data[$i]['DATA'][$j]['content'] = $matrix1[$j-1]['text'];
                } else {
                  if (ATTRIBUTE_STOCK_CHECK == 'false' || $quantity[$matrix1[$j-1]['id']][$matrix2[$i-1]['id']] > 0) {
                    $products_options_data[$i]['DATA'][$j]['content'] = '<input type="text" name="' . $matrix1[$j-1]['id'] . "-" . $product->data['products_matrix1'] . "-" . $matrix2[$i-1]['id'] . "-" . $product->data['products_matrix2'] . '" value="0" size="4" onMouseOver="showWMTT(\'tooltip\', \'' . TEXT_AVAILABLE_QUANTITY . $quantity[$matrix1[$j-1]['id']][$matrix2[$i-1]['id']] . '\')" onMouseOut="hideWMTT(\'tooltip\')" />';
                  } else {
                    $products_options_data[$i]['DATA'][$j]['content'] = ' ';
                  }
                }
              }
            }
            // Show javascript tooltip only when stock is controlled by shop
         $module_smarty->assign('show_quantity', stock_limited === 'true');
         
        } else {
         
        ca. Zeile 183
         //if PRICE for option is 0 we don't need to display it
         
        davor einfügen
         
        }

    Gruß zeolite

    Simon

    • Viel Schreiber
    • Beiträge: 1.369
    Bitte im ersten Beitrag ändern

    admin/includes/application_top.php
    ca. Zeile 136

    in
    admin\includes\filenames.php

    gonzo88

    • Mitglied
    • Beiträge: 171
    Hallo zeolite,

    anscheinend war die "includes/database_tables.php" nicht richtig übertragen gewesen. Danach funktionierte es, aber die Folgeseite "Warenkorb" war blank.

    Ich habe aber den Fehler gefunden:
    includes/modules/order_details_cart.php

    alt/Original ca. Zeile 49
    Code: PHP  [Auswählen]
      if (STOCK_CHECK == 'true') {
        $mark_stock = xtc_check_stock($products[$i]['id'], $products[$i]['quantity']);
        if ($mark_stock) {
          $_SESSION['any_out_of_stock'] = 1;
        }
      }

    neu/modifiziert (ersetze durch)
    Code: PHP  [Auswählen]
    if (STOCK_CHECK == 'true') {
        $mark_stock = xtc_check_stock($products[$i]['id'], $products[$i]['quantity']);
      }
     
      $sql = xtc_db_query("SELECT products_matrix1, products_matrix2 FROM " . TABLE_PRODUCTS . " WHERE products_id=" . (int)$products[$i]['id']);
      $erg = xtc_db_fetch_array($sql);
      if ($erg['products_matrix1']>0 && $erg['products_matrix2']>0)
      $mark_stock = xtc_check_matrix_stock($products[$i]['id'], $products[$i]['quantity'], $products[$i]['attributes'][$erg['products_matrix1']], $products[$i]['attributes'][$erg['products_matrix2']]);
      if ($mark_stock) $_SESSION['any_out_of_stock'] = 1;

    In der Anleitung bleibt eine schließende Klammer stehen. Das scheint falsch zu sein.
    Das Ganze sieht dann so aus:

    Code: PHP  [Auswählen]
    for ($i = 0, $n = sizeof($products); $i < $n; $i ++) {

    if (STOCK_CHECK == 'true') {
        $mark_stock = xtc_check_stock($products[$i]['id'], $products[$i]['quantity']);
      }
     
      $sql = xtc_db_query("SELECT products_matrix1, products_matrix2 FROM " . TABLE_PRODUCTS . " WHERE products_id=" . (int)$products[$i]['id']);
      $erg = xtc_db_fetch_array($sql);
      if ($erg['products_matrix1']>0 && $erg['products_matrix2']>0)
      $mark_stock = xtc_check_matrix_stock($products[$i]['id'], $products[$i]['quantity'], $products[$i]['attributes'][$erg['products_matrix1']], $products[$i]['attributes'][$erg['products_matrix2']]);
      if ($mark_stock) $_SESSION['any_out_of_stock'] = 1;


      $image = '';
      if ($products[$i]['image'] != '') {
        $image = DIR_WS_THUMBNAIL_IMAGES.$products[$i]['image'];
      }

      //show 'delete button' in shopping cart

    Nachtrag:
    Jetzt habe ich natürlich eine riesige Tabelle bei 12 Farben auf der x-Achse und 7 Größen auf der y-Achse.
    Gibt es zufälliger Weise eine Lösung, dass man z.B. erst die Farbe auswählt (anklickt) und dann erscheint nur eine Tabelle mit den bestellmengen für die Größe?
    Bei dem Shop (s. Anhang) wählt man zunächst die Farbe, welche dann an der Tabelle erscheint (bzw. wechselt) und man dann für die (zuerst) ausgewählte Farbe seine Bestellmengen angibt.

    Grüße
    Gonzo

    zeolite

    • Fördermitglied
    • Beiträge: 142
    • Geschlecht:
    Hallo Gonzo,

    wenn ich mich nicht täusche, ist das was Du meinst, eine andere Anforderung als diese Anpassung.

    Hier geht es um den Großhandelsgebrauch, bei dem ein Artikel in zb 5 Farben und je 6 Größen abgebildet sein soll und der Kunde in zb 3 Farben zu jeder Farbe mehrere Größen auswählen kann.

    Gruß

    Grumpfli

    • Fördermitglied
    • Beiträge: 19
    • Geschlecht:
    Re: Anleitung: Einbau Modul Estelco Attributmatrix in modified shop
    Antwort #13 am: 07. Oktober 2013, 19:32:43
    Hallo zusammen

    Ich habe das Modul im Shop eingebaut. Danke für das Teilen des Moduls.
    Der Einbau ist ohne Probleme vonstatten gegangen. Im Backend erscheint der Menupunkt Attribut Matrix den man auch auswählen kann. Die nächsten Schritte funktionieren auch. Gibt man die Anzahl der an Lager liegende Artikel in der Matrix ein und drückt danach auf den Button Speichern erscheint folgende Fehlermeldung:
    --------------------
    1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' 0)' at line 1

    INSERT INTO products_attributes_matrix (products_id, matrix1, matrix2, quantity) VALUES (29, MODsid, , 0)

    [MOD SQL Error]
    --------------------
    In der DB erscheint der Eintrag: products_attributes_matrix
    Nun habe ich keinen Plan wie ich das Fixen kann.

    Ein paar Angaben über den Shop:
    V1.06 rev 4642 dated: 2013-40-20
    MySQL 5.6.12
    PHP Version 5.2.17

    Schon mal im voraus: Danke für die Hilfe.

    Gruss
    Stefan

    Nils

    • Schreiberling
    • Beiträge: 422
    • Geschlecht:
    Re: Anleitung: Einbau Modul Estelco Attributmatrix in modified shop
    Antwort #14 am: 03. Dezember 2013, 21:48:03
    Hallo,

    ich habe zwei Mal das Attribut-Matrix Modul von Estelco heruntergeladen.
    Diese unterscheiden sich voneinander. Welche ist korrekt bzw. die aktuellste Version?
    Und welche passt zur neuesten modified-Version?

    Danke!

    Gruß
    Nils
    Modulshop - Eine große Auswahl an neuen und hilfreichen Modulen für die modified eCommerce Shopsoftware
    4 Antworten
    17496 Aufrufe
    05. Oktober 2012, 10:22:44 von zeolite
    113 Antworten
    52725 Aufrufe
    27. Oktober 2015, 21:01:33 von merten-1813
    3 Antworten
    2641 Aufrufe
    14. März 2013, 20:12:02 von Punto1976