JS: Бесплатный интернет магазин

Большинство скриптов интернет магазинов громоздки и сложны в настройке, впрочем для крупного магазина это не такие уж большие проблемы - заплатил и нет проблем. А вот для создания мини интернет магазина на основе simpleCart(js) особых знаний и временных затрат не потребуется.

SimpleCart(js) не требует базы данных, все заказанные товары хранятся в cookies покупателя. Название, изображение, описание и цена продуктов и расположение корзины задаются с помощью специальных html тегов. Товары в корзину попадают без перезагрузки страницы. В скрипт встроены модули оплаты PayPal и Google checkout, которые в России бесполезны, но добавить наши платежные системы особого труда не составит.

Настройка simpleCart(js)

simpleCart.currency - валюта
simpleCart.checkoutTo - способ оплаты
simpleCart.taxRate - процент налогов
simpleCart.shippingFlatRate - сумма за доставку, добавляемая к общей цене товаров в корзине
simpleCart.shippingQuantityRate - сумма за доставку, добавляемая к каждому товару в корзине

Подробная документация по установке и настройке находится на сайте simpleCart(js).

Перевод на рубли

Задать simpleCart.currency = RUR
Заменить в районе 543-ей строки файла simpleCart.js:

case JPY:
	return "¥";

на это:

case RUR:
	return "руб.";

В конец 29-ой строки добавить перед ";"

,RussianRouble=RUR=" руб."

Расположение валюты после цены:

Number.prototype.toCurrency=function(){return(arguments[0]?arguments[0]:"$")+this.withCommas();};

заменить на:

Number.prototype.toCurrency=function(){return this.withCommas()+(arguments[0]?arguments[0]:"$");};

Российские платежные системы

Cделать оплату деньгами не сложно - нужно лишь отправить данные о заказе на сервер, как описано ниже, а там уже скрипт платежной системы будет работать.

Отправка заказа на e-mail.

SimpleCart(js) в стандартной поставке слать заказы на почту не умеет, поэтому его придется дорабатывать самим. На основе стандартного примера Я покажу как это сделать.

Разобьем процесс доработки на несколько этапов:
1. после нажатия на кнопку "оформить заказ", перейти на страницу с размещенной по центру корзиной и формой с данными покупателя.
2. при отправке данных клиента на сервер цеплять к ним данные о товарах.
3. на сервере отделить данные о клиенте и товарах, для товаров сделать цикл.
4. слать все на мыло.

Итак, Поехали!
1. В index.html ищем ссылку на оформление заказа и заменяем ее класс на любой другой, а в адресе ссылки пишем расположение страницы оформления заказа.

//было
<a href="javascript:;" class="simpleCart_checkout">checkout</a>

//стало
<a href="form.html" class="my_checkout">checkout</a><br/>

Теперь делаем саму страницу с формой. Необходимо указать правильное расноложение файла checkout.php.

<div class="simpleCart_items" ></div>

SubTotal: <span class="simpleCart_total"></span>
Tax: <span class="simpleCart_taxCost"></span>
Shipping: <span class="simpleCart_shippingCost"></span>
Final Total: <span class="simpleCart_finalTotal"></span> <br />

<form action="checkout.php" method='post' id='form'>
<p><h4>ФИО:</h4>
<input id="email" type="text" name="fio" size="100">

<h4>Адрес:</h4>
<textarea id="mess" rows="4" name="adres" cols="75"></textarea> 

<h4>Ваш e-mail:</h4>
<input id="email" type="text" name="email" size="50">

<input type="submit" value="Отправить" name="submit" onClick="emailCheckout(this.form)"></p>
</form>

2. При отправке формы будет выполнена функция emailCheckout(this.form), которая отправит данные о самом заказе.

<script type="text/javascript">
function emailCheckout(form){
	var me = simpleCart;
	counter = 1;
	form.appendChild( me.createHiddenElement( "currency", me.currency	) );
	
	for( var current in me.items ){
		var item = me.items[current];
		form.appendChild( me.createHiddenElement( "name_" 		+ counter, item.name		) );
		form.appendChild( me.createHiddenElement( "quantity_" 	+ counter, item.quantity 	) );
		form.appendChild( me.createHiddenElement( "price_" 	+ counter, item.price		) );
		form.appendChild( me.createHiddenElement( "tax_rate_" 	+ counter, me.taxRate 		) );

		var descriptionString = "";
		
		for( var field in item){
			if( typeof( item[field] ) != "function" && 
									field != "id" 		&& 
									field != "quantity"	&& 
									field != "price" )
				{
					descriptionString = descriptionString + ", " + field + ": " + item[field];				
				}
			}
			descriptionString = descriptionString.substring( 1 );
			form.appendChild( me.createHiddenElement( "item_description_" + counter, descriptionString) );

			counter++;
	}

}
</script>

