Есть Интернет магазин-конструктор. Удалось его установить на втором шаблоне Joomla, который открывается по клику на меню "Столы" на сайте
Первый шаблон (по умолчанию) запускается с index.php основного (там сайт), index.php второго шаблона запускается с переходом по клику на меню "Столы" (там только Интернет магазин)
И все бы было хорошо, но почта не работает на втором шаблоне (Интернет магазине), а если поставить Интернет магазин в шаблон по умолчанию, то все норм. Похоже почтовый сервер не видит email.php на шаблоне, который не по умолчанию. Куда я его только не лепил, все бес толку.
<!DOCTYPE html>
<html style="background: none repeat scroll 0% 0% rgb(0, 0, 0);">
<head>
<title>Конструктор</title>
<meta charset="UTF-8">
<link rel="stylesheet" href="templates/system/css/smoothness/jquery-ui-1.10.3.custom.min.css">
<link rel="stylesheet" href="templates/system/css/smoothness/jquery-ui-1.10.3.custom.css">
<link rel="stylesheet" href="templates/system/css/smoothness/style.css">
<script src="js/jquery-1.10.1.min.js"></script>
<script src="js/jquery-ui-1.10.3.custom.min.js"></script>
<script>
$(function() {
var $products = $('#products'),
$cart = $('#cart'),
$infoProducts = $('ol.info-products'),
$infoTotal = $('.info-total'),
$productTotalPrice = $('#product-total-price'),
$dialogFormWindow = $('#dialog-form-window'),
$sendEmail = $('#send-email');
$('.draggable', $products).draggable({
revert: 'invalid',
opacity: 0.8,
helper: 'clone',
cursor: 'move'
});
$cart.droppable({
accept: '#products > .draggable',
drop: function(event, ui) {
var $clone = ui.draggable.clone(),
productTitle = $clone.find('.product-title').text(),
productId = $clone.data('id'),
productPrice = parseInt($clone.data('price'), 10),
productCount = parseInt($clone.data('count'), 10),
$addItem = $infoProducts.find('li[data-id="' + productId + '"]'),
itemId = 0,
itemPrice = 0,
itemCount = 0,
itemInfo = '';
itemId = $addItem.data('id');
itemPrice = parseInt($addItem.data('price'), 10);
itemCount = parseInt($addItem.data('count'), 10);
if (itemId === productId) {
productPrice += itemPrice;
productCount += itemCount;
$addItem.data('price', productPrice);
$addItem.data('count', productCount);
$addItem.find('.product-count-text').text('(' + productCount + ')');
$addItem.find('.product-price').text(productPrice);
} else {
itemInfo = '<li class="ui-menu-item" data-id="' + productId
+ '" data-price="' + productPrice
+ '" data-count="' + productCount +'">'
+ '<span class="product-count-text">(' + productCount + ')</span>'
+ productTitle + ' - '
+ '<span class="product-price">' + productPrice + '</span>'
+ '<span class="product-currency">руб.</span>'
+ '</li>';
}
var sum = 0;
$infoProducts.append(itemInfo);
$infoProducts.find('li').each(function(index, el) {
sum += parseInt($(el).data('price'), 10);
});
$clone.find('.product').remove();
$cart.append($clone);
$productTotalPrice.text(sum);
if ($infoTotal.hasClass('hide')) {
$infoTotal.toggleClass('hide show');
}
$clone.draggable({
containment: '#cart',
helper: 'original',
cursor: 'move',
stack: '.draggable'
});
$clone.hover(function() {
$(this).find('.product-delete').css('opacity', '1');
}, function () {
$(this).find('.product-delete').css('opacity', '0.3');
});
}
});
$cart.on('click', '.icon-delete', function(event) {
var $product = $(this).parent().parent(),
productPrice = parseInt($product.data('price'), 10),
productCount = parseInt($product.data('count'), 10),
productId = $product.data('id'),
$removeItem = $infoProducts.find('li[data-id="' + productId + '"]'),
removePrice = 0,
removeCount = 0,
sum = parseInt($productTotalPrice.text(), 10);
removePrice = parseInt($removeItem.data('price'), 10);
removeCount = parseInt($removeItem.data('count'), 10);
if (removeCount <= productCount) {
$removeItem.remove();
} else {
removePrice -= productPrice;
removeCount -= productCount;
$removeItem.data('price', removePrice);
$removeItem.data('count', removeCount);
$removeItem.find('.product-count-text').text('(' + removeCount + ')');
$removeItem.find('.product-price').text(removePrice);
}
sum -= productPrice;
if (sum <= 0) {
$productTotalPrice.text('');
$infoTotal.toggleClass('show hide');
$cart.find('.draggable').remove();
} else {
$productTotalPrice.text(sum);
$product.css('visibility', 'hidden');
}
});
var $name = $('#name'),
$email = $('#email'),
$phone = $('#phone'),
allFields = $([]).add($name).add($email).add($phone),
$tips = $('.validateTips');
function updateTips(t) {
$tips.text(t).addClass('ui-state-highlight');
setTimeout(function() {
$tips.removeClass('ui-state-highlight', 1500);
}, 500);
}
function checkLength(o, n, min, max) {
if (o.val().length > max || o.val().length < min) {
o.addClass('ui-state-error');
updateTips('Количество символов ' + n + ' должно быть между ' +
min + ' и ' + max + '.');
return false;
} else {
return true;
}
}
function checkRegexp(o, regexp, n) {
if (!(regexp.test(o.val()))) {
o.addClass('ui-state-error');
updateTips(n);
return false;
} else {
return true;
}
}
$('#dialog-form-window').dialog({
autoOpen: false,
height: 280,
width: 1000,
modal: true,
buttons: {
'Отправить': function() {
var msg = '';
if ($infoProducts.html() === "") {
msg = 'Список товаров пуст.\r\n';
msg += 'Пожалуйста выбирите хотя бы один товар.';
alert(msg);
return false;
}
var bValid = true;
allFields.removeClass('ui-state-error');
bValid = bValid && checkLength($name, 'Имя', 3, 16);
bValid = bValid && checkLength($email, 'Email', 6, 80);
bValid = bValid && checkLength($phone, 'Телефон', 5, 15);
bValid = bValid && checkRegexp($name, /^[а-яА-Я]+$/i, 'Имя может содержать только буквы от А до Я.');
// From jquery.validate.js (by joern), contributed by Scott Gonzalez: http://projects.scottsplayground.com/email_address_validation/
bValid = bValid && checkRegexp($email, /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i, 'напр. user@mail.com');
bValid = bValid && checkRegexp($phone, /^([0-9])+$/, 'Поле телефон, может содержать только цифры: 0-9');
if (bValid) {
$.ajax({
url: 'email.php',
type: 'POST',
dataType: 'json',
data: {
name: $name.val(),
email: $email.val(),
phone: $phone.val(),
list : "<ol>" + $infoProducts.html() + "</ol>"
},
success: function(data) {
$dialogFormWindow.dialog('close');
alert(data.message);
}
});
}
},
Cancel: function() {
$(this).dialog('close');
}
},
close: function() {
allFields.val('').removeClass('ui-state-error');
}
});
$sendEmail
.button()
.click(function() {
$('#dialog-form-window').dialog('open');
});
});
</script>
</head>
<body>
<div id="wrapper">
<div id="top-block" class="ui-widget ui-widget-content">
<a id="link-home" class="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only" href="http://satton.ru/">Назад</a>
<button id="send-email" class="" title="Отправить на Email">Отправить на Email</button>
</div>
<div id="products" class="ui-widget-content">
<h3 class="block-title">Товары</h3>
<div class="draggable" data-id="1" data-price="100" data-count="1">
<img src="images/01.png" class="ui-widget-content">
<p class="product ui-widget-content">
<span class="product-title">Наименование 1</span>
<br>
<span class="product-price">100</span>
<span class="product-currency">руб.</span>
</p>
<div class="product-delete ui-widget-content">
<a class="ui-icon ui-icon-trash icon-delete" title="Удалить">Удалить</a>
</div>
</div>
<div class="draggable" data-id="2" data-price="200" data-count="1">
<img src="images/02.png" class="ui-widget-content">
<p class="product ui-widget-content">
<span class="product-title">Наименование 2</span>
<br>
<span class="product-price">200</span>
<span class="product-currency">руб.</span>
</p>
<div class="product-delete ui-widget-content">
<a class="ui-icon ui-icon-trash icon-delete" title="Удалить">Удалить</a>
</div>
</div>
<div class="ui-helper-clearfix"></div>
<div class="draggable" data-id="3" data-price="300" data-count="1">
<img src="images/03.png" class="ui-widget-content">
<p class="product ui-widget-content">
<span class="product-title">Наименование 3</span>
<br>
<span class="product-price">300</span>
<span class="product-currency">руб.</span>
</p>
<div class="product-delete ui-widget-content">
<a class="ui-icon ui-icon-trash icon-delete" title="Удалить">Удалить</a>
</div>
</div>
<div class="draggable" data-id="4" data-price="400" data-count="1">
<img src="images/04.png" class="ui-widget-content">
<p class="product ui-widget-content">
<span class="product-title">Наименование 4</span>
<br>
<span class="product-price">400</span>
<span class="product-currency">руб.</span>
</p>
<div class="product-delete ui-widget-content">
<a class="ui-icon ui-icon-trash icon-delete" title="Удалить">Удалить</a>
</div>
</div>
<div class="ui-helper-clearfix"></div>
<div class="draggable" data-id="5" data-price="500" data-count="1">
<img src="images/05.png" class="ui-widget-content">
<p class="product ui-widget-content">
<span class="product-title">Наименование 5</span>
<br>
<span class="product-price">500</span>
<span class="product-currency">руб.</span>
</p>
<div class="product-delete ui-widget-content">
<a class="ui-icon ui-icon-trash icon-delete" title="Удалить">Удалить</a>
</div>
</div>
<div class="draggable" data-id="6" data-price="600" data-count="1">
<img src="images/06.png" class="ui-widget-content">
<p class="product ui-widget-content">
<span class="product-title">Наименование 6</span>
<br>
<span class="product-price">600</span>
<span class="product-currency">руб.</span>
</p>
<div class="product-delete ui-widget-content">
<a class="ui-icon ui-icon-trash icon-delete" title="Удалить">Удалить</a>
</div>
</div>
<div class="ui-helper-clearfix"></div>
<div class="draggable" data-id="7" data-price="700" data-count="1">
<img src="images/09.png" class="ui-widget-content">
<p class="product ui-widget-content">
<span class="product-title">Наименование 7</span>
<br>
<span class="product-price">700</span>
<span class="product-currency">руб.</span>
</p>
<div class="product-delete ui-widget-content">
<a class="ui-icon ui-icon-trash icon-delete" title="Удалить">Удалить</a>
</div>
</div>
<div class="draggable" data-id="8" data-price="800" data-count="1">
<img src="images/08.png" class="ui-widget-content">
<p class="product ui-widget-content">
<span class="product-title">Наименование 8</span>
<br>
<span class="product-price">800</span>
<span class="product-currency">руб.</span>
</p>
<div class="product-delete ui-widget-content">
<a class="ui-icon ui-icon-trash icon-delete" title="Удалить">Удалить</a>
</div>
</div>
<div class="ui-helper-clearfix"></div>
<div class="draggable" data-id="9" data-price="700" data-count="1">
<img src="images/11.png" class="ui-widget-content">
<p class="product ui-widget-content">
<span class="product-title">Наименование 9</span>
<br>
<span class="product-price">700</span>
<span class="product-currency">руб.</span>
</p>
<div class="product-delete ui-widget-content">
<a class="ui-icon ui-icon-trash icon-delete" title="Удалить">Удалить</a>
</div>
</div>
<div class="draggable" data-id="10" data-price="800" data-count="1">
<img src="images/10.png" class="ui-widget-content">
<p class="product ui-widget-content">
<span class="product-title">Наименование 10</span>
<br>
<span class="product-price">800</span>
<span class="product-currency">руб.</span>
</p>
<div class="product-delete ui-widget-content">
<a class="ui-icon ui-icon-trash icon-delete" title="Удалить">Удалить</a>
</div>
</div>
<div class="ui-helper-clearfix"></div>
<div class="draggable" data-id="11" data-price="700" data-count="1">
<img src="images/07.png" class="ui-widget-content">
<p class="product ui-widget-content">
<span class="product-title">Наименование11</span>
<br>
<span class="product-price">700</span>
<span class="product-currency">руб.</span>
</p>
<div class="product-delete ui-widget-content">
<a class="ui-icon ui-icon-trash icon-delete" title="Удалить">Удалить</a>
</div>
</div>
</div>
<div id="cart" class="ui-widget-content">
<h3 class="block-title">Конструктор</h3>
</div>
<div id="info" class="ui-widget-content">
<h3 class="block-title">Информация</h3>
<ol class="info-products ui-widget-content"></ol>
<p class="info-total hide ui-widget">Итого:
<span id="product-total-price"></span>
<span class="product-currency">руб.</span>
</p>
</div>
<div id="dialog-form-window" title="Отправка почты">
<p class="validateTips">Все поля формы обязательны.</p>
<form>
<fieldset>
<label for="name">Имя</label>
<input type="text" name="name" id="name" value="" maxlength="16" class="text ui-widget-content ui-corner-all">
<label for="email">Email</label>
<input type="text" name="email" id="email" value="" maxlength="80" class="text ui-widget-content ui-corner-all">
<label for="phone">Телефон</label>
<input type="text" name="phone" id="phone" value="" maxlength="15" class="text ui-widget-content ui-corner-all">
</fieldset>
</form>
</div>
</div>
</body>
</html>
<?php
// Список товаров выбранный пользователем
$name = substr($_POST['name'], 0, 16);
$email = substr($_POST['email'], 0, 80);
$phone = substr($_POST['phone'], 0, 15);
$list = $_POST['list'];
// Параметр, который указывает была или нет ошибка в процессе отправки сообщения
$response = array(
'message' => '',
'error' => FALSE
);
// Получатель
$to = 'violiya.nsk@yandex.ru';
// Тема письма
$subject = 'Ваш заказ';
// текст письма
$message = '
<html>
<head>
<style>
.product-count-text {padding: 0 5px;}
.product-currency {padding-left: 5px;}
</style>
<title>'.$subject.'</title>
</head>
<body>
<ul>
<li>Имя: '.$name.'</li>
<li>Email: '.$email.'</li>
<li>Телефон: '.$phone.'</li>
</ul>
'.$list.'
</body>
</html>';
// Для отправки HTML-письма должен быть установлен заголовок Content-type
$headers = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=utf-8' . "\r\n";
// Дополнительные заголовки: поле "от" в почтовом клиенте
$headers .= 'From: Web Site <website@example.com>' . "\r\n";
// Отправляем
$result = mail($to, $subject, $message, $headers);
if ($result) {
$response['error'] = FALSE;
$response['message'] = 'Спасибо! Ваш запрос будет рассмотрен в ближайшее время.';
} else {
$response['error'] = TRUE;
$response['message'] = 'Ошибка отправки почтового сообщения!';
}
echo json_encode($response);
?>