Dieses Dokument wurde erstellt von MaleBorg vom Zen-Cart.at Team Getestet wurde es mit Zen-Cart 1.3.8 und Zen-Cart 1.3.9 unter PHP 5.3 Anleitung für Lieferzeitangabe beim Anlegen eines Artikels in Zen-Cart ----------------------------------------------------------------------- ACHTUNG: Es werden einige Originaldateien sowie die Datenbank geändert. Bitte machen Sie VORHER ein Backup!!! In den Pfadangaben gibt es 2 Dinge zu beachten: IHRTEMPLATE ist zu ersetzen durch den von Ihnen benutzen Templatenamen IHRADMIN ist zu ersetzen durch Ihren Pfad zum Adminbereich, sofern Sie das Adminverzeichnis umbenannt haben sollten. Für das Bearbeiten der Dateien, insbesondere der Sprachdateien empfehle ich Ihnen das Programm NOTEPAD++ WICHTIG: Diese Anleitung ist sehr umfangreich und benötigt volle Konzentration. Bitte führen Sie die einzelnen Schritte gewissenhaft aus. TEIL 1 - Modifikation Artikel anlegen: ------------------------------------- 1) Im Adminbereich --> Tools --> SQL Patches einspielen folgendes eintragen: ALTER TABLE `products` ADD `products_delivery_time_status` INT( 11 ) NOT NULL DEFAULT '1'; Damit wird das Feld products_delivery_time_status in der Tabelle products angelegt. In diesem wird die Lieferzeit ID hinterlegt. 2) a)Öffnen Sie die Datei IHRADMIN/includes/modules/product/collect_info.php Suchen Sie nach: $parameters = array('products_name' => '', 'products_description' => '', 'products_url' => '', 'products_id' => '', 'products_quantity' => '', 'products_model' => '', 'products_image' => '', 'products_price' => '', 'products_virtual' => DEFAULT_PRODUCT_PRODUCTS_VIRTUAL, 'products_weight' => '', 'products_date_added' => '', 'products_last_modified' => '', 'products_date_available' => '', 'products_status' => '', 'products_tax_class_id' => DEFAULT_PRODUCT_TAX_CLASS_ID, 'manufacturers_id' => '', 'products_quantity_order_min' => '', 'products_quantity_order_units' => '', 'products_priced_by_attribute' => '', 'product_is_free' => '', 'product_is_call' => '', 'products_quantity_mixed' => '', 'product_is_always_free_shipping' => DEFAULT_PRODUCT_PRODUCTS_IS_ALWAYS_FREE_SHIPPING, 'products_qty_box_status' => PRODUCTS_QTY_BOX_STATUS, 'products_quantity_order_max' => '0', 'products_sort_order' => '0', 'products_discount_type' => '0', 'products_discount_type_from' => '0', 'products_price_sorter' => '0', 'master_categories_id' => '', ); und ersetzen Sie es durch: $parameters = array('products_name' => '', 'products_description' => '', 'products_url' => '', 'products_id' => '', 'products_quantity' => '', 'products_model' => '', 'products_image' => '', 'products_price' => '', 'products_virtual' => DEFAULT_PRODUCT_PRODUCTS_VIRTUAL, 'products_weight' => '', 'products_date_added' => '', 'products_last_modified' => '', 'products_date_available' => '', 'products_status' => '', 'products_tax_class_id' => DEFAULT_PRODUCT_TAX_CLASS_ID, 'manufacturers_id' => '', 'products_quantity_order_min' => '', 'products_quantity_order_units' => '', 'products_priced_by_attribute' => '', 'product_is_free' => '', 'product_is_call' => '', 'products_quantity_mixed' => '', 'product_is_always_free_shipping' => DEFAULT_PRODUCT_PRODUCTS_IS_ALWAYS_FREE_SHIPPING, 'products_qty_box_status' => PRODUCTS_QTY_BOX_STATUS, 'products_quantity_order_max' => '0', 'products_sort_order' => '0', 'products_discount_type' => '0', 'products_discount_type_from' => '0', 'products_price_sorter' => '0', 'master_categories_id' => '', 'products_delivery_time_status' => '' ); b) In der gleichen Datei suchen Sie nach if (isset($_GET['pID']) && empty($_POST)) { $product = $db->Execute("select pd.products_name, pd.products_description, pd.products_url, p.products_id, p.products_quantity, p.products_model, p.products_image, p.products_price, p.products_virtual, p.products_weight, p.products_date_added, p.products_last_modified, date_format(p.products_date_available, '%Y-%m-%d') as products_date_available, p.products_status, p.products_tax_class_id, p.manufacturers_id, p.products_quantity_order_min, p.products_quantity_order_units, p.products_priced_by_attribute, p.product_is_free, p.product_is_call, p.products_quantity_mixed, p.product_is_always_free_shipping, p.products_qty_box_status, p.products_quantity_order_max, p.products_sort_order, p.products_discount_type, p.products_discount_type_from, p.products_price_sorter, p.master_categories_id from " . TABLE_PRODUCTS . " p, " . TABLE_PRODUCTS_DESCRIPTION . " pd where p.products_id = '" . (int)$_GET['pID'] . "' and p.products_id = pd.products_id and pd.language_id = '" . (int)$_SESSION['languages_id'] . "'"); und ersetzen es durch if (isset($_GET['pID']) && empty($_POST)) { $product = $db->Execute("select pd.products_name, pd.products_description, pd.products_url, p.products_id, p.products_quantity, p.products_model, p.products_image, p.products_price, p.products_virtual, p.products_weight, p.products_date_added, p.products_last_modified, date_format(p.products_date_available, '%Y-%m-%d') as products_date_available, p.products_status, p.products_tax_class_id, p.manufacturers_id, p.products_quantity_order_min, p.products_quantity_order_units, p.products_priced_by_attribute, p.product_is_free, p.product_is_call, p.products_quantity_mixed, p.product_is_always_free_shipping, p.products_qty_box_status, p.products_quantity_order_max, p.products_sort_order, p.products_discount_type, p.products_discount_type_from, p.products_price_sorter, p.master_categories_id, p.products_delivery_time_status from " . TABLE_PRODUCTS . " p, " . TABLE_PRODUCTS_DESCRIPTION . " pd where p.products_id = '" . (int)$_GET['pID'] . "' and p.products_id = pd.products_id and pd.language_id = '" . (int)$_SESSION['languages_id'] . "'"); c) In der gleichen Datei suchen Sie nach
(YYYY-MM-DD) und fügen direkt DAVOR ein '', 'text' => '')); $delivery_time_status_array[] = array('id' => 1, 'text' => TEXT_PRODUCTS_DELIVERY_TIME_STATUS_1); $delivery_time_status_array[] = array('id' => 2, 'text' => TEXT_PRODUCTS_DELIVERY_TIME_STATUS_2); ?> products_delivery_time_status); ?> 3) In der Datei IHRADMIN/includes/languages/german/product.php fügen Sie folgendes ein: define('TEXT_PRODUCTS_DELIVERY_TIME_STATUS', 'Lieferzeitangabe:'); define('TEXT_PRODUCTS_DELIVERY_TIME_STATUS_1', 'Lieferzeit 3 - 5 Tage'); define('TEXT_PRODUCTS_DELIVERY_TIME_STATUS_2', 'Lieferzeit 2 - 4 Wochen'); Sollten Sie mehrere Sprachen in Ihrem Adminbereich verwenden, müssen Sie es in den entsprechenden Dateien ebenfalls einfügen. 4) Öffnen Sie die Datei IHRADMIN/includes/modules/update_products.php Suchen Sie nach $sql_data_array = array('products_quantity' => $products_quantity, 'products_type' => zen_db_prepare_input($_GET['product_type']), 'products_model' => zen_db_prepare_input($_POST['products_model']), 'products_price' => $products_price, 'products_date_available' => $products_date_available, 'products_weight' => $products_weight, 'products_status' => zen_db_prepare_input($_POST['products_status']), 'products_virtual' => zen_db_prepare_input($_POST['products_virtual']), 'products_tax_class_id' => zen_db_prepare_input($_POST['products_tax_class_id']), 'manufacturers_id' => $manufacturers_id, 'products_quantity_order_min' => zen_db_prepare_input($_POST['products_quantity_order_min']), 'products_quantity_order_units' => zen_db_prepare_input($_POST['products_quantity_order_units']), 'products_priced_by_attribute' => zen_db_prepare_input($_POST['products_priced_by_attribute']), 'product_is_free' => zen_db_prepare_input($_POST['product_is_free']), 'product_is_call' => zen_db_prepare_input($_POST['product_is_call']), 'products_quantity_mixed' => zen_db_prepare_input($_POST['products_quantity_mixed']), 'product_is_always_free_shipping' => zen_db_prepare_input($_POST['product_is_always_free_shipping']), 'products_qty_box_status' => zen_db_prepare_input($_POST['products_qty_box_status']), 'products_quantity_order_max' => zen_db_prepare_input($_POST['products_quantity_order_max']), 'products_sort_order' => (int)zen_db_prepare_input($_POST['products_sort_order']), 'products_discount_type' => zen_db_prepare_input($_POST['products_discount_type']), 'products_discount_type_from' => zen_db_prepare_input($_POST['products_discount_type_from']), 'products_price_sorter' => zen_db_prepare_input($_POST['products_price_sorter']), ); und ersetzen Sie es durch $sql_data_array = array('products_quantity' => $products_quantity, 'products_type' => zen_db_prepare_input($_GET['product_type']), 'products_model' => zen_db_prepare_input($_POST['products_model']), 'products_price' => $products_price, 'products_date_available' => $products_date_available, 'products_weight' => $products_weight, 'products_status' => zen_db_prepare_input($_POST['products_status']), 'products_virtual' => zen_db_prepare_input($_POST['products_virtual']), 'products_tax_class_id' => zen_db_prepare_input($_POST['products_tax_class_id']), 'manufacturers_id' => $manufacturers_id, 'products_quantity_order_min' => zen_db_prepare_input($_POST['products_quantity_order_min']), 'products_quantity_order_units' => zen_db_prepare_input($_POST['products_quantity_order_units']), 'products_priced_by_attribute' => zen_db_prepare_input($_POST['products_priced_by_attribute']), 'product_is_free' => zen_db_prepare_input($_POST['product_is_free']), 'product_is_call' => zen_db_prepare_input($_POST['product_is_call']), 'products_quantity_mixed' => zen_db_prepare_input($_POST['products_quantity_mixed']), 'product_is_always_free_shipping' => zen_db_prepare_input($_POST['product_is_always_free_shipping']), 'products_qty_box_status' => zen_db_prepare_input($_POST['products_qty_box_status']), 'products_quantity_order_max' => zen_db_prepare_input($_POST['products_quantity_order_max']), 'products_sort_order' => (int)zen_db_prepare_input($_POST['products_sort_order']), 'products_discount_type' => zen_db_prepare_input($_POST['products_discount_type']), 'products_discount_type_from' => zen_db_prepare_input($_POST['products_discount_type_from']), 'products_price_sorter' => zen_db_prepare_input($_POST['products_price_sorter']), 'products_delivery_time_status' => zen_db_prepare_input($_POST['products_delivery_time_status']), ); 5) Installation Teil 1 abgeschlossen. Damit können Sie nun beim Anlegen oder bearbeiten des Artikels eine der beiden Lieferzeiten auswählen. Sollten Sie mehr als 2 Angaben benötigen, müssen Sie die Angaben unter 2c) und 3) entsprechend erweitern. TEIL 2 - Modifikation Shop, damit die Lieferzeit auch angezeigt wird -------------------------------------------------------------------- 1) Öffnen Sie die Datei includes/languages/german.php und fügen Sie Folgendes ein // Modifikation Lieferanzeige define('TEXT_PRODUCTS_DELIVERY_TIME_STATUS_1', 'Lieferzeit 3 - 5 Tage'); define('TEXT_PRODUCTS_DELIVERY_TIME_STATUS_2', 'Lieferzeit 2 - 4 Wochen'); Sollten Sie beim Teil 1 mehr als 2 Angaben gemacht haben, oder die Texte geändert haben, dann müssen Sie diese Einträge hier entsprechend anpassen. Sollten Sie mehrere Sprachen im Shop verwenden, dann müssen Sie diese Einträge in die entsprechenden Dateien einfügen. 2) Öffnen Sie die Datei includes/templates/IHRTEMPLATE/templates/tpl_product_info_display.php Suchen Sie nach Etwas oberhalb davon finden Sie die Zeilen echo $display_qty; echo $display_button; Fügen Sie davor diese Zeilen ein if ($products_delivery_time == 1) { echo TEXT_PRODUCTS_DELIVERY_TIME_STATUS_1 . '

