Купить в 1 клик VirtueMart

Кнопка быстрого заказа для VirtueMart (Купить в 1 клик) на Bootstrap

Как показывает практика, чем проще покупать товар на сайте, тем больше людей делают заказы. Следовательно, наличие кнопки Купить в 1 клик является неотъемлемым атрибутом каждого современного интернет-магазина.

Рассмотрим несколько способов, как создать кнопку быстрого заказа на сайте под управлением CMS Joomla! и VirtueMart. Но сначала создадим таблицу в базе данных с нужными полями. В эти поля будут записываться данные из формы, которую заполнит пользователь. Ведь, несмотря на то, что форма заказа будет максимально упрощена, нам все равно нужно хранить информацию о покупателе: его фамилию и имя, телефон, название заказанного товара и т.д.

Создание таблицы в базе данных

Я планирую создать форму, в которой обязательными будет только 2 поля – ФИО и Номер телефона. При желании, покупатель сможет ввести еще и Email и написать комментарий к заказу. Вот это и все поля, которые нужно будет заполнить клиенту. Но кроме информации, которую указывает клиент, нам нужно будет получить и записать в таблицу дату и время заказа, название товара, цену товара, страницу с которой был оформлен заказ, ip пользователя.

Чтобы создать таблицу со всеми вышеперечисленными полями используем следующий SQL запрос:

