Есть Интернет магазин-конструктор. Удалось его установить на втором шаблоне Джумла, который открывается по клику на меню "Столы" на сайте: http://satton.ru Первый шаблон (по умолчанию) запускается с index.php основного (там сайт), index.php второго шаблона запускается с переходом по клику на меню "Столы" (там только Интернет магазин) И все бы было хорошо, но почта не работает на втором шаблоне (Интернет магазине), а если поставить Интернет магазин в шаблон по умолчанию, то все норм. Похоже почтовый сервер не видит email.php на шаблоне, который не по умолчанию. Куда я его только не лепил, все бес толку. index.php: Код (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> email.php: Код (PHP): <?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); ?>
а он у тебя (этот файл) вообще в каталоге шаблона находится или где? по JS похоже что он должен вызываться из того места откуда вызван сам JS
Проблема с путем в том что меню стоит на первом шаблоне, а магазин на втором, и похоже скрипт и ищет человеко понятные урл на втором, а вот index.php?option=com_content&view=article&id=5&Itemid=105 вместо stoly находит почему то
чтобы работали ЧПУ ссылки надо в коде всегда писать так: Код (PHP): JRoute('index.php?option=com_content&view=article&id=5&Itemid=105') и системе будет пофигу какой режим у тебя включен без ЧПУ выдаст полную ссылку с ЧПУ выдаст человеко-понятную
Где прописывать? Вот так в index.php я вчера пробовал: Код (PHP): <div id="dialog-form-window" title="Отправка почты"> <p class="validateTips">Все поля формы обязательны.</p> <form action="http://localhost/piter/index.php?option=com_content&view=article&id=2&Itemid=106/email.php" method="post"> <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> id изменен. просто на другом компе сейчас, но это я пробовал, (копировал с адресной строки) после перехода на другой шаблон по пункту меню из первого. К тому же чтобы работало ЧПУ, как Вы правильно заметили достаточно его включить, а вот чтобы не работало ЧПУ только в одном пункте меню - эта задача выполнима? Ну или хотя бы прописать для всех кроме одного что бы работало ЧПУ. Где это прописать: JRoute('index.php?option=com_content&view=article&id=5&Itemid=105') Напоминаю, что у меня 2 шаблона первый по умолчанию, второй включается при клике на пункт меню первого - переход в магазин. Код выше, прописывал конечно в index.php второго. Спасибо, что тему не бросаете!
я выше всё написал, как должны выглядеть ссылки и к тому же у тебя так и будет работать только из корня т.к. у тебя в конце ссылки правый слэшь и email.php это всё должно быть включено в саму ссылку через знак "&" и соответственно прописано в контроллере компонента
Но так ведь нельзя вставлять код? Код (PHP): <div id="dialog-form-window" title="Отправка почты"> <p class="validateTips">Все поля формы обязательны.</p> <form action="JRoute('index.php?option=com_content&view=article&id=5&Itemid=105&email.php')" method="post"> <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>
а где php обрамление? где <?php и ?> Код (PHP): <form action="<?php echo JRoute('index.php?option=com_content&view=article&id=5&Itemid=105&email.php'); ?>" method="post"> ни в одном файле не видел, как php в html вставляется? всё равно работать не будет, если у тебя в контроллере компонента (com_content) нет обработки параметра email.php и это именно параметр, смотри в начале, к примеру параметра option и его значение com_content, view и article это всё получается из GET массива глобальной переменной REQUEST так что думай!!!! ЧД и УМ