'; } elseif ($products_delivery_time == 2){ echo TEXT_PRODUCTS_DELIVERY_TIME_STATUS_2 . '

'; } Es sollte nun wie folgt ausschauen if ($products_delivery_time == 1) { echo TEXT_PRODUCTS_DELIVERY_TIME_STATUS_1 . '

'; } elseif ($products_delivery_time == 2){ echo TEXT_PRODUCTS_DELIVERY_TIME_STATUS_2 . '

'; } echo $display_qty; echo $display_button; Sollten Sie mehr als 2 Angaben in Teil 1 angelegt haben, dann müssen Sie diese Einträge entsprechend anpassen. 3) Öffnen Sie die Datei includes/modules/pages/product_info/main_template_vars.php Ersetzen Sie $sql = "select p.products_id, pd.products_name, pd.products_description, p.products_model, p.products_quantity, p.products_image, pd.products_url, p.products_price, p.products_tax_class_id, p.products_date_added, p.products_date_available, p.manufacturers_id, p.products_quantity, p.products_weight, p.products_priced_by_attribute, p.product_is_free, p.products_qty_box_status, p.products_quantity_order_max, p.products_discount_type, p.products_discount_type_from, p.products_sort_order, p.products_price_sorter from " . TABLE_PRODUCTS . " p, " . TABLE_PRODUCTS_DESCRIPTION . " pd where p.products_status = '1' and p.products_id = '" . (int)$_GET['products_id'] . "' and pd.products_id = p.products_id and pd.language_id = '" . (int)$_SESSION['languages_id'] . "'"; durch $sql = "select p.products_id, pd.products_name, pd.products_description, p.products_model, p.products_quantity, p.products_image, pd.products_url, p.products_price, p.products_tax_class_id, p.products_date_added, p.products_date_available, p.manufacturers_id, p.products_quantity, p.products_weight, p.products_priced_by_attribute, p.product_is_free, p.products_qty_box_status, p.products_quantity_order_max, p.products_discount_type, p.products_discount_type_from, p.products_sort_order, p.products_price_sorter, p.products_delivery_time_status from " . TABLE_PRODUCTS . " p, " . TABLE_PRODUCTS_DESCRIPTION . " pd where p.products_status = '1' and p.products_id = '" . (int)$_GET['products_id'] . "' and pd.products_id = p.products_id and pd.language_id = '" . (int)$_SESSION['languages_id'] . "'"; Suchen Sie nach $product_info = $db->Execute($sql); und fügen direkt darunter ein $products_delivery_time = $product_info->fields['products_delivery_time_status']; 4) Im Adminbereich --> Tools --> SQL Patches installieren folgendes einfügen und auf SENDEN klicken. INSERT INTO `configuration` ( `configuration_id` , `configuration_title` , `configuration_key` , `configuration_value` , `configuration_description` , `configuration_group_id` , `sort_order` , `last_modified` , `date_added` , `use_function` , `set_function` ) VALUES ( '', 'Display delivery time', 'PRODUCT_LIST_DELIVERY_TIME', '0', 'Do you want to display the delivery time?', '8', '7', now() , now(), NULL , NULL); INSERT INTO `configuration_language` ( `configuration_id` , `configuration_title` , `configuration_key` , `configuration_language_id` , `configuration_description` , `last_modified` , `date_added` ) VALUES ( '', 'Lieferzeit anzeigen', 'PRODUCT_LIST_DELIVERY_TIME', '43', 'Wollen Sie die Lieferzeit in der Artikelliste anzeigen?', now(), now()); 5) Öffnen Sie die Datei /includes/languages/german/index.php Suchen Sie nach define('TABLE_HEADING_WEIGHT','Gewicht'); und fügen direkt darunter ein define('TABLE_HEADING_DELIVERY_TIME','Lieferzeit'); Sollten Sie mehrere Sprachen im Shop verwenden, dann müssen Sie diese Einträge in die entsprechenden Dateien einfügen. 6) Öffnen Sie die Datei includes/index_filters/default_filter.php und suchen nach case 'PRODUCT_LIST_WEIGHT': $listing_sql .= "p.products_weight " . ($sort_order == 'd' ? 'desc' : '') . ", pd.products_name"; break; Direkt danach folgendes einfügen case 'PRODUCT_LIST_DELIVERY_TIME': $listing_sql .= "p.products_delivery_time_status " . ($sort_order == 'd' ? 'desc' : '') . ", pd.products_name"; break; 7) Öffnen Sie die Datei includes/modules/pages/index/main_template_vars.php und suchen nach 'PRODUCT_LIST_WEIGHT' => PRODUCT_LIST_WEIGHT, Direkt dahinter folgendes einfügen 'PRODUCT_LIST_DELIVERY_TIME' => PRODUCT_LIST_DELIVERY_TIME, In der gleichen Datei suchen Sie auch nach case 'PRODUCT_LIST_WEIGHT': $select_column_list .= 'p.products_weight, '; break; und fügen direkt darunter ein case 'PRODUCT_LIST_DELIVERY_TIME': $select_column_list .= 'p.products_delivery_time_status, '; break; 8) Öffnen Sie die Datei includes/modules/product_listing.php und suchen nach case 'PRODUCT_LIST_WEIGHT': $lc_text = TABLE_HEADING_WEIGHT; $lc_align = 'right'; $zc_col_count_description++; break; Direkt dahinter folgendes einfügen case 'PRODUCT_LIST_DELIVERY_TIME': $lc_text = TABLE_HEADING_DELIVERY_TIME; $lc_align = 'center'; $zc_col_count_description++; break; In der gleichen Datei suchen Sie nach case 'PRODUCT_LIST_WEIGHT': $lc_align = 'right'; $lc_text = $listing->fields['products_weight']; break; Direkt dahinter einfügen case 'PRODUCT_LIST_DELIVERY_TIME': $lc_align = 'center'; $lc_text = '
'; if ($listing->fields['products_delivery_time_status'] == 1) { $lc_text .= TEXT_PRODUCTS_DELIVERY_TIME_STATUS_1; } elseif ($listing->fields['products_delivery_time_status'] == 2){ $lc_text .= TEXT_PRODUCTS_DELIVERY_TIME_STATUS_2; } $lc_text .= '
'; break; 9) Teil 2 ist abgeschlossen Damit die Lieferzeit nun in der Artikeliste auftaucht, müssen Sie im Adminbereich --> Konfiguration --> Artikelliste --> Lieferzeit anzeigen eine Zahl größer 0 eingeben. Die Zahl gibt die Spalte an, in der die Lieferampel auftauchen soll.