CREATE TABLE `#__quick_order` (
  `id` int(11) NOT NULL AUTO_INCREMENT,  
 `ip_input` text(1000) NOT NULL,
 `date_input` text(1000) NOT NULL,
 `pib_input` text(1000) NOT NULL,
 `pib_input` text(1000) NOT NULL,
 `mail_input` text(1000) NOT NULL,
 `comment_input` text(1000) NOT NULL,
 `product_name_input` text(1000) NOT NULL,
 `product_price_input` text(1000) NOT NULL,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8;

Создание кнопки и модального окна на Bootstrap

Лучший и самый простой способ, по моему мнению, создать кнопку быстрого заказа товара – это использовать Bootstrap. Конечно, если ваш сайт поддерживает этот набор инструментов.

За отображение карточки товара в VirtueMart отвечает файл \components\com_virtuemart\views\productdetails\tmpl\default.php

Поэтому, прежде всего, нам нужно найти этот файл и скопировать его в папку html вашего шаблона, чтобы при обновлении VirtueMart не потерять изменения, которые мы внесем в этот файл для отображения кнопки и модального окна быстрого заказа.

В результате, файл default.php для отображения товаров VirtueMart должен находиться по следующему адресу:

\templates\ваш_шаблон\html\com_virtuemart\productdetails

Для отображения кнопки "Быстрый заказ" и модального окна с полями, которые должен заполнить покупатель, добавьте в файл default.php следующий код:

<!-- Кнопка "Швидке замовлення" -->		
<div class="quick-order-btn float-center">
	<a class="btn btn-warning" href="#" rel="noopener noreferrer noindex nofollow" data-bs-toggle="modal" data-bs-target="#quickOrder"><?php echo vmText::_('VM_QUICK_ORDER') ?></a>
</div>

<!-- Модальне вікно Швидкого замовлення товору -->
<div class="modal fade" id="quickOrder" tabindex="-1" role="dialog" aria-labelledby="quickOrderLabel" aria-hidden="true">
	<div class="modal-dialog" role="document">
		<div class="modal-content">
			<div class="modal-header">
				<h5 class="modal-title" id="quickOrderLabel"><?php echo vmText::_('VM_QUICK_ORDER') . ' ' . $this->product->product_name . ' (' . number_format($this->product->product_price, 2, ',', '') . ' грн.)'; ?></h5>
				<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
			</div>
				<div class="modal-body">
				<!-- Форма відправки замовлення -->
					<div id="quickOrderForm">    
						<form id="reg_form" style="text/css" method="post" enctype="multipart/form-data">
							<fieldset class="ui-sortable">
									<div class="row">
										<div class="col-md-12">
											<p><input type="text" class="form-control" name="pib-input" id="pib-input" required placeholder="<?php echo JText::_('VM_QUICK_ORDER_PIB') ?>"></p>
											<p>
											  <input type="tel" class="form-control" name="phone-input" id="phone-input" required 
													 placeholder="<?php echo JText::_('VM_QUICK_ORDER_PHONE') ?>" 
													 title="Дозволено вводити тільки цифри"
													 oninput="this.value = this.value.replace(/[^0-9+() \-]/g, '');"
											  >
											</p>
											<p><input type="text" class="form-control" name="mail-input" id="mail-input" placeholder="<?php echo JText::_('VM_QUICK_ORDER_MAIL') ?>"></p>
											<p><textarea rows="5" class="form-control" name="comment-input" id="comment-input" placeholder="<?php echo JText::_('VM_QUICK_ORDER_COMMENT') ?>"></textarea></p>
											<div class="form-check">
											  <input class="form-check-input" type="checkbox" value="" id="flexCheckDefault" required>
											  <label class="form-check-label" for="flexCheckDefault">
												<?php echo JText::_('VM_QUICK_ORDER_AGREEMENT') ?>
											  </label>
											</div>
											<button class="btn btn-primary mybtn-send float-right" type="submit" id="btnQuickOrder" name="submit"><?php echo JText::_('Підтвердити') ?></button>
										</div>
									</div>
								</div>
							</fieldset>
						</form>
					</div>
				</div>
		</div>
	</div>

Лично я добавил этот код перед кодом отображения кнопки вопроса о товаре.

Запись в БД и отправка письма продавцу

Чтобы информация, которую указал покупатель в модальном окне, была записана в таблицу базы данных и отправлена на почту продавца, добавьте в файл \templates\ваш_шаблон\html\com_virtuemart\productdetails\default.php следующий код:

use Joomla\CMS\Factory;
use Joomla\CMS\Mail\MailHelper;

if(isset($_POST['submit'])) {
    $curDate = date('Y-m-d H:i:s'); // поточна дата та час
    $curPage = $_SERVER["HTTP_HOST"].$_SERVER["REQUEST_URI"]; // поточна сторінка

    // Пошта одержувача
	// Отримання головного об'єкта додатка Joomla
	$app = Joomla\CMS\Factory::getApplication();
	// Отримання адреси електронної пошти з конфігурації сайту
	$recipient = $app->getConfig()->get('mailfrom');

    // Пошта відправника
    $sender = Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в браузере должен быть включен Javascript.';
    
    // Get form data
    if(isset($_POST['pib-input']) && isset($_POST['phone-input'])) {
        $pib_input = $_POST['pib-input'];
        $phone_input = $_POST['phone-input'];
        $mail_input = $_POST['mail-input'];
        $comment_input = $_POST['comment-input'];
    }

    // Запис в БД
    $db = Factory::getDbo();
    $query = $db->getQuery(true);

    $profile = new stdClass();
    $profile->id = NULL;
	$profile->ip_input = $_SERVER['REMOTE_ADDR'];
    $profile->date_input = $curDate;
    $profile->pib_input = $pib_input;
    $profile->phone_input = $phone_input;
    $profile->mail_input = $mail_input;
    $profile->comment_input = $comment_input;
	$profile->product_name_input = $this->product->product_name;
	$profile->product_price_input = number_format($this->product->product_price, 2, ',', '') . ' грн';

    $result = JFactory::getDbo()->insertObject('#__quick_order', $profile);

    // Відправка пошти
    $subject = "Швидке замовлення";
    
    $body = vmText::_('VM_QUICK_ORDER') . ' ' . $this->product->product_name . ' (' . number_format($this->product->product_price, 2, ',', '') . ') грн' . "<br>";
    $body .= "IP користувача: " . $_SERVER['REMOTE_ADDR'] . "<br>";
    $body .= "ПІБ: " . $pib_input . "<br>";
    $body .= "Телефон: " . $phone_input . "<br>";
    $body .= "Email: " . $mail_input . "<br>";
    $body .= "Коментар до замовлення: " . $comment_input . "<br>";
    $body .= "Сторінка товару: " . $curPage . "<br>";
    $body .= "Дата замовлення: " . $curDate . "<br>";
	$body .= "Назва товару: " . $this->product->product_name . "<br>";
	$body .= "Ціна товару: " . number_format($this->product->product_price, 2, ',', '') . ' грн' . "<br>";

    $mail = Factory::getMailer();
    $mail->addAddress($recipient);
    $mail->setSender(array($sender, $pib_input));
    $mail->setSubject($subject);
    $mail->isHTML(true);
    $mail->setBody($body);

    // Відправляємо email та відображаємо повідомлення про успіх або помилку
    $sent = $mail->send();
	if ($sent) {
		JFactory::getApplication()->enqueueMessage(JText::_('Ваше замовлення успішно сформовано'));
	} else {
		JFactory::getApplication()->enqueueMessage(JText::_('Виникла помилка при оформленні замовлення.'), 'error');
	}
}

Переопределение констант

Как вы уже заметили, в нашем коде используются языковые константы:

  • VM_QUICK_ORDER
  • VM_QUICK_ORDER_PIB
  • VM_QUICK_ORDER_PHONE
  • VM_QUICK_ORDER_MAIL
  • VM_QUICK_ORDER_COMMENT
  • VM_QUICK_ORDER_AGREEMENT

Для того чтобы переопределить текст этих констант, нужно в административной части сайта:

  1. Перейти в раздел Система.
  2. В группе Управление выбрать Переопределение констант.
  3. Выбрать нужный язык.
  4. Создать новое переопределение.

Main Menu