Продолжаем совершенствовать Viruemart. На этот раз я покажу как добавить на страницу подтверждения заказа выбор даты и времени желаемой доставки. Опять будем использовать наш любимый JQuery. В результате получим следующую картинку:
Мы не будем изобретать велосипед и возьмем готовый руссифицированный плагин календаря - http://yapro.ru/web-master/javascript/legkiy-kalendari.html .Скачиваем и размещаем файлы latest.js в папке js своего шаблона, а latest.css в папке css своего шаблона. Как подключить сам JQuery и включить режим NoConflict я уже не раз писал в своем блоге, например в Делаем красивый выбор валюты - select с картинками. Повторяться не буду.
Нам нужно будет только подготовить поле в базе данных, вывести input на страницу подтверждения заказа, сохранять значение выбранной даты в базе и вывести его в просмотр заказа в админке. Приступим.
1. В нашу базу данных в таблицу 'jos_vm_orders' (у Вас префик может быть не 'jos') добавляем поле
2. Открываем /components/com_virtuemart/themes/default/templates/checkout/get_final_confirmation.tpl.php
Как расположить поле ввода даты и времени? После поля комментариев? Сбоку от него? На Ваше усмотрение - все зависит от Вашей верстки. Для примера мы расположим его перед полем "Комментарии к заказу". Находим в 92 строке (номера строк могут не совпадать с Вашими):
<div align="center"> <?php echo $VM_LANG->_('PHPSHOP_CHECKOUT_CUSTOMER_NOTE') ?>:<br />
и ПЕРЕД этим кодом добавляем:
<?php echo '<div align="center">Вы можете указать желаемую дату и время доставки</div><br/>'; JFactory::getDocument()->addStyleSheet(JURI::base().'templates/НазваниеВашегоШаблона/css/latest.css'); ?> <input class="datepickerTimeField" value="" name="delivery_date" id="acpro_inp0"> <script src="/<?php echo JURI::base(); ?>templates/НазваниеВашегоШаблона /js/latest.js" type="text/javascript"></script> <script> jQuery(".datepickerTimeField").datepicker({ numberOfMonths:2, showOn :"both", defaultDate:"<?php echo date( 'j.m.Y G:i', time()+86400); ?>", minDate: "<?php echo date( 'j.m.Y G:i', time()+86400); ?>", maxDate: "+1m" }); </script> </div>
Где numberOfMonths:2 - Количество месяцев для показа
showOn :"both" - Календарь вызывается и кнопкой и из самого поля
defaultDate:"<?php echo date( 'j.m.Y G:i', time()+86400); ?>" - Начальная дата выбора - следующий день
minDate: "<?php echo date( 'j.m.Y G:i', time()+86400); ?>"
maxDate: "+1m" - Максимальная дата выбора - 1 месяц
Конвертируем в UTF без ВОМ и сохраняем.
Открываем /administrator/components/com_virtuemart/classes/ps_checkout.php
Находим в районе 1000 строки
// Collect all fields and values to store them! $fields = array(
и ПЕРЕД этим кодом пишем:
jimport('joomla.utilities.date'); if($d['delivery_date']=='') { $delivery_date=null; } else { $jdate = new JDate($d['delivery_date']); $delivery_date=$jdate->toMySQL(); }
далее чуть ниже после
'mdate' => $timestamp,
вставляем
'delivery_date' => $delivery_date,
закрываем и сохраняем файл. В принципе, весь функционал у нас уже готов. Выможете попробовать оформить заказ и посмотреть как работает наш календарь - при сохранение заказа в базу должна упасть выбраная дата. Осталось вывести это поле в админку. Расположим его в левом верхнем углу в блоке "Информация о заказе" после поля "Код купона:".
Открываем /administrator/components/com_virtuemart/html/order.order_print.php и находим в 90 строке
<?php if( PSHOP_COUPONS_ENABLE == '1') { ?> <tr> <td><strong><?php echo $VM_LANG->_('PHPSHOP_COUPON_COUPON_HEADER') ?>:</strong></td> <td><?php if( $db->f("coupon_code") ) $db->p("coupon_code"); else echo '-'; ?></td> </tr> <?php } ?>
и ПОСЛЕ этого кода добавляем:
<tr> <td><strong>Дата и время доставки:</strong></td> <td><?php if( $db->f("delivery_date") ) $db->p("delivery_date "); else echo '-'; ?></td> </tr>
Конвертируем в UTF без ВОМ и сохраняем.
Все. Бежим к своим заказчикам и продам новую возможность :)