0 Пользователей и 1 Гость просматривают эту тему.
  • 15 Ответов
  • 170 Просмотров
*

kompado

  • Новичок
  • 20
  • 0 / 0
Добрый день.

Как можно отправить данные формы на почту через Joomla?
Хостинг бесплатный и не поддерживает функцию mail
Форма вставлена в сам шаблон

Код
					<form class="m1-form" action="post.php" method="post">
<h2>ЗАКАЖИ СЕЙЧАС</h2>
                        <input type="text" name="name" placeholder="Введите Имя" required="">
                        <input type="text" name="phone" placeholder="Введите телефон" required="">
                        <button type="submit" class="buy">Заказать со скидкой</button>
                        <p>
+ получить клатч в подарок
</p>
<input type="hidden" name="quantity" value="1" />
<input type="hidden" name="timeShift" id="timeShift" value="" />
<input type="hidden" name="hash" id="hash" value="1f601578dd4f2bb5850260b2306e076ef9c9cdbd" /> <span style="display:none" id="goodPrice"></span>
<span style="display:none" id="fullPrice"></span>
<span style="display:none" id="CountryId">175</span>
<input type="hidden" id="goodArticle" name="goodArticle" value="" />
                    </form>

В корне сайта создал файл post.php ДЛЯ ПРОВЕРКИ ОТПРАВКИ со следующим содержанием:
Код
<?php

//получаем настройки сайта
$config = & JFactory::getConfig();
//Получаем экземпляр класса JMail
$mailer = JFactory::getMailer();
//Указываем что письмо будет в формате HTML
$mailer->IsHTML( true );
//Указываем отправителя письма
$mailer->setSender( array( $config->get( 'config.mailfrom' ), $config->get( 'config.fromname' ) ) );
//указываем получателя письма
$mailer->addRecipient( 'admin@site.ru' );
//Добавляем текст письма
$mailer->setBody('<h1>Hello User!</h1>');
//Отправляем письмо
$mailer->send();
?>

В итоге ошибка:
Fatal error: Uncaught Error: Class 'JFactory' not found in /home/s/s25845m/s25845m.beget.tech/public_html/post.php:4 Stack trace: #0 {main} thrown in /home/s/s25845m/s25845m.beget.tech/public_html/post.php on line 4
« Последнее редактирование: 09.10.2017, 13:05:31 от kompado »
*

effrit

  • Гуру
  • 7875
  • 878 / 7
  • effrit.com
заплатить 100 рублей за месяц и не извращаться )
либо на каком-то своем платном хостинге положить файлик-отправщик, которому из формы передавать данные.
*

kompado

  • Новичок
  • 20
  • 0 / 0
заплатить 100 рублей за месяц и не извращаться )
либо на каком-то своем платном хостинге положить файлик-отправщик, которому из формы передавать данные.

На платный хостинг из-за одной функции))
Сама Joomla отправляет почту через установленные компоненты (через SMTP)
*

dm-krv

  • Захожу иногда
  • 172
  • 2 / 0
Несколько месяцев назад как раз писал скрипт для отправки данных через движок, проверял на beget, все работает, если хочешь, скину.
*

kompado

  • Новичок
  • 20
  • 0 / 0
Несколько месяцев назад как раз писал скрипт для отправки данных через движок, проверял на beget, все работает, если хочешь, скину.

Скинь, пожалуйста
*

dm-krv

  • Захожу иногда
  • 172
  • 2 / 0
Вот сайт:
http://xn--e1aocufo.xn--p1ai/kontakty/napisat-nam
Хостится на beget на бесплатном тарифе, есть самописная рабочая форма обратной связи. На движке должен быть корректно настроен SMTP, так как отправки идет посредством функционала движка.

Вот скрипт отправки send.php:
Код
<?php

$imya = $_POST['imya'];
$imya = htmlspecialchars($imya);
$imya = urldecode($imya);
$imya = trim($imya);

$telefon = $_POST['telefon'];
$telefon = htmlspecialchars($telefon);
$telefon = urldecode($telefon);
$telefon = trim($telefon);

