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: Informationsabruf im Warenkorb

    Tonka

    • Fördermitglied
    • Beiträge: 103
    • Geschlecht:
    Informationsabruf im Warenkorb
    am: 23. Juli 2013, 13:03:14
    Hallo zusammen,

    ohne groß auszuschweifen komme ich nun gleich zum Punkt.

    In der Datenbank habe ich der Tabelle  Products gleich zwei neue spalten hinzugefügt
    "products_einheit"
    "products_verpackung"

    Der
    ../admin/includes/classes/categories.php
    habe ich nach

    Code: PHP  [Auswählen]
    'products_fsk18' => xtc_db_prepare_input($products_data['fsk18']),

    folgendes beigefügt
    Code: PHP  [Auswählen]
     'products_einheit' => xtc_db_prepare_input($products_data['products_einheit']),
     'products_verpackung' => xtc_db_prepare_input($products_data['products_verpackung']),

    danach habe ich der

    ../admin/includes/modules/new_product.php

    nach

    Code: PHP  [Auswählen]

    <tr>
                  <td><span class="main"><?php echo TEXT_PRODUCTS_VPE ?></span></td>
                  <td><span class="main"><?php echo xtc_draw_pull_down_menu('products_vpe', $vpe_array, $pInfo->products_vpe=='' ?  DEFAULT_PRODUCTS_VPE_ID : $pInfo->products_vpe, 'style="width: 135px"'); ?></span></td>
                </tr>

    letzteres beigefügt

    Code: PHP  [Auswählen]
    <tr>
    <td><span class="main"><?php echo EINHEIT ?></span></td>
    <td><span class="main"><?php echo xtc_draw_input_field('products_einheit', $pInfo->products_einheit, 'style="width: 135px"'); ?></span></td>
                      </tr>
    <tr>
     <td><span class="main"><?php echo Verpackung ?></span></td>
    <td><span class="main"><?php echo xtc_draw_input_field('products_verpackung', $pInfo->products_verpackung, 'style="width: 135px"'); ?></span></td>
                      </tr>

    und jetzt kommt die alles entscheidende Frage:

    ind der product_info_V1.html kann man diese 2 neuen felder mit folgendem befehl auslesen {$PRODUCTS_EINHEIT} und {$PRODUCTS_VERPACKUNG}

    aber wie gestalte ich das ganze in der product_listing_v1.html geschweige denn im Warenkorb?
    {$module_data.PRODUCTS_EINHEIT} funktioniert leider nicht  :-?

    über ein paar Anregungen wäre ich wirklich sehr dankbar. :idea:



    Linkback: https://www.modified-shop.org/forum/index.php?topic=27061.0

    burrito

    • Viel Schreiber
    • Beiträge: 535
    • Geschlecht:
    Re: Informationsabruf im Warenkorb
    Antwort #1 am: 23. Juli 2013, 13:18:43
    Hallo Tonka,

    ohne groß auszuschweifen komme ich gleich zur Antwort ;)

    Deine durchgeführten Änderungen sind nur dazu da, die neuen Werte über das Admin-Interface einzugeben.

    Nun musst Du sie noch in die von Dir gewünschten Smarty-Variablen schreiben.

    S. Hierzu product_listing.php

    burrito

    Tonka

    • Fördermitglied
    • Beiträge: 103
    • Geschlecht:
    Re: Informationsabruf im Warenkorb
    Antwort #2 am: 23. Juli 2013, 13:27:06
    Hallo Burrito,

    vielen dank für die den Denkanstoß ...
    habe mich bisher noch nicht wirklich ans smarty modul herangewagt, aber einmal ist ja immer das erste mal.

    vielen vielen Dank  :worship: :thumbs:

    Tonka

    • Fördermitglied
    • Beiträge: 103
    • Geschlecht:
    Re: Informationsabruf im Warenkorb
    Antwort #3 am: 23. Juli 2013, 14:24:40
    Also ich hab mir das irgendiwe ienfacher vorgestell ^^

    ich komm nicht so richtig weiter wonach muss ich denn suchen ?  :nixweiss:

    mfg :)

    burrito

    • Viel Schreiber
    • Beiträge: 535
    • Geschlecht:
    Re: Informationsabruf im Warenkorb
    Antwort #4 am: 23. Juli 2013, 15:31:09
    Hallo Tonka,

    bitte entschuldige die schnelle Antwort. Sie war leider etwas falsch/ungenau.

    Die Smarties für product_info_V1.html  werden in der includes/modules/product_info.php erzeugt.

    Zunächst werden die ganzen Produkt-Daten in der Datei includes/classes/product.php aus der DB gelesen.
    in der product_info.php werden diese Daten dann zu Smarty-Variablen umgewandelt.

    Am einfachsten ist es Du verfolgst den Weg z.B. von products_price wie er in der product.php aus der DB gelesen wird und dann in der product_info.php zu einer Smarty-Variablen wird.

    Dann erweiterst Du in der product.php die DB-Abfrage um Deine Werte und ergänzt die Smarty-Erzeugung in der product_info.php.

    Das ganze kann man zwar auch voll ins Template auslagern aber wenn Du die Core-Dateien bearbeitest, kannst Du besser abschauen, wie es geht. Bitte Änderungen gut kommentieren, dann klappts auch mit dem Update.

    burrito

    Tonka

    • Fördermitglied
    • Beiträge: 103
    • Geschlecht:
    Re: Informationsabruf im Warenkorb
    Antwort #5 am: 24. Juli 2013, 16:37:40
    Ach burrito ^^

    ich hab alles gemacht was ich sollte glaube ich aber nix passiert oO
    die werte sind

    products_einheit
    products_verpackung

    hier ist der quellcode von der product.php

    Code: PHP  [Auswählen]
    <?php
    /* -----------------------------------------------------------------------------------------
       $Id: product.php 2696 2012-03-04 10:44:41Z web28 $

       modified eCommerce Shopsoftware
       http://www.modified-shop.org

       Copyright (c) 2009 - 2013 [www.modified-shop.org]
       -----------------------------------------------------------------------------------------
       based on:
       (c) 2000-2001 The Exchange Project  (earlier name of osCommerce)
       (c) 2002-2003 osCommerce(Coding Standards); www.oscommerce.com
       (c) 2006 XT-Commerce (product.php 1316 2005-10-21)

       Released under the GNU General Public License
       ---------------------------------------------------------------------------------------*/


    class product {

      /**
      *
      * Constructor
       *
       * @param integer $pID
       * @return product
       */

      function product($pID = 0) {
        $this->pID = (int)$pID; // DokuMan - 2010-08-28 - typecasting
       
        //set default select, using in function getAlsoPurchased, getCrossSells, getReverseCrossSells
        $this->default_select ='p.products_fsk18,
                                p.products_id,
                                p.products_price,
                                p.products_tax_class_id,
                                p.products_image,
                                p.products_quantity,
                                p.products_vpe,
                                p.products_vpe_status,
                                p.products_vpe_value,
                                p.products_model,
                                                            p.products_einheit,
                                                            p.products_verpackung,
                                pd.products_name,
                                pd.products_short_description'
    ;

        // BOF - Tomcraft - 2009-10-30 - noimage.gif is displayed, when no image is defined
        //$this->useStandardImage=false;
        $this->useStandardImage=true;
        // EOF - Tomcraft - 2009-10-30 - noimage.gif is displayed, when no image is defined
        $this->standardImage='noimage.gif';
        if ($pID == 0) {
          $this->isProduct = false;
          return;
        }
        // query for Product
        $group_check = "";
        if (GROUP_CHECK == 'true') {
          $group_check = " AND p.group_permission_".$_SESSION['customers_status']['customers_status_id']."=1 ";
        }

        $fsk_lock = "";
        if ($_SESSION['customers_status']['customers_fsk18_display'] == '0') {
          $fsk_lock = ' AND p.products_fsk18!=1';
        }

        $product_query = "SELECT *
                            FROM "
    .TABLE_PRODUCTS." AS p
                            JOIN "
    .TABLE_PRODUCTS_DESCRIPTION." AS pd ON p.products_status = '1'
                             AND p.products_id = '"
    .$this->pID."'
                             AND pd.products_id = p.products_id "
    .$group_check.$fsk_lock."
                             AND pd.language_id = '"
    .(int)$_SESSION['languages_id']."'";

        $product_query = xtDBquery($product_query);

        if (!xtc_db_num_rows($product_query, true)) {
          $this->isProduct = false;
        } else {
          $this->isProduct = true;
          $this->data = xtc_db_fetch_array($product_query, true);
        }
      }

      /**
       * Query for attributes count
       *
       * @return integer
       */

      function getAttributesCount() {
        $products_attributes_query = xtDBquery("SELECT count(*) AS total
                                                  FROM "
    .TABLE_PRODUCTS_OPTIONS." popt,
                                                       "
    .TABLE_PRODUCTS_ATTRIBUTES." patrib
                                                 WHERE patrib.products_id="
    .$this->pID."
                                                   AND patrib.options_id = popt.products_options_id
                                                   AND popt.language_id = "
    .(int) $_SESSION['languages_id']
                                              );
        $products_attributes = xtc_db_fetch_array($products_attributes_query, true);
        return $products_attributes['total'];
      }

      /**
       * Query for reviews count
       *
       * @return integer
       */

      function getReviewsCount() {
        $reviews_query = xtDBquery("SELECT count(*) AS total
                                      FROM "
    .TABLE_REVIEWS." r,
                                           "
    .TABLE_REVIEWS_DESCRIPTION." rd
                                     WHERE r.products_id = "
    .$this->pID."
                                       AND r.reviews_id = rd.reviews_id
                                       AND rd.languages_id = "
    .(int)$_SESSION['languages_id']."
                                       AND rd.reviews_text !=''
                                  "
    );
        $reviews = xtc_db_fetch_array($reviews_query, true);
        return $reviews['total'];
      }

      /**
       * getReviewsAverage
       *
       * @return array
       */

      function getReviews() {
        $data_reviews = array ();
        $reviews_query = xtDBquery("SELECT r.reviews_rating,
                                           r.reviews_id,
                                           r.customers_name,
                                           r.date_added,
                                           r.last_modified,
                                           r.reviews_read,
                                           rd.reviews_text
                                      FROM "
    .TABLE_REVIEWS." r,
                                           "
    .TABLE_REVIEWS_DESCRIPTION." rd
                                     WHERE r.products_id = '"
    .$this->pID."'
                                       AND r.reviews_id = rd.reviews_id
                                       AND rd.languages_id = '"
    .(int)$_SESSION['languages_id']."'
                                  ORDER BY reviews_id DESC
                                  "
    );
        if (xtc_db_num_rows($reviews_query, true)) {
          $row = 0;
          $data_reviews = array ();
          while ($reviews = xtc_db_fetch_array($reviews_query, true)) {
            $row ++;
            $data_reviews[] = array ('AUTHOR' => $reviews['customers_name'],
                                     'DATE' => xtc_date_short($reviews['date_added']),
                                     'RATING' => xtc_image('templates/'.CURRENT_TEMPLATE.'/img/stars_'.$reviews['reviews_rating'].'.gif', sprintf(TEXT_OF_5_STARS, $reviews['reviews_rating']),'','','itemprop="rating"'),
                                     'TEXT' => nl2br($reviews['reviews_text']));
            if ($row == PRODUCT_REVIEWS_VIEW)
              break;
          }
        }
        return $data_reviews;
      }

      /**
       * return name if set, else return model
       *
       * @return string
       */

      function getBreadcrumbModel() {
        if ($this->data['products_model'] != "") {
          return $this->data['products_model'];
        }
        return $this->data['products_name'];
      }

      /**
       * get also purchased products related to current
       *
       * @return array
       */

      function getAlsoPurchased() {
        global $xtPrice;

        $module_content = array ();

        $fsk_lock = "";
        if ($_SESSION['customers_status']['customers_fsk18_display'] == '0') {
          $fsk_lock = ' AND p.products_fsk18!=1';
        }
        $group_check = "";
        if (GROUP_CHECK == 'true') {
          $group_check = " AND p.group_permission_".$_SESSION['customers_status']['customers_status_id']."=1 ";
        }

        $orders_query = "SELECT ".$this->default_select."
                           FROM "
    .TABLE_ORDERS_PRODUCTS." op1
                           JOIN "
    .TABLE_ORDERS_PRODUCTS." op2 on op2.orders_id = op1.orders_id
                           JOIN "
    .TABLE_ORDERS." o on o.orders_id = op2.orders_id
                           JOIN "
    .TABLE_PRODUCTS." p on p.products_id = op2.products_id
                           JOIN "
    .TABLE_PRODUCTS_DESCRIPTION." pd on pd.products_id = op2.products_id
                          WHERE op1.products_id = "
    .$this->pID."
                            AND op2.products_id != "
    .$this->pID."
                            AND p.products_status = 1
                            AND trim(pd.products_name) != ''
                            AND pd.language_id = "
    .(int) $_SESSION['languages_id']
                                .$group_check
                                .$fsk_lock."
                       GROUP BY p.products_id
                       ORDER BY o.date_purchased desc
                          LIMIT "
    .MAX_DISPLAY_ALSO_PURCHASED;

        $orders_query = xtDBquery($orders_query);
        while ($orders = xtc_db_fetch_array($orders_query, true)) {
          $module_content[] = $this->buildDataArray($orders);
        }
        return $module_content;
      }

      /**
       * Get Cross sells
       *
       * @return array
       */

      function getCrossSells() {
        global $xtPrice;

        $cs_groups = "SELECT products_xsell_grp_name_id
                        FROM "
    .TABLE_PRODUCTS_XSELL."
                       WHERE products_id = '"
    .$this->pID."'
                    GROUP BY products_xsell_grp_name_id"
    ;
        $cs_groups = xtDBquery($cs_groups);
        $cross_sell_data = array ();
        if (xtc_db_num_rows($cs_groups, true) > 0) {
          while ($cross_sells = xtc_db_fetch_array($cs_groups, true)) {
            $fsk_lock = '';
            if ($_SESSION['customers_status']['customers_fsk18_display'] == '0') {
              $fsk_lock = ' AND p.products_fsk18!=1';
            }
            $group_check = "";
            if (GROUP_CHECK == 'true') {
              $group_check = " AND p.group_permission_".$_SESSION['customers_status']['customers_status_id']."=1 ";
            }
            $cross_query = "SELECT ".$this->default_select.",
                                   xp.sort_order
                              FROM "
    .TABLE_PRODUCTS_XSELL." xp,
                                   "
    .TABLE_PRODUCTS." p,
                                   "
    .TABLE_PRODUCTS_DESCRIPTION." pd
                             WHERE xp.products_id = "
    .$this->pID."
                               AND xp.xsell_id = p.products_id "

                                   .$fsk_lock
                                   .$group_check."
                               AND p.products_id = pd.products_id
                               AND xp.products_xsell_grp_name_id='"
    .$cross_sells['products_xsell_grp_name_id']."'
                               AND pd.language_id = "
    .(int)$_SESSION['languages_id']."
                               AND trim(pd.products_name) != ''
                               AND p.products_status = 1
                          ORDER BY xp.sort_order asc"
    ;
            $cross_query = xtDBquery($cross_query);
            if (xtc_db_num_rows($cross_query, true) > 0)
              $cross_sell_data[$cross_sells['products_xsell_grp_name_id']] = array ('GROUP' => xtc_get_cross_sell_name($cross_sells['products_xsell_grp_name_id']),
                                                                                    'PRODUCTS' => array ()
                                                                                   );
            while ($xsell = xtc_db_fetch_array($cross_query, true)) {
              $cross_sell_data[$cross_sells['products_xsell_grp_name_id']]['PRODUCTS'][] = $this->buildDataArray($xsell);
            }
          }
          return $cross_sell_data;
        }
      }

      /**
       * get reverse cross sells
       *
       * @return array
       */

      function getReverseCrossSells() {
        global $xtPrice;
        $fsk_lock = '';
        if ($_SESSION['customers_status']['customers_fsk18_display'] == '0') {
          $fsk_lock = ' AND p.products_fsk18!=1';
        }
        $group_check = '';
        if (GROUP_CHECK == 'true') {
          $group_check = " AND p.group_permission_".$_SESSION['customers_status']['customers_status_id']."=1 ";
        }

        $cross_query = xtDBquery("SELECT ".$this->default_select.",
                                         xp.sort_order
                                    FROM "
    .TABLE_PRODUCTS_XSELL." xp,
                                         "
    .TABLE_PRODUCTS." p,
                                         "
    .TABLE_PRODUCTS_DESCRIPTION." pd
                                   WHERE xp.xsell_id = '"
    .$this->pID."'
                                     AND xp.products_id = p.products_id "

                                         .$fsk_lock
                                         .$group_check."
                                     AND p.products_id = pd.products_id
                                     AND pd.language_id = "
    .(int)$_SESSION['languages_id']."
                                     AND trim(pd.products_name) != ''
                                     AND p.products_status = 1
                                ORDER BY xp.sort_order asc"
    );

        $cross_sell_data = array();
        while ($xsell = xtc_db_fetch_array($cross_query, true)) {
          $cross_sell_data[] = $this->buildDataArray($xsell);
        }
        return $cross_sell_data;
      }

      /**
       * getGraduated
       *
       * @return array
       */

      function getGraduated() {
        global $xtPrice;

        $discount = $xtPrice->xtcCheckDiscount($this->pID);
        $staffel_query = xtDBquery("SELECT quantity,
                                           personal_offer
                                      FROM "
    .TABLE_PERSONAL_OFFERS_BY.(int) $_SESSION['customers_status']['customers_status_id']."
                                     WHERE products_id = "
    .$this->pID."
                                  ORDER BY quantity ASC"
    );
        $staffel = array ();
        while ($staffel_values = xtc_db_fetch_array($staffel_query, true)) {
          $staffel[] = array ('stk' => $staffel_values['quantity'],
                              'price' => $staffel_values['personal_offer']
                             );
        }
        $staffel_data = array ();
        for ($i = 0, $n = sizeof($staffel); $i < $n; $i ++) {
          if ($staffel[$i]['stk'] == 1 || (array_key_exists($i +1, $staffel) && $staffel[$i +1]['stk'] != '')){ //DokuMan - 2010-10-13 - added array_key_exists()
            $quantity = $staffel[$i]['stk'];
            if (array_key_exists($i + 1, $staffel) && $staffel[$i +1]['stk'] != '' && $staffel[$i +1]['stk'] != $staffel[$i]['stk'] + 1) //DokuMan - 2010-10-13 - added array_key_exists()
              $quantity .= ' - '. ($staffel[$i +1]['stk'] - 1);
          } else {
            $quantity = GRADUATED_PRICE_MAX_VALUE.' '.$staffel[$i]['stk'];
          }
         $vpe = '';
         if (isset($this->data) && $this->data['products_vpe_status'] == 1 && $this->data['products_vpe_value'] != 0.0 && $staffel[$i]['price'] > 0) {
            $vpe = $staffel[$i]['price'] - $staffel[$i]['price'] / 100 * $discount;
            $vpe = $vpe * (1 / $this->data['products_vpe_value']);
            $vpe = BASICPRICE_VPE_TEXT.$xtPrice->xtcFormat($vpe, true, $this->data['products_tax_class_id']).TXT_PER.xtc_get_vpe_name($this->data['products_vpe']);
          }
          $staffel_data[$i] = array ('QUANTITY' => $quantity,
                                     'VPE' => $vpe,
                                     'PRICE' => $xtPrice->xtcFormat($staffel[$i]['price'] - $staffel[$i]['price'] / 100 * $discount, true, $this->data['products_tax_class_id']));
        }
        return $staffel_data;
      }

      /**
       * valid flag
       *
       * @return boolean
       */

      function isProduct() {
        return $this->isProduct;
      }

      /**
       * getBuyNowButton
       *
       * @param integer $id
       * @param string $name
       * @return string
       */

      function getBuyNowButton($id, $name) {
        global $PHP_SELF;
        return '<a href="'.xtc_href_link(basename($PHP_SELF), 'action=buy_now&BUYproducts_id='.$id.'&'.xtc_get_all_get_params(array ('action')), 'NONSSL').'">'.xtc_image_button('button_buy_now.gif', TEXT_BUY.$name.TEXT_NOW).'</a>';
      }

      /**
       * getVPEtext
       *
       * @param unknown_type $product
       * @param unknown_type $price
       * @return unknown
       */

      function getVPEtext($product, $price) {
        global $main;
        return $main->getVPEtext($product, $price); //change to main class
      }

      /**
       * buildDataArray
       *
       * @param array $array
       * @return array
       */

      function buildDataArray(&$array,$image='thumbnail') {
        global $xtPrice,$main;

        //get tax rate
        $tax_rate = isset($xtPrice->TAX[$array['products_tax_class_id']]) ? $xtPrice->TAX[$array['products_tax_class_id']] : 0; //DokuMan: set Undefined index

        //get products price , returns array
        $products_price = $xtPrice->xtcGetPrice($array['products_id'], $format = true, 1, $array['products_tax_class_id'], $array['products_price'], 1);


        //create buy now button
        $buy_now = '';
        if ($_SESSION['customers_status']['customers_status_show_price'] != '0' && defined('SHOW_BUTTON_BUY_NOW') && SHOW_BUTTON_BUY_NOW != 'false') {
          if ($_SESSION['customers_status']['customers_fsk18'] == '1') {
            if (isset($array['products_fsk18']) && $array['products_fsk18'] == '0')
              $buy_now = $this->getBuyNowButton($array['products_id'], $array['products_name']);
          } else {
            $buy_now = $this->getBuyNowButton($array['products_id'], $array['products_name']);
          }
        }

        //get $shipping_status_name, $shipping_status_image
        if (isset($array['products_shippingtime']) && ACTIVATE_SHIPPING_STATUS == 'true') {
          $shipping_status_name = $main->getShippingStatusName($array['products_shippingtime']);
          $shipping_status_image = $main->getShippingStatusImage($array['products_shippingtime']);
        } else {
          $shipping_status_name = '';
          $shipping_status_image = '';
        }
       
        //get products image, imageinfo array
        $products_image = $this->productImage($array['products_image'], $image);    
        $p_img = substr($products_image,strlen(DIR_WS_BASE)); //web28 - 2011-01-24 - FIX DIR_WS_BASE
        $img_attr = '';
        if (file_exists($p_img)) {
          list($width, $height, $type, $img_attr) = getimagesize($p_img);
        }

        //products data array
        $productData = array ('PRODUCTS_NAME' => $array['products_name'],
                              'COUNT' => isset($array['ID']) ? $array['ID'] : 0,
                              'PRODUCTS_ID'=> $array['products_id'],
                              'PRODUCTS_MODEL'=> isset($array['products_model']) ? $array['products_model'] : '',
                                                      'PRODUCTS_EAN' => isset($array['products_ean']) ? $array['products_ean'] : '',
                                                      'PRODUCTS_MANUFACTURERS_MODEL' => isset($array['products_manufacturers_model']) ? $array['products_manufacturers_model'] : '',
                              'PRODUCTS_VPE' => $main->getVPEtext($array, $products_price['plain']),
                              'PRODUCTS_IMAGE' => $products_image,
                              'PRODUCTS_IMAGE_SIZE' => $img_attr,
                              'PRODUCTS_IMAGE_TITLE' => str_replace('"','',$array['products_name']),
                              'PRODUCTS_LINK' => xtc_href_link(FILENAME_PRODUCT_INFO, xtc_product_link($array['products_id'], $array['products_name'])),
                              'PRODUCTS_PRICE' => $products_price['formated'],
                              'PRODUCTS_TAX_INFO' => $main->getTaxInfo($tax_rate),
                              'PRODUCTS_SHIPPING_LINK' => $main->getShippingLink(),
                                                      'PRODUCTS_EINHEIT' =>$array['products_einheit'],
                                                      'PRODUCTS_VERPACKUNG' =>$array['products_verpackung'],
                              'PRODUCTS_BUTTON_BUY_NOW' => $buy_now,
                              'PRODUCTS_SHIPPING_NAME'=>$shipping_status_name,
                              'PRODUCTS_SHIPPING_IMAGE'=>$shipping_status_image,
                              'PRODUCTS_DESCRIPTION' => isset($array['products_description']) ? $array['products_description'] : '', //DokuMan - 2010-02-26 - set Undefined index
                              'PRODUCTS_QUANTITY' => isset($array['products_quantity']) ? $array['products_quantity'] : '',
                              'PRODUCTS_EXPIRES' => isset($array['expires_date']) ? $array['expires_date'] : 0, //DokuMan - 2010-02-26 - set Undefined index
                              'PRODUCTS_CATEGORY_URL' => isset($array['cat_url']) ? $array['cat_url'] : '', //DokuMan - 2010-02-26 - set Undefined index
                              'PRODUCTS_SHORT_DESCRIPTION' => isset($array['products_short_description']) ? $array['products_short_description'] : '', //DokuMan - 2010-02-26 - set Undefined index
                              'PRODUCTS_FSK18' => isset($array['products_fsk18']) ? $array['products_fsk18'] : 0, //DokuMan - 2010-02-26 - set Undefined index
                              'PRODUCTS_BUTTON_DETAILS' => '<a href="'.xtc_href_link(FILENAME_PRODUCT_INFO, xtc_product_link($array['products_id'], $array['products_name'])).'">'.xtc_image_button('button_product_more.gif', $array['products_name'].TEXT_NOW).'</a>' //GTB - 2010-08-27 make Button Details global
                             );

        return $productData;
      }

      /**
       * productImage
       *
       * @param string $name
       * @param string $type
       * @return string
       */

      function productImage($name, $type) {
        switch ($type) {
          case 'info' :
            $path = DIR_WS_INFO_IMAGES;
            break;
          case 'thumbnail' :
            $path = DIR_WS_THUMBNAIL_IMAGES;
            break;
          case 'popup' :
            $path = DIR_WS_POPUP_IMAGES;
            break;
        }

        if (empty($name)) { // vr - 2010-04-09 no distinction between "name is null" and "name == ''"
          // BOF - Tomcraft - 2009-11-12 - noimage.gif is displayed, when no image is defined
          //if ($this->useStandardImage == 'true' && $this->standardImage != '') // comment in when "noimage.gif" should be displayed when there is no image defined in the database
          //  return $path.$this->standardImage; // comment in when "noimage.gif" should be displayed when there is no image defined in the database
          return $name; // comment out when "noimage.gif" should be displayed when there is no image defined in the database
          // EOF - Tomcraft - 2009-11-12 - noimage.gif is displayed, when no image is defined
        } else {
          // check if image exists
          if (!file_exists($path.$name)) {
            if ($this->useStandardImage == 'true' && $this->standardImage != '') {
              $name = $this->standardImage;
            }
          }
          return $path.$name;
        }
      }
    }
    ?>

    und hier ist der Quellqode von der product_info.php

    Code: PHP  [Auswählen]
    <?php
    /* -----------------------------------------------------------------------------------------
       $Id: product_info.php 3072 2012-06-18 15:01:13Z hhacker $

       modified eCommerce Shopsoftware
       http://www.modified-shop.org

       Copyright (c) 2009 - 2013 [www.modified-shop.org]
       -----------------------------------------------------------------------------------------
       based on:
       (c) 2000-2001 The Exchange Project  (earlier name of osCommerce)
       (c) 2002-2003 osCommerce(product_info.php,v 1.94 2003/05/04); www.oscommerce.com
       (c) 2003 nextcommerce (product_info.php,v 1.46 2003/08/25); www.nextcommerce.org
       (c) 2006 xt:Commerce (product_info.php 1317 2005-10-21); www.(( Wir dulden keine kommerziellen Werbelinks - Bitte <a href="index.php?topic=3013.0">Forenregeln</a> beachten! ))

       Released under the GNU General Public License
       -----------------------------------------------------------------------------------------
       Third Party contribution:
       Customers Status v3.x  (c) 2002-2003 Copyright Elari elari@free.fr | www.unlockgsm.com/dload-osc/ | CVS : http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/elari/?sortby=date#dirlist
       New Attribute Manager v4b - Autor: Mike G | mp3man@internetwork.net | http://downloads.ephing.com
       Cross-Sell (X-Sell) Admin 1 - Autor: Joshua Dechant (dreamscape)
       Released under the GNU General Public License
       ---------------------------------------------------------------------------------------*/


    /******* SHOPGATE **********/
    if(strpos(MODULE_PAYMENT_INSTALLED, 'shopgate.php') !== false && strpos($_SESSION['customers_status']['customers_status_payment_unallowed'], 'shopgate') === false){
      include_once DIR_FS_CATALOG.'includes/external/shopgate/base/includes/modules/product_info.php';
    }
    /******* SHOPGATE **********/

    //include needed functions
    require_once (DIR_FS_INC.'xtc_check_categories_status.inc.php');
    require_once (DIR_FS_INC.'xtc_get_products_mo_images.inc.php');
    require_once (DIR_FS_INC.'xtc_get_vpe_name.inc.php');
    require_once (DIR_FS_INC.'get_cross_sell_name.inc.php');
    require_once (DIR_FS_INC.'xtc_date_short.inc.php');  // for specials

    if (!is_object($product) || !$product->isProduct()) {

      // product not found in database
      $error = TEXT_PRODUCT_NOT_FOUND;
      include (DIR_WS_MODULES.FILENAME_ERROR_HANDLER);

    } else {

      $info_smarty = new Smarty;
      $info_smarty->assign('tpl_path', 'templates/'.CURRENT_TEMPLATE.'/');
      include_once(DIR_WS_INCLUDES.'modules/payment/klarna/display_klarna_price.php'); // Klarna payment module integration

      // defaults
      $hide_qty = 0;

      // xs:booster start (v1.041)
      if (isset($_SESSION['xtb0']['tx']) && is_array($_SESSION['xtb0']['tx'])) {
        $xsb_tx = array();
        foreach($_SESSION['xtb0']['tx'] as $tx) {
          if($tx['products_id'] == $product->data['products_id']) {
            $xsb_tx = $tx;
            break;
          }
        }
            if (isset($xsb_tx['products_id'])) {           // replace || with && ?
          $hide_qty = (@$xsb_tx['XTB_ALLOW_USER_CHQTY'] != 'true' || $xsb_tx['products_id'] == $product->data['products_id']) ? 1 : 0;
          if(isset($xsb_tx['XTB_REDIRECT_USER_TO']) && $xsb_tx['products_id'] == $product->data['products_id']) {
            $info_smarty->assign('XTB_REDIRECT_USER_TO', $xsb_tx['XTB_REDIRECT_USER_TO']);
          }
            }
      }

      if (ACTIVATE_NAVIGATOR == 'true') {
        include (DIR_WS_MODULES.'product_navigator.php');
      }

      // Update products_viewed
      if ($_SESSION['customers_status']['customers_status_id'] != 0) {
        xtc_db_query("-- product_info.php
            UPDATE "
    .TABLE_PRODUCTS_DESCRIPTION."
               SET products_viewed = products_viewed+1
             WHERE products_id = '"
    .$product->data['products_id']."'
               AND language_id = "
    .$_SESSION['languages_id']);
      }

      // Get manufacturer name etc. for the product page
      $manufacturer_query = xtc_db_query("SELECT m.manufacturers_id,
                                                 m.manufacturers_name,
                                                 m.manufacturers_image,
                                                 mi.manufacturers_url
                                            FROM "
    . TABLE_MANUFACTURERS . " m
                                       LEFT JOIN "
    . TABLE_MANUFACTURERS_INFO . " mi
                                              ON (m.manufacturers_id = mi.manufacturers_id
                                             AND mi.languages_id = '"
    . (int)$_SESSION['languages_id'] . "'),
                                                 "
    . TABLE_PRODUCTS . " p
                                           WHERE p.products_id = '"
    . $product->data['products_id'] . "'
                                             AND p.manufacturers_id = m.manufacturers_id"
    );
      if (xtc_db_num_rows($manufacturer_query)) {
        $manufacturer = xtc_db_fetch_array($manufacturer_query);
        $info_smarty->assign('MANUFACTURER_IMAGE', (!empty($manufacturer['manufacturers_image']) ? DIR_WS_IMAGES.$manufacturer['manufacturers_image'] : ''));
        $info_smarty->assign('MANUFACTURER', $manufacturer['manufacturers_name']);
        $info_smarty->assign('MANUFACTURER_LINK', xtc_href_link(FILENAME_DEFAULT, xtc_manufacturer_link($manufacturer['manufacturers_id'], $manufacturer['manufacturers_name'])));
      }





      // build products price
      $products_price = $xtPrice->xtcGetPrice(
                                    $product->data['products_id'],
                                    $format = true,
                                    1,
                                    $product->data['products_tax_class_id'],
                                    $product->data['products_price'],
                                    1
                                  );

      // 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));
      }

      // show expiry date of active special products
      $special_expires_date_query = "SELECT expires_date
                                       FROM "
    .TABLE_SPECIALS."
                                      WHERE products_id = '"
    .$product->data['products_id']."'
                                        AND status = '1'"
    ;
      $special_expires_date_query = xtDBquery($special_expires_date_query);
      $sDate = xtc_db_fetch_array($special_expires_date_query, true);
      $info_smarty->assign('PRODUCTS_EXPIRES', $sDate['expires_date'] != '0000-00-00 00:00:00' ? xtc_date_short($sDate['expires_date']) : '');

      // FSK18
      $info_smarty->assign('PRODUCTS_FSK18', $product->data['products_fsk18'] == '1' ? 'true' : '');

      //get shippingstatus image and name
      if (ACTIVATE_SHIPPING_STATUS == 'true') {
        $info_smarty->assign('SHIPPING_NAME', $main->getShippingStatusName($product->data['products_shippingtime']));
        $info_smarty->assign('SHIPPING_IMAGE', $main->getShippingStatusImage($product->data['products_shippingtime']));
      }

      // form tags
      $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')));
      $info_smarty->assign('FORM_END', '</form>');

      //products formated price
      $info_smarty->assign('PRODUCTS_PRICE', $products_price['formated']);

      //get products vpe
      $info_smarty->assign('PRODUCTS_VPE',$main->getVPEtext($product->data, $products_price['plain'])); //web28 - 2012-04-17 - use classes function getVPEtext()
     
     
     
     
      $products_vpe_name = xtc_get_vpe_name($product->data['products_vpe']);
            $products_vpe_value = $product->data['products_vpe_value'];
            $info_smarty->assign('PRODUCTS_VPE', $xtPrice->xtcFormat($products_price['plain'] * (1 / $products_vpe_value), true).TXT_PER.$products_vpe_name);
            $info_smarty->assign('PRODUCTS_VPE_VALUE', $products_vpe_value);
            $info_smarty->assign('PRODUCTS_VPE_NAME', $products_vpe_name);
                    $info_smarty->assign('PRODUCTS_EINHEIT', $products_einheit);
                    $info_smarty->assign('PRODUCTS_VERPACKUNG', $products_verpackung);

     
     
     
     
     
      // products id
      $info_smarty->assign('PRODUCTS_ID', $product->data['products_id']);
     
      // products name
      $info_smarty->assign('PRODUCTS_NAME', $product->data['products_name']);

      // price incl tax and shipping link
      if ($_SESSION['customers_status']['customers_status_show_price'] != '0') {
        if (isset($xtPrice->TAX[$product->data['products_tax_class_id']])) {
          $tax_info = $main->getTaxInfo($xtPrice->TAX[$product->data['products_tax_class_id']]);
          $info_smarty->assign('PRODUCTS_TAX_INFO', $tax_info);
        }
        $info_smarty->assign('PRODUCTS_SHIPPING_LINK',$main->getShippingLink());
      }

      $info_smarty->assign('PRODUCTS_MODEL', $product->data['products_model']);
      $info_smarty->assign('PRODUCTS_EAN', $product->data['products_ean']);
      $info_smarty->assign('PRODUCTS_MANUFACTURERS_MODEL', $product->data['products_manufacturers_model']);
      $info_smarty->assign('PRODUCTS_QUANTITY', $product->data['products_quantity']);
      $info_smarty->assign('PRODUCTS_WEIGHT', $product->data['products_weight']);
      $info_smarty->assign('PRODUCTS_STATUS', $product->data['products_status']);
      $info_smarty->assign('PRODUCTS_EINHEIT', $product->data['products_einheit']);
      $info_smarty->assign('PRODUCTS_VERPACKUNG', $product->data['products_verpackung']);
      $info_smarty->assign('PRODUCTS_ORDERED', $product->data['products_ordered']);
      $info_smarty->assign('PRODUCTS_PRINT', xtc_image_button('print.gif', $product->data['products_name'], 'onclick="javascript:window.open(\''.xtc_href_link(FILENAME_PRINT_PRODUCT_INFO, 'products_id='.$product->data['products_id']).'\', \'popup\', \'toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,resizable=yes,copyhistory=no, '.POPUP_PRODUCT_PRINT_SIZE.'\')"'));
      $info_smarty->assign('PRODUCTS_DESCRIPTION', stripslashes($product->data['products_description']));
      $info_smarty->assign('PRODUCTS_SHORT_DESCRIPTION', stripslashes($product->data['products_short_description']));
      $info_smarty->assign('PRODUCTS_IMAGE', $product->productImage($product->data['products_image'], 'info'));
      $info_smarty->assign('PRODUCTS_POPUP_LINK', 'javascript:popupWindow(\''.xtc_href_link(FILENAME_POPUP_IMAGE, 'pID='.$product->data['products_id'].'&imgID=0').'\')');
      $info_smarty->assign('PRODUCTS_URL', !empty($product->data['products_url']) ? sprintf(TEXT_MORE_INFORMATION, xtc_href_link(FILENAME_REDIRECT, 'action=product&id='.$product->data['products_id'], 'NONSSL', true, false)) : '');

      // more images
      $mo_images = xtc_get_products_mo_images($product->data['products_id']);
      if ($mo_images != false) {
        $more_images_data = array();
        foreach ($mo_images as $img) {
          $mo_img = $product->productImage($img['image_name'], 'info');
          $more_images_data[] = array ('PRODUCTS_IMAGE' => $mo_img,
                                       'PRODUCTS_POPUP_LINK' => 'javascript:popupWindow(\''.xtc_href_link(FILENAME_POPUP_IMAGE,
                                       'pID='.$product->data['products_id'].'&imgID='.$img['image_nr']).'\')'
                                       );
          //next 2 lines only needed for non modified templates
          $info_smarty->assign('PRODUCTS_IMAGE_'.$img['image_nr'], $mo_img);
          $info_smarty->assign('PRODUCTS_POPUP_LINK_'.$img['image_nr'], 'javascript:popupWindow(\''.xtc_href_link(FILENAME_POPUP_IMAGE, 'pID='.$product->data['products_id'].'&imgID='.$img['image_nr']).'\')');
        }
        $info_smarty->assign('more_images', $more_images_data);
      }

      // product discount
      if ($_SESSION['customers_status']['customers_status_public'] == 1 && $_SESSION['customers_status']['customers_status_discount'] != '0.00') {
        $discount = 0.00;
        $discount = $_SESSION['customers_status']['customers_status_discount'];
        if ($product->data['products_discount_allowed'] < $_SESSION['customers_status']['customers_status_discount'])
          $discount = $product->data['products_discount_allowed'];
        if ($discount != '0.00')
          $info_smarty->assign('PRODUCTS_DISCOUNT', $discount.'%');
      }

      //include modules
      if ($_SESSION['customers_status']['customers_status_graduated_prices'] == 1) {
        include (DIR_WS_MODULES.FILENAME_GRADUATED_PRICE);
      }
      include (DIR_WS_MODULES.'product_attributes.php');
      include (DIR_WS_MODULES.'product_reviews.php');
      include (DIR_WS_MODULES.FILENAME_PRODUCTS_MEDIA);
      include (DIR_WS_MODULES.FILENAME_ALSO_PURCHASED_PRODUCTS);
      include (DIR_WS_MODULES.FILENAME_CROSS_SELLING);

      // date available/added
      if ($product->data['products_date_available'] > date('Y-m-d H:i:s')) {
        $info_smarty->assign('PRODUCTS_DATE_AVIABLE', sprintf(TEXT_DATE_AVAILABLE, xtc_date_long($product->data['products_date_available'])));
        $info_smarty->assign('PRODUCTS_DATE_AVAILABLE', sprintf(TEXT_DATE_AVAILABLE, xtc_date_long($product->data['products_date_available'])));
      } elseif ($product->data['products_date_added'] != '0000-00-00 00:00:00') {
        $info_smarty->assign('PRODUCTS_ADDED', sprintf(TEXT_DATE_ADDED, xtc_date_long($product->data['products_date_added'])));
      }

      // get default product_info template
      if ($product->data['product_template'] == '' || $product->data['product_template'] == 'default') {
        $files = array ();
        if ($dir = opendir(DIR_FS_CATALOG.'templates/'.CURRENT_TEMPLATE.'/module/product_info/')) {
          while ($file = readdir($dir)) {
            if (is_file(DIR_FS_CATALOG.'templates/'.CURRENT_TEMPLATE.'/module/product_info/'.$file) && (substr($file, -5) == ".html") && ($file != "index.html") && (substr($file, 0, 1) !=".")) {
              $files[] = $file;
            }
          }
          closedir($dir);
        }
        sort($files);
        $product->data['product_template'] = $files[0];
      }

      // session products history
      $i = isset($_SESSION['tracking']['products_history']) ? count($_SESSION['tracking']['products_history']) : 0;
      if ($i > 6) { $i = 6; array_shift($_SESSION['tracking']['products_history']); }
      $_SESSION['tracking']['products_history'][$i] = $product->data['products_id'];
      $_SESSION['tracking']['products_history'] = array_unique($_SESSION['tracking']['products_history']);

      $info_smarty->assign('language', $_SESSION['language']);

      // set cache ID
      if (!CacheCheck()) {
        $info_smarty->caching = 0;
        $product_info = $info_smarty->fetch(CURRENT_TEMPLATE.'/module/product_info/'.$product->data['product_template']);
      } else {
        $info_smarty->caching = 1;
        $info_smarty->cache_lifetime = CACHE_LIFETIME;
        $info_smarty->cache_modified_check = CACHE_CHECK;
        $cache_id = $product->data['products_id'].$_SESSION['language'].$_SESSION['customers_status']['customers_status_name'].$_SESSION['currency'];
        $product_info = $info_smarty->fetch(CURRENT_TEMPLATE.'/module/product_info/'.$product->data['product_template'], $cache_id);
      }
      $smarty->assign('main_content', $product_info);
    }
    ?>

    weisst du was ich falsch mache??

    den aufruf in der product_listing_v1.html gestalte ich ja so

    {$module_data.PRODUCTS_EINHEIT}
    {$module_data.PRODUCTS_Verpackung}

    aber da passiert gar nix, ich sitz da wirklich schon seit gestern nachmittag dran und verzweifle hier völlig,
    wenn du dir die zeit nehmen könntest da mal drüber zu schauen wär ich dir sehr sehr dankbar  :daumen-dreh:

    WayneTsun

    • Fördermitglied
    • Beiträge: 1.082
    • Geschlecht:
    Re: Informationsabruf im Warenkorb
    Antwort #6 am: 24. Juli 2013, 17:14:33
    Hi Tonka,

    beim schnellen Durchsehen finde ich in der product_info.php, dass Du da zweimal das gleiche assignst. Einmal hier:
    Code: PHP  [Auswählen]
    $products_vpe_name = xtc_get_vpe_name($product->data['products_vpe']);
                $products_vpe_value = $product->data['products_vpe_value'];
                $info_smarty->assign('PRODUCTS_VPE', $xtPrice->xtcFormat($products_price['plain'] * (1 / $products_vpe_value), true).TXT_PER.$products_vpe_name);
                $info_smarty->assign('PRODUCTS_VPE_VALUE', $products_vpe_value);
                $info_smarty->assign('PRODUCTS_VPE_NAME', $products_vpe_name);
                        $info_smarty->assign('PRODUCTS_EINHEIT', $products_einheit);
                        $info_smarty->assign('PRODUCTS_VERPACKUNG', $products_verpackung);

    und dann noch hier:
    Code: PHP  [Auswählen]
     $info_smarty->assign('PRODUCTS_STATUS', $product->data['products_status']);
          $info_smarty->assign('PRODUCTS_EINHEIT', $product->data['products_einheit']);
          $info_smarty->assign('PRODUCTS_VERPACKUNG', $product->data['products_verpackung']);
          $info_smarty->assign('PRODUCTS_ORDERED', $product->data['products_ordered']);

    Und die Abfrage in der product_info_xy.html sollte eigentlich mit {$PRODUCTS_VERPACKUNG} funktionieren.

    Beste Grüße,
    Wayne

    Tonka

    • Fördermitglied
    • Beiträge: 103
    • Geschlecht:
    Re: Informationsabruf im Warenkorb
    Antwort #7 am: 24. Juli 2013, 18:32:41
    Hallihallo Wayne,

    also in der product_info_xy.html funktioniert dass alles aber mir gehts ja um die product_listing_xy.html
    die info da läuft alles bestens nur eben nicht im categorie listing, wie ich merke habe ich mich da wahrscheinlich auch nicht klar genug zu geäußert sry....

    Also das Kategorielisting soll quasi die einheit und die verpackung auslesen das ist hier das problem, und des weiteren möchte ich auch dass dich diese 2 felder im warenkorb auslesen kann damit der kunde nicht

    1x milch (wieviel denn was denn) im korb sieht sondern
    1 "Flasche" Milch / 750"ml"

    denn so sieht er ja nur einmal den artikel aber welche einheiten und verpackungsgrößen soll ausgelesen und angezeigt werden können ...

    ich hoffe du hast es verstanden ? ich tu mich immer ein bissel schwer mit der erklärerei :)

    ach ja vielen Dank schon mal für die vorangegangene Mühe  :thumbs:

    Tonka

    • Fördermitglied
    • Beiträge: 103
    • Geschlecht:
    Re: Informationsabruf im Warenkorb
    Antwort #8 am: 24. Juli 2013, 21:02:37
    DER WARENKORB LÄUFT JETZT RICHTIG SUPER DANKE an alle HELFERLEIN :)  :-B

    das einzige was nicht funktioniert ist die 2 felder in der product_listing übersicht anzeigen zu lassen
    muss man für die produktübersichtsseite etwa seperat irgendwas programmieren?? :-O

    mfg

    karsta.de

    • Experte
    • Beiträge: 3.159
    Re: Informationsabruf im Warenkorb
    Antwort #9 am: 25. Juli 2013, 08:28:40
    Hallo Tonka, um es im productlisting anzuzeigen, muß auch die Datei includes/modules/default.php angepasst bzw. erweitert werden ->   $listing_sql = .... p.products_einheit, p.products_verpackung,
    und im _product_listing_v1.html sollte es dann {$module_data.PRODUCTS_EINHEIT} aufgerufen werden und erscheinen.

    Tonka

    • Fördermitglied
    • Beiträge: 103
    • Geschlecht:
    Re: Informationsabruf im Warenkorb
    Antwort #10 am: 26. Juli 2013, 08:08:45
     :king: Das gilt für alle die mir die richtigen Hinweise und Codeschnipsel gebastelt haben. Ich kann nur sagen ich liebe diese Community :)

    Lebendig wie eh und je !

    Das beigefügte Bild zeigt die product_listing.html

    Ich habe euch nur mal ein Beispiel zurecht gebastelt damit ihr seht für welchen scheiss^^ ihr die Zeit geopfert habt.

    Ich bin jetzt mega zufrieden und kann mit diesen 3 Werten den ganzen shop auf den kopf stellen :) vielen lieben Dank bei Gelegenheit gibts Revanche aber ich warne euch vor ich steh noch am Anfang.

    [ Für Gäste sind keine Dateianhänge sichtbar ]

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