Desciption how to add a drop down list with desired delivery date to your order form [for Zen Cart 1.3.7]
Note: in the following description I use the table prefix zen_
If you have no prefix, or another then you'll have to change it yourself.
The file & directory names were taken from a local Win XP + XAMPP environment. At linux webhosting all "\" should be the other way "/"
Note2: I have to check the email confirmation.
The desired order date seems to be missing in the email confirmation.
1. Add field to zen_orders table
Code:ALTER TABLE zen_orders ADD order_delivery_date date AFTER ip_address;
* FRONT-END *
2. tpl_checkout_shipping_default.php
File: includes\templates\classic\templates\tpl_checkout_shipping_default.php
In the checkout form I added a dropdown field with dates.
Note that I excluded some dates (1st & 2nd Christmas day and 1st January) because there won't be any deliveries.
Just before <fieldset class="shipping" id="comments"> I added:
3. order.phpCode:<fieldset class="shipping" id="delivery_date"> <legend><?php echo TABLE_HEADING_DELIVERY_DATE; ?></legend> <select name="delivery_date"> <?php for ($i=0, $n=50; $i < $n; $i++) { $now[$i] = strtotime ("+$i day", time()); if ( strftime ("%w",$now[$i])<>0 AND strftime ("%m-%d",$now[$i])<>"12-25" AND strftime ("%m-%d",$now[$i])<>"12-26" AND strftime ("%m-%d",$now[$i])<>"01-01" ){ echo '<option value="'.strftime ("%Y-%m-%d",$now[$i]).'">'.strftime ("%A %d %B %Y",$now[$i]).'</option>'; } } ?> </select> </fieldset>
File: \includes\classes\order.php
I added the order_delivery_date field in some queries:
the last 3 lines:Code:$order_query = "select customers_id, customers_name, customers_company, customers_street_address, customers_suburb, customers_city, customers_postcode, customers_state, customers_country, customers_telephone, customers_email_address, customers_address_format_id, delivery_name, delivery_company, delivery_street_address, delivery_suburb, delivery_city, delivery_postcode, delivery_state, delivery_country, delivery_address_format_id, billing_name, billing_company, billing_street_address, billing_suburb, billing_city, billing_postcode, billing_state, billing_country, billing_address_format_id, payment_method, payment_module_code, shipping_method, shipping_module_code, coupon_code, cc_type, cc_owner, cc_number, cc_expires, currency, currency_value, date_purchased, orders_status, last_modified, order_total, order_tax, ip_address from " . TABLE_ORDERS . " where orders_id = '" . (int)$order_id . "'";
andCode:date_purchased, orders_status, last_modified, order_total, order_tax, ip_address, order_delivery_date from " . TABLE_ORDERS . " where orders_id = '" . (int)$order_id . "'";
the last 3 lines:Code:$this->info = array('currency' => $order->fields['currency'], 'currency_value' => $order->fields['currency_value'], 'payment_method' => $order->fields['payment_method'], 'payment_module_code' => $order->fields['payment_module_code'], 'shipping_method' => $order->fields['shipping_method'], 'shipping_module_code' => $order->fields['shipping_module_code'], 'coupon_code' => $order->fields['coupon_code'], 'cc_type' => $order->fields['cc_type'], 'cc_owner' => $order->fields['cc_owner'], 'cc_number' => $order->fields['cc_number'], 'cc_expires' => $order->fields['cc_expires'], 'date_purchased' => $order->fields['date_purchased'], 'orders_status' => $order_status->fields['orders_status_name'], 'last_modified' => $order->fields['last_modified'], 'total' => $order->fields['order_total'], 'tax' => $order->fields['order_tax'], 'ip_address' => $order->fields['ip_address'] );
andCode:'ip_address' => $order->fields['ip_address'], 'delivery_date' => $order->fields['delivery_date'] );
the last 3 linesCode:$this->info = array('order_status' => DEFAULT_ORDERS_STATUS_ID, 'currency' => $_SESSION['currency'], 'currency_value' => $currencies->currencies[$_SESSION['currency']]['value'], 'payment_method' => $GLOBALS[$class]->title, 'payment_module_code' => $GLOBALS[$class]->code, 'coupon_code' => $coupon_code->fields['coupon_code'], // 'cc_type' => (isset($GLOBALS['cc_type']) ? $GLOBALS['cc_type'] : ''), // 'cc_owner' => (isset($GLOBALS['cc_owner']) ? $GLOBALS['cc_owner'] : ''), // 'cc_number' => (isset($GLOBALS['cc_number']) ? $GLOBALS['cc_number'] : ''), // 'cc_expires' => (isset($GLOBALS['cc_expires']) ? $GLOBALS['cc_expires'] : ''), // 'cc_cvv' => (isset($GLOBALS['cc_cvv']) ? $GLOBALS['cc_cvv'] : ''), 'shipping_method' => $_SESSION['shipping']['title'], 'shipping_module_code' => $_SESSION['shipping']['id'], 'shipping_cost' => $_SESSION['shipping']['cost'], 'subtotal' => 0, 'tax' => 0, 'total' => 0, 'tax_groups' => array(), 'comments' => (isset($_SESSION['comments']) ? $_SESSION['comments'] : ''), 'ip_address' => $_SESSION['customers_ip_address'] . ' - ' . $_SERVER['REMOTE_ADDR'] );
andCode:'ip_address' => $_SESSION['customers_ip_address'] . ' - ' . $_SERVER['REMOTE_ADDR'], 'delivery_date' => $_SESSION['delivery_date'] );
changed into:Code:'ip_address' => $_SESSION['customers_ip_address'] . ' - ' . $_SERVER['REMOTE_ADDR'] ); zen_db_perform(TABLE_ORDERS, $sql_data_array);
4. header_php.phpCode:'ip_address' => $_SESSION['customers_ip_address'] . ' - ' . $_SERVER['REMOTE_ADDR'], 'delivery_date' => $this->info['delivery_date'] ); zen_db_perform(TABLE_ORDERS, $sql_data_array);
File: \includes\modules\pages\checkout_shipping\header_php.php
I added some lines of code after:
I added:Code:if (isset($_SESSION['comments'])) { $comments = $_SESSION['comments']; }
and afterCode:if (isset($_SESSION['delivery_date'])) { $delivery_date = $_SESSION['delivery_date']; }
I added:Code:$comments = $_SESSION['comments'];
5. language file checkout_shipping.phpCode:if (zen_not_null($_POST['delivery_date'])) { $_SESSION['delivery_date'] = zen_db_prepare_input($_POST['delivery_date']); } $delivery_date = $_SESSION['delivery_date'];
File: \includes\languages\english\checkout_shipping.php
For every language you'll have to insert:
* BACK-END *Code:define('TABLE_HEADING_DELIVERY_DATE', 'Desired Delivery Date');
6. order.php
File: \admin\includes\classes\order.php
I added to:
I added the order_delivery_date to the query:Code:$order = $db->Execute("select cc_cvv, customers_name, customers_company, customers_street_address, customers_suburb, customers_city, customers_postcode, customers_id, customers_state, customers_country, customers_telephone, customers_email_address, customers_address_format_id, delivery_name, delivery_company, delivery_street_address, delivery_suburb, delivery_city, delivery_postcode, delivery_state, delivery_country, delivery_address_format_id, billing_name, billing_company, billing_street_address, billing_suburb, billing_city, billing_postcode, billing_state, billing_country, billing_address_format_id, coupon_code, payment_method, payment_module_code, shipping_method, shipping_module_code, cc_type, cc_owner, cc_number, cc_expires, currency, currency_value, date_purchased, orders_status, last_modified, order_total, order_tax, ip_address
andCode:order_total, order_tax, ip_address, order_delivery_date
the last 3 lines:Code:$this->info = array('currency' => $order->fields['currency'], 'currency_value' => $order->fields['currency_value'], 'payment_method' => $order->fields['payment_method'], 'payment_module_code' => $order->fields['payment_module_code'], 'shipping_method' => $order->fields['shipping_method'], 'shipping_module_code' => $order->fields['shipping_module_code'], 'coupon_code' => $order->fields['coupon_code'], 'cc_type' => $order->fields['cc_type'], 'cc_owner' => $order->fields['cc_owner'], 'cc_number' => $order->fields['cc_number'], 'cc_cvv' => $order->fields['cc_cvv'], 'cc_expires' => $order->fields['cc_expires'], 'date_purchased' => $order->fields['date_purchased'], 'orders_status' => $order->fields['orders_status'], 'total' => $order->fields['order_total'], 'tax' => $order->fields['order_tax'], 'last_modified' => $order->fields['last_modified'], 'ip_address' => $order->fields['ip_address'] );
7. orders.phpCode:'ip_address' => $order->fields['ip_address'], 'delivery_date' => $order->fields['order_delivery_date'] );
File: \admin\orders.php
I changed:
to:Code:EMAIL_TEXT_DATE_ORDERED . ' ' . zen_date_long($check_status->fields['date_purchased']) . "\n\n" . strip_tags($notify_comments) .
andCode:EMAIL_TEXT_DATE_ORDERED . ' ' . zen_date_long($check_status->fields['date_purchased']) . "\n\n" . EMAIL_TEXT_DELIVERY_DATE . ' ' . zen_date_long($check_status->fields[' delivery_date']) . "\n\n" . strip_tags($notify_comments) .
into:Code:$html_msg['EMAIL_TEXT_DATE_ORDERED'] = EMAIL_TEXT_DATE_ORDERED . ' ' . zen_date_long($check_status->fields['date_purchased']); $html_msg['EMAIL_TEXT_STATUS_COMMENTS'] = nl2br($notify_comments);
andCode:$html_msg['EMAIL_TEXT_DATE_ORDERED'] = EMAIL_TEXT_DATE_ORDERED . ' ' . zen_date_long($check_status->fields['date_purchased']); $html_msg['EMAIL_TEXT_DELIVERY_DATE'] = EMAIL_TEXT_DELIVERY_DATE . ' ' . zen_date_long($check_status->fields['delivery_date']); $html_msg['EMAIL_TEXT_STATUS_COMMENTS'] = nl2br($notify_comments);
intoCode:<tr> <td class="main"><strong><?php echo ENTRY_DATE_PURCHASED; ?></strong></td> <td class="main"><?php echo zen_date_long($order->info['date_purchased']); ?></td> </tr>
andCode:<tr> <td class="main"><strong><?php echo ENTRY_DATE_PURCHASED; ?></strong></td> <td class="main"><?php echo zen_date_long($order->info['date_purchased']); ?></td> </tr> <tr> <td class="main"><strong><?php echo ENTRY_DELIVERY_DATE; ?></strong></td> <td class="main"><?php echo zen_date_long($order->info['delivery_date']); ?></td> </tr>
into:Code:<td class="dataTableHeadingContent" align="center"><?php echo TABLE_HEADING_DATE_PURCHASED; ?></td> <td class="dataTableHeadingContent" align="right"><?php echo TABLE_HEADING_STATUS; ?></td>
andCode:<td class="dataTableHeadingContent" align="center"><?php echo TABLE_HEADING_DATE_PURCHASED; ?></td> <td class="dataTableHeadingContent" align="center"><?php echo TABLE_HEADING_DELIVERY_DATE; ?></td> <td class="dataTableHeadingContent" align="right"><?php echo TABLE_HEADING_STATUS; ?></td>
intoCode:<td class="dataTableContent" align="center"><?php echo zen_datetime_short($orders->fields['date_purchased']); ?></td> <td class="dataTableContent" align="right"><?php echo $orders->fields['orders_status_name']; ?></td>
andCode:<td class="dataTableContent" align="center"><?php echo zen_datetime_short($orders->fields['date_purchased']); ?></td> <td class="dataTableContent" align="center"><?php echo zen_datetime_short($orders->fields['order_delivery_date']); ?></td> <td class="dataTableContent" align="right"><?php echo $orders->fields['orders_status_name']; ?></td>
into:Code:$orders_query_raw = "select o.orders_id, o.customers_id, o.customers_name, o.payment_method, o.shipping_method, o.date_purchased, o.last_modified,
andCode:$orders_query_raw = "select o.orders_id, o.customers_id, o.customers_name, o.payment_method, o.shipping_method, o.date_purchased, o.order_delivery_date, o.last_modified,
into:Code:$orders_query_raw = "select o.orders_id, o.customers_id, o.customers_name, o.payment_method, o.shipping_method, o.date_purchased, o.last_modified,
andCode:$orders_query_raw = "select o.orders_id, o.customers_id, o.customers_name, o.payment_method, o.shipping_method, o.date_purchased, o.order_delivery_date, o.last_modified,
into:Code:$orders_query_raw = "select o.orders_id, o.customers_id, o.customers_name, o.payment_method, o.shipping_method, o.date_purchased, o.last_modified,
8. the invoice invoice.phpCode:$orders_query_raw = "select o.orders_id, o.customers_id, o.customers_name, o.payment_method, o.shipping_method, o.date_purchased, o.order_delivery_date, o.last_modified,
File: \admin\invoice.php
I changed
the last line into:Code:$order_check = $db->Execute("select cc_cvv, customers_name, customers_company, customers_street_address, customers_suburb, customers_city, customers_postcode, customers_state, customers_country, customers_telephone, customers_email_address, customers_address_format_id, delivery_name, delivery_company, delivery_street_address, delivery_suburb, delivery_city, delivery_postcode, delivery_state, delivery_country, delivery_address_format_id, billing_name, billing_company, billing_street_address, billing_suburb, billing_city, billing_postcode, billing_state, billing_country, billing_address_format_id, payment_method, cc_type, cc_owner, cc_number, cc_expires, currency, currency_value, date_purchased, orders_status, last_modified
andCode:currency_value, date_purchased, orders_status, last_modified, order_delivery_date
intoCode:<tr> <td class="main"><strong><?php echo ENTRY_DATE_PURCHASED; ?></strong></td> <td class="main"><?php echo zen_date_long($order->info['date_purchased']); ?></td> </tr>
9. packingslip: packingslip.phpCode:<tr> <td class="main"><strong><?php echo ENTRY_DATE_PURCHASED; ?></strong></td> <td class="main"><?php echo zen_date_long($order->info['date_purchased']); ?></td> </tr> <tr> <td class="main"><strong><?php echo ENTRY_DELIVERY_DATE; ?></strong></td> <td class="main"><?php echo zen_date_long($order->info['delivery_date']); ?></td> </tr>
File: \admin\packingslip.php
In:
I changed the last line in:Code:$order_check = $db->Execute("select cc_cvv, customers_name, customers_company, customers_street_address, customers_suburb, customers_city, customers_postcode, customers_state, customers_country, customers_telephone, customers_email_address, customers_address_format_id, delivery_name, delivery_company, delivery_street_address, delivery_suburb, delivery_city, delivery_postcode, delivery_state, delivery_country, delivery_address_format_id, billing_name, billing_company, billing_street_address, billing_suburb, billing_city, billing_postcode, billing_state, billing_country, billing_address_format_id, payment_method, cc_type, cc_owner, cc_number, cc_expires, currency, currency_value, date_purchased, orders_status, last_modified
and changedCode:currency_value, date_purchased, orders_status, last_modified, order_delivery_date
into:Code:<tr> <td class="main"><strong><?php echo ENTRY_DATE_PURCHASED; ?></strong></td> <td class="main"><?php echo zen_date_long($order->info['date_purchased']); ?></td> </tr>
10. language file for ordersCode:<tr> <td class="main"><strong><?php echo ENTRY_DATE_PURCHASED; ?></strong></td> <td class="main"><?php echo zen_date_long($order->info['date_purchased']); ?></td> </tr> <tr> <td class="main"><strong><?php echo ENTRY_DELIVERY_DATE; ?></strong></td> <td class="main"><?php echo zen_date_long($order->info['delivery_date']); ?></td> </tr>
File: \includes\languages\english\orders.php
add:
11. language file for invoiceCode:define('TABLE_HEADING_DELIVERY_DATE', 'Desired Delivery Date'); define('ENTRY_DELIVERY_DATE', 'Desired Delivery Date:');
File: \includes\languages\english\invoice.php
add:
12. language file for packingslipCode:define('ENTRY_DELIVERY_DATE', 'Desired Delivery Date:');
File: \includes\languages\english\packingslip.php
add:
I hope that other people can use this description of the modification that I made. If you have any comments / additions / corrections: please post in this thread....Code:define('ENTRY_DELIVERY_DATE', 'Desired Delivery Date:');








Bookmarks