$pochta = $_POST['pochta'];
$pochta = htmlspecialchars($pochta);
$pochta = urldecode($pochta);
$pochta = trim($pochta);

$tekst = $_POST['tekst'];
$tekst = htmlspecialchars($tekst);
$tekst = urldecode($tekst);
$tekst = trim($tekst);


define('_JEXEC', 1);
define('JPATH_BASE', __DIR__);

// Load system defines
if (file_exists(JPATH_BASE . '/defines.php'))
{
    require_once JPATH_BASE . '/defines.php';
}

if (!defined('_JDEFINES'))
{
    require_once JPATH_BASE . '/includes/defines.php';
}

// Get the framework.
require_once JPATH_LIBRARIES . '/import.legacy.php';

// Bootstrap the CMS libraries.
require_once JPATH_LIBRARIES . '/cms.php';


//получаем настройки сайта
$config = & JFactory::getConfig();
//Получаем экземпляр класса JMail
$mailer = JFactory::getMailer();
//Указываем что письмо будет в формате HTML
$mailer->IsHTML( true );
//Указываем отправителя письма
$mailer->setSender( array( 'centum174@gmail.com', 'CENTUM ' ) );
//указываем получателя письма
$mailer->addRecipient( 'centum174@gmail.com' );
//Добавляем текст письма
$mailer->setSubject("+$telefon $imya");
// Добавояем тему письма
$mailer->setBody( "Электронный адрес: $pochta <br /> Сообщение: $tekst" );
//Отправляем письмо
$mailer->send();
if ($send !== true) {
header("Location: index.php/home/uspeh");
} else {
header("Location: index.php/home/neudacha");
}
?>

Вот форма:
Код
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script> 
<script src="/jquery.maskedinput.min.js"></script>
<script>
$(function(){
  $("#phone").mask("+7 (999) 999-99-99");
});
</script>
<script type="text/javascript">
   function agreeForm(f) {
    // Если поставлен флажок, снимаем блокирование кнопки
    if (f.agree.checked) f.submit.disabled = 0
    // В противном случае вновь блокируем кнопку
    else f.submit.disabled = 1
   }
</script>

<div data-uk-scrollspy="{cls:'uk-animation-slide-top'}" style="display: table; margin: 0 auto;">
<h1 style="text-align: center; text-shadow: white 0px 0px 10px; margin-top: 0px; margin-bottom: 50px;">Написать нам</h1>
<form action="/send.php" method="post" class="uk-form" data-uk-margin="{cls:'uk-margin-top'}">
<input maxlength="20" style="border-color: #f00;" name="imya" class="uk-form-width-medium" type="text" placeholder="Ваше имя" required /><br />
<input style="border-color: #f00;" name="telefon" id="phone" class="uk-form-width-medium" type="tel" placeholder="Контактный телефон" required /><br />
<input style="border-color: #aaa;" name="pochta" class="uk-form-width-medium" type="email" placeholder="Электронная почта" /><br />
<textarea style="border-color: #4fd389; height: 200px;" name="tekst" class="uk-form-width-large" type="text" placeholder="Сообщение" required /></textarea><br />
<input type="checkbox" name="agree" onclick="agreeForm(this.form)"> <span style="text-shadow: white 0 0 10px;">Даю согласие на обработку персональных данных<br />в соответствии с <a title="Оферта" href="http://центум.рф/kontakty/politika-obrabotki-personalnykh-dannykh" target="_blank" rel="noopener noreferrer">Пользовательским соглашением</a></span><br />
<input type="submit" name="submit" value="Отправить" onclick="this.parentNode.submit();" disabled>
</form>

</div>

Если что непонятно, спрашивай.

P. S. jquery.maskedinput.min.js это плагин с просторов сети, добавляющий маску для поля телефон.
*

kompado

  • Новичок
  • 20
  • 0 / 0
Спасибо!
Сейчас буду пробовать.
По результату отпишусь
*

dm-krv

  • Захожу иногда
  • 172
  • 2 / 0
