Обновление от 15.10.2015
Была мелкая ошибка в скрипте checkout.without_register_form.php, а именно при добавлении записи о заказе в базу '#__{vm}_orders', лишняя переменная - order_discsumm. Из-за чего весь скрипт падал. Сейчас все исправлено, можете скачать полный архив внизу статьи
Обновление от 01.08.2014
Серьезно отредактирован файл checkout.without_register_form. Добавлена автоматическая регистрация пользователя, либо если пользователь уже есть, то делается проверка email и вешается на данного пользователя. Учтены скидки, налоги и другие мелкие баги. Архив внизу страницы обновлен, пользуйтесь на здоровье :)
Задача: Максимально упростить форму заказа
Задача конечно не новая и что бы не изобретать велосипед, нашел одну полезную
Редактироваться будут файлы:
administrator\components\com_virtuemart\classes\ps_checkout.php (добавлена функция email_receipt_without_register для формирование писем клиенту и администратору)
administrator\components\com_virtuemart\html\checkout.index.php (Изменено условие. Если пользователь не зарегистрирован, то выводим быструю форму заказа)
administrator\components\com_virtuemart\html\checkout.without_register_form.php (Форма быстрого заказа, а также вся обработка)
components\com_virtuemart\themes\default\theme.css (стили для формы)
components\com_virtuemart\themes\default\templates\pages\shop.cart.tpl.php (Вывод формы быстрого заказа в корзине)
components\com_virtuemart\themes\default\templates\order_emails\ confirmation_email_without_reg.tpl.php (html шаблон самого письма)
Для начала необходимо отредактировать файл checkout.index.php что бы не зарегистрированному пользователю показывалась быстрая форма, описывать много не буду, все файлы будут доступны для скачивания внизу страницы и вы сможете сравнить ваши файлы и мои
else { if (!empty($auth['user_id'])) { // USER IS LOGGED IN, BUT NO REGISTERED CUSTOMER // WE NEED SOME ADDITIONAL INFORMATION HERE, // SO REDIRECT HIM TO shop/shopper_add $vmLogger->info( $VM_LANG->_('PHPSHOP_NO_CUSTOMER',false) ); include(PAGEPATH. 'checkout_register_form.php'); } else { // user is not logged in ?> <form name="switch_register_form"> <input class="button" type="button" name="register" value="Войти" onclick="document.getElementById('layer_register').style.display='none'; document.getElementById('layer_without_register').style.display='none'; document.getElementById('layer_login').style.display='block';" /> <form name="switch_register_form"> <input class="button" type="button" name="register" value="Купить без регистрации" onclick="document.getElementById('layer_register').style.display='none'; document.getElementById('layer_login').style.display='none'; document.getElementById('layer_without_register').style.display='block';" /> <input class="button" type="button" name="register" value="Зарегестрироваться и купить" onclick="document.getElementById('layer_register').style.display='block'; document.getElementById('layer_without_register').style.display='none'; document.getElementById('layer_login').style.display='none';" /> </form> <div id="layer_login" style="display: none;"> <br /> <?php include(PAGEPATH. 'checkout.login_form.php'); ?> </div> <div id="layer_without_register"> <br /> <div style="width: 100%; text-align:center;"><strong><h2>Купить без регистрации</h2></strong></div> <?php include(PAGEPATH. 'checkout.without_register_form.php'); ?> </div> <div id="layer_register" style="display: none;"> <br /> <?php include(PAGEPATH. 'checkout_register_form.php'); ?> </div> <?php } }
Далее необходимо в папку administrator\components\com_virtuemart\html добавить новый файл обработки быстрого заказа checkout.without_register_form.php, его содержимое вставлять не буду, но скажу лишь, что в нем прописана обработка файлов из вашей корзины, запуск функции на отправку письма администратору и клиенту, а также проверка на заполнение форм. Помимо стандартной php проверки используется jQuery Validation.
jQ(document).ready(function () { jQ("#without_register_form") .submit(function () { jQ("#uploadform").submit(); }) .validate({ rules: { "checkout[name]": { required: true, }, "checkout[phone]": { required: true, }, "checkout[email]": { required: true, } }, messages: { "checkout[name]": { required: "Это поле обязательно для заполнения", }, "checkout[phone]": { required: "Это поле обязательно для заполнения", }, "checkout[email]": { required: "Это поле обязательно для заполнения", } } }); });
В файл administrator\components\com_virtuemart\classes\ps_checkout.php добавил новую функцию email_receipt_without_register, для формирования письма админку и пользователю.
После данной работы, необходимо подредактировать ещё три файла шаблона virtuemart:
components\com_virtuemart\themes\default\theme.css (стили для формы)
components\com_virtuemart\themes\default\templates\pages\shop.cart.tpl.php (Вывод формы быстрого заказа в корзине)
components\com_virtuemart\themes\default\templates\order_emails\ confirmation_email_without_reg.tpl.php (html шаблон самого письма)
Вот в принципе и все, написал очень-очень кратко, кому будет интересно, думаю сам разберется, так как данные файлы будут доступны для скачивания внизу данной статьи.