Быстрое оформление заказа

2014-04-05
4.8 / 5 (5 голосов)

Наша жизнь - это лишь время от рождения и до смерти, и как мы её проживем зависит только от нас, но зачастую этого времени совсем не хватает. Так и у меня, есть масса хороших статей в голове связанных с работой, которые могут пригодится очень многим людям, но нет времени просто все описать, однако сегодня я затрагиваю как раз тему времени, а именно быстрое оформление заказа в интернет-магазине joomla + virtuemart 1.9


Обновление от 15.10.2015

Была мелкая ошибка в скрипте checkout.without_register_form.php, а именно при добавлении записи о заказе в базу '#__{vm}_orders', лишняя переменная - order_discsumm. Из-за чего весь скрипт падал. Сейчас все исправлено, можете скачать полный архив внизу статьи


Обновление от 01.08.2014

Серьезно отредактирован файл checkout.without_register_form. Добавлена автоматическая регистрация пользователя, либо если пользователь уже есть, то делается проверка email и вешается на данного пользователя. Учтены скидки, налоги и другие мелкие баги. Архив внизу страницы обновлен, пользуйтесь на здоровье :)


Задача: Максимально упростить форму заказа

Задача конечно не новая и что бы не изобретать велосипед, нашел одну полезную тему на Joomla форуме , которую собственно и взял за основу, однако переделывать пришлось не мало, так как там было сделано явно на быструю руку и с множеством косяков.

Редактироваться будут файлы:

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 шаблон самого письма)

Вот в принципе и все, написал очень-очень кратко, кому будет интересно, думаю сам разберется, так как данные файлы будут доступны для скачивания внизу данной статьи.

 

Прочитано 2232 раз Последнее изменение 2015-10-28

2 комментарии

  • Олег
    Олег 2017-01-11

    Геннадий, установил ваш скрипт на сайте, все работает, письмо приходит, но приложенный файл jpeg, указанный в форме быстрого заказа админу сайта при заказе с Вашей формы не отправляется. Подскажите почему?

    В файле /administrator/components/com_virtuemart/html/checkout.witout_register_form.php строчка 167 
    $exts = array("doc", "docx", "xls", "xlsx", "txt", "pdf", "jpg","png", "gif", "bmp");
    Добавте сюда jpeg
    $exts = array("doc", "docx", "xls", "xlsx", "txt", "pdf", "jpg","jpeg", "png", "gif", "bmp");
    И должно будет работать.

  • Александр
    Александр 2016-02-14

    Геннадий, я столкнулся с ошибками, первую ошибку(хотя это нельзя назвать ошибкой) исправил - это, не отображался телефон в заказе, который получал покупатель на почту(я поменял переменную phone_1 на phone_2).

    Действительно была такая проблема в первой версии скрипта. Во второй все исправлено, можно смело пользоваться.

Оставить комментарий

Все поля отмеченные (*) обязательны для заполнения