Спасибо!
Сейчас буду пробовать.
По результату отпишусь

Вообще, тебе сколько полей надо в форме и каких? Если что у меня есть компонент нормальный, для формы обратной связи, учитывающий требования об обработке персональных данных. В том варианте что выше скинул, много лишнего для твоего сайта, легче с нуля написать или использовать компонент.
« Последнее редактирование: 09.10.2017, 15:44:06 от dm-krv »
*

kompado

  • Новичок
  • 20
  • 0 / 0
Вообще, тебе сколько полей надо в форме и каких? Если что у меня есть компонент нормальный, для формы обратной связи, учитывающий требования об обработке персональных данных. В том варианте что выше скинул, много лишнего для твоего сайта, легче с нуля написать или использовать компонент.

2 поля всего, но форма в самом шаблоне
Код попробую в свою форму добавить, убрав лишнее
« Последнее редактирование: 09.10.2017, 16:53:26 от kompado »
*

dm-krv

  • Захожу иногда
  • 172
  • 2 / 0
2 поля всего, но форма в самом шаблоне (скопированный лендинг ))
Код попробую в свою форму добавить, убрав лишнее

Тогда не майся дурью, есть простое как топор рабочее решение, главное что бы лендинг твой на движке был. Он же на Joomla? Если да, то скину способ.
*

kompado

  • Новичок
  • 20
  • 0 / 0
Тогда не майся дурью, есть простое как топор рабочее решение, главное что бы лендинг твой на движке был. Он же на Joomla? Если да, то скину способ.

Да, на Joomla 3.8
*

dm-krv

  • Захожу иногда
  • 172
  • 2 / 0
Да, на Joomla 3.8

Есть такой компонент:
http://joomly.ru/modul-obratnogo-zvonka
Качаешь бесплатную версию и убираешь водяной знак, либо покупаешь платную.

Водяной знак можно убрать в файле /modules/mod_joomly_callback/tmpl/default.php
74-ая строка:
<div class="tel"><?php echo JText::_('MOD_JOOMLY_CALLBACK_TEL');?></div>
Заменить на <br />

После установки компонента компонент, в настройках указываешь, что показывать кнопку не надо:
Какой элемент показывать на форме? => Никакой
Выводишь его в какой-нибудь позиции, например в debug. Далее, на самом сайте, в нужном тебе место просто вставляешь кнопку вызова:
<button class="button-joomly-callback-form joomly-callback" type="submit" value="save">НАЗВАНИЕ КНОПКИ</button>
Кнопку можно без проблем и в сам шаблон воткнуть.

Внутри кнопки можешь дописать стили настров внешний вид как тебе надо, например:
<button style="border-radius: 5px;" class="button-joomly-callback-form joomly-callback" type="submit" value="save">ЗАКАЗАТЬ</button>

Пример использования здесь:
http://xn--e1aocufo.xn--p1ai/
Смотри ближе к концу страницы, кнопка заказа звонка.

Или тебе надо не в виде кнопки, но в виде формы?
*

kompado

  • Новичок
  • 20
  • 0 / 0
Спасибо большое! Выручил.

Сделал так:
Код
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script> 
<script src="/jquery.maskedinput.min.js"></script>
<script>
$(function(){
  $("#phone").mask("+7 (999) 999-99-99");
});
</script>


<form class="m1-form" action="/send.php" method="post">
<h2>ЗАКАЖИ СЕЙЧАС</h2>
                        <input type="text" name="imya" placeholder="Введите Имя" required="">
                        <input type="text" name="telefon" id="phone" placeholder="Введите телефон" required="">
                        <button type="submit" class="buy" onclick="this.parentNode.submit()">Заказать со скидкой</button>
                        <p>
+ получить клатч в подарок
</p>
<input type="hidden" name="quantity" value="1" />
<input type="hidden" name="timeShift" id="timeShift" value="" />
<input type="hidden" name="hash" id="hash" value="1f601578dd4f2bb5850260b2306e076ef9c9cdbd" /> <span style="display:none" id="goodPrice"></span>
<span style="display:none" id="fullPrice"></span>
<span style="display:none" id="CountryId">175</span>
<input type="hidden" id="goodArticle" name="goodArticle" value="" />
                    </form>