3. Посланные данные теперь нужно обработать в файле checkout.php и послать их на мыло.

<?php
$to = 'somemail@gmail.com'; //куда слать письмо

if ( $_SERVER['REQUEST_METHOD']=='POST' )
	complete_mail($to);

function complete_mail($to) {
	$fio =  substr(htmlspecialchars(trim($_POST['fio'])), 0, 150);
	$adres =  substr(htmlspecialchars(trim($_POST['adres'])), 0, 1000);
	$email =  substr(htmlspecialchars(trim($_POST['email'])), 0, 50);


	unset( $_POST['fio'] );
	unset( $_POST['adres'] );
	unset( $_POST['email'] );
	unset( $_POST['submit'] );

		
 	if(!preg_match("/[0-9a-z_]+@[0-9a-z_^\.]+\.[a-z]{2,3}/i", $email)) 
		{ output_err(0); }
	else if(empty($fio))
		{ output_err(1); }
	else if(empty($adres))
		{ output_err(2); }
	else if(empty($_POST['name_1']))
		{ output_err(3); }
	
	else {
		$content .= "ФИО: ".$fio."\nАдрес: ".$adres."\nE-mail: ".$email."\n\n\nИмя\tКол-во\tЦена\tНалоги\t Описание\n";

		$c=0;
		foreach ( $_POST as $k => $v ){
			if ( $c == 5 ) {
				$content .= "\n";
				$c = 0;
			} else {
				++$c;
			}
			$content .= $v."\t";
		}
		$subject = 'Заказ с сайта ' . $_SERVER['SERVER_NAME'];

		mail($to, $subject, $content, "From:" . $email);
		
		echo "Заявка отправлена.";
	}
}

function output_err($num) {
	$err[0] = 'ОШИБКА! Неверно введен e-mail.'; 
	$err[1] = 'ОШИБКА! Не введены контакты.'; 
	$err[2] = 'ОШИБКА! Не введен адрес.'; 
	$err[3] = 'ОШИБКА! Вы ничего не заказали.'; 

	echo '<p>'.$err[$num].'</p>';
}

?>

После отправки письма или ошибке, выведется сообщение на белом фоне, чтобы его облагородить создайте страницу с соответствующим сообщением, а в скрипте сделайте следующие изменения:

echo "Заказ отправлен!";
//заменить на
header('Location: http://test.ru/done.html');

$err[0] = 'ОШИБКА! Неверно введен e-mail.';
//заменить на 
$err[0] = header('Location: http://test.ru/bademail.html');

Комментарии (RSS)

  • # Шома: Спасибо большое! отличная статья. а могли бы вы объяснить как отправлять сообщение с товаром на почтовый ящик. и можете посоветовать готовый сheckout.php где будет указать координаты для получения товара вроде как сдесь после нажатие на кнопку http://www.chris-wallace.com/simplecart/
  • # sartas: chris-wallace.com/simplecart/ использует wp-e-commerce - плагин интернет магазина для вордпресса.

    Готового скрипта отправки на почту нет, но его не очень сложно написать самому. В течении недели думаю выложу, пока времени нет.

    Принцип работы:
    1. после нажатия на кнопку "оформить заказ", перейти на страницу с размещенной по центру корзиной и формой с данными покупателя.
    2. при отправке данных клиента на сервер цеплять к ним данные о товарах.
    3. на сервере отделить данные о клиенте и товарах, для товаров сделать цикл.
    4. слать все на мыло.

  • # Шома: было бы просто великолепно. Слежу за вашим сайтом. побольше бы статей) буду ждать
  • # Шома: Кстати в simpleCart.js
    нужно в 29 строчку добавить ,RussianRubl=RUR="RUR" это для руских рублей
  • # sartas: На момент написания статьи в simpleCart.js не надо было изменять 29-ю строку, но уже поправил.
  • # Roman: С кодировками проблема, у меня везде вопросики и непонятные символы
  • # Bcom: Вот так попробуйте кодировку прописать в 45-ю строчку:
    mail ($to, $subject, $content, "From:" . $email,"Content-type:text/html; charset = windows-1251")
  • # lunix: Ваш скрипт отправляет максимум три разных предмета в заказе? Просмотрел код, ничего понять не могу? Может проблема где то в simpleCart.js?
  • # lunix: Простите, уже нашел свою ошибочку... :)
  • # Cyber: Скачал, посмотрю может пригодится.

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