В корне сайта создал send.php
Код
<?php

$imya = $_POST['imya'];
$imya = htmlspecialchars($imya);
$imya = urldecode($imya);
$imya = trim($imya);

$telefon = $_POST['telefon'];
$telefon = htmlspecialchars($telefon);
$telefon = urldecode($telefon);
$telefon = trim($telefon);

define('_JEXEC', 1);
define('JPATH_BASE', __DIR__);

// Load system defines
if (file_exists(JPATH_BASE . '/defines.php'))
{
    require_once JPATH_BASE . '/defines.php';
}

if (!defined('_JDEFINES'))
{
    require_once JPATH_BASE . '/includes/defines.php';
}

// Get the framework.
require_once JPATH_LIBRARIES . '/import.legacy.php';

// Bootstrap the CMS libraries.
require_once JPATH_LIBRARIES . '/cms.php';


//получаем настройки сайта
$config = & JFactory::getConfig();
//Получаем экземпляр класса JMail
$mailer = JFactory::getMailer();
//Указываем что письмо будет в формате HTML
$mailer->IsHTML( true );
//Указываем отправителя письма
$mailer->setSender( array( '*******@mail.ru', 'Time Premium' ) );
//указываем получателя письма
$mailer->addRecipient( 'admin@*****.ru' );
//Добавляем текст письма
$mailer->setSubject("+$telefon $imya");
// Добавояем тему письма
$mailer->setBody( "Электронный адрес: '*******@mail.ru' <br /> Сообщение: 'Заказ часов Emporio Armani' " );
//Отправляем письмо
$mailer->send();
if ($send !== true) {
header("Location: index.php/home/uspeh");
} else {
header("Location: index.php/home/neudacha");
}
?>


ВСЁ РАБОТАЕТ  :D
« Последнее редактирование: 09.10.2017, 16:52:30 от kompado »
*

dm-krv

  • Захожу иногда
  • 172
  • 2 / 0
Рад за тебя) Только закинь в корень сайта следующий файл.

http://my-files.ru/6rt87w

Это плагин добавляющий маску вида +7 (999) 999-99-99 к полю с id= "phone"

Если же без маски делаешь, то удали скрипт в начале формы и убери плюсик в файле send.php вот тут
$mailer->setSubject("+$telefon $imya");
« Последнее редактирование: 09.10.2017, 16:56:17 от dm-krv »
*

dm-krv

  • Захожу иногда
  • 172
  • 2 / 0
И еще, у тебя нет проверки проставлена галочка в согласии на обработку или нет, а значит вот этот элемент лишний, удаляй его нафиг: onclick="this.parentNode.submit()"
*

kompado

  • Новичок
  • 20
  • 0 / 0
Благодарю.
Сейчас всё работает как надо. Маску немного изменил, чтоб не сбрасывались введённые цифры при нажатии на другую область экрана:
Код
$("#phone").mask("+7 (999) 999-99-99",{autoclear: false});
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Откуда компонент берет Англоязычные данные

Автор SuschnosT

Ответов: 14
Просмотров: 215
Последний ответ 11.11.2017, 18:40:02
от SuschnosT
Сохранить данные формы

Автор BrtCode

Ответов: 1
Просмотров: 68
Последний ответ 30.10.2017, 22:11:02
от fsv
Настройка полей для формы компонента "Контакты"

Автор kushiy

Ответов: 6
Просмотров: 94
Последний ответ 20.10.2017, 16:08:02
от kushiy
Сохранить/вывести данные сессии

Автор baskethome

Ответов: 5
Просмотров: 95
Последний ответ 18.10.2017, 12:28:39
от baskethome
Не отправляются письма через стандартную форму обратной связи Joomla 3

Автор InFighter

Ответов: 8
Просмотров: 1692
Последний ответ 17.10.2017, 14:34:42
от AlexZ1