Consult Опубликовано 11 декабря, 2018 Жалоба Поделиться Опубликовано 11 декабря, 2018 Поэтому вставил в начало функции function fetch() { $response = null; $reCaptcha = new \ReCaptcha\ReCaptcha($this->settings->secret_code); Проблема - форма связи не работает, т.е не приходит сообщение в админку. Капчу если не отметить на странице контактов, то просто страница перезагружается. Точно также она перезагружается, если ее отметить и все. Полный код FeedbackView <?PHP /** * Simpla CMS * * @copyright 2011 Denis Pikusov * @link http://simp.la * @author Denis Pikusov * * Отображение статей на сайте * Этот класс использует шаблоны articles.tpl и article.tpl * */ require_once('View.php'); class FeedbackView extends View { function fetch() { $response = null; $reCaptcha = new \ReCaptcha\ReCaptcha($this->settings->secret_code); if($this->request->method('post') && $this->request->post('feedback')) { $feedback->name = $this->request->post('name'); $feedback->email = $this->request->post('email'); $feedback->message = $this->request->post('message'); $captcha_code = $this->request->post('g-recaptcha-response'); $response = $reCaptcha->verify($captcha_code); $this->design->assign('name', $feedback->name); $this->design->assign('email', $feedback->email); $this->design->assign('message', $feedback->message); if(empty($feedback->name)) $this->design->assign('error', 'empty_name'); elseif(empty($feedback->email)) $this->design->assign('error', 'empty_email'); elseif(empty($feedback->message)) $this->design->assign('error', 'empty_text'); elseif($response->getErrorCodes()) { $this->design->assign('error', 'captcha'); } else { $this->design->assign('message_sent', true); //Добавляем на подписку $new_letterssas->email = $feedback->email; $new_letterssas->name = $feedback->name; $new_letterssas->active = 1; $this->mailer->add_user($new_letterssas); $feedback->ip = $_SERVER['REMOTE_ADDR']; $feedback_id = $this->feedbacks->add_feedback($feedback); // Отправляем email $this->notify->email_feedback_admin($feedback_id); } if(!empty($password)) { $this->users->update_user($this->user->id, array('password'=>$password)); } } if($this->page) { $this->design->assign('meta_title', $this->page->meta_title); $this->design->assign('meta_keywords', $this->page->meta_keywords); $this->design->assign('meta_description', $this->page->meta_description); } $body = $this->design->fetch('feedback.tpl'); return $body; } } Цитата Ссылка на сообщение Поделиться на другие сайты
Gruzin Опубликовано 11 декабря, 2018 Жалоба Поделиться Опубликовано 11 декабря, 2018 (изменено) Поэтому вставил в начало функции function fetch() { $response = null; $reCaptcha = new \ReCaptcha\ReCaptcha($this->settings->secret_code); Проблема - форма связи не работает, т.е не приходит сообщение в админку. Капчу если не отметить на странице контактов, то просто страница перезагружается. Точно также она перезагружается, если ее отметить и все. Полный код FeedbackView <?PHP /** * Simpla CMS * * @copyright 2011 Denis Pikusov * @link http://simp.la * @author Denis Pikusov * * Отображение статей на сайте * Этот класс использует шаблоны articles.tpl и article.tpl * */ require_once('View.php'); class FeedbackView extends View { function fetch() { $response = null; $reCaptcha = new \ReCaptcha\ReCaptcha($this->settings->secret_code); if($this->request->method('post') && $this->request->post('feedback')) { $feedback->name = $this->request->post('name'); $feedback->email = $this->request->post('email'); $feedback->message = $this->request->post('message'); $captcha_code = $this->request->post('g-recaptcha-response'); $response = $reCaptcha->verify($captcha_code); $this->design->assign('name', $feedback->name); $this->design->assign('email', $feedback->email); $this->design->assign('message', $feedback->message); if(empty($feedback->name)) $this->design->assign('error', 'empty_name'); elseif(empty($feedback->email)) $this->design->assign('error', 'empty_email'); elseif(empty($feedback->message)) $this->design->assign('error', 'empty_text'); elseif($response->getErrorCodes()) { $this->design->assign('error', 'captcha'); } else { $this->design->assign('message_sent', true); //Добавляем на подписку $new_letterssas->email = $feedback->email; $new_letterssas->name = $feedback->name; $new_letterssas->active = 1; $this->mailer->add_user($new_letterssas); $feedback->ip = $_SERVER['REMOTE_ADDR']; $feedback_id = $this->feedbacks->add_feedback($feedback); // Отправляем email $this->notify->email_feedback_admin($feedback_id); } if(!empty($password)) { $this->users->update_user($this->user->id, array('password'=>$password)); } } if($this->page) { $this->design->assign('meta_title', $this->page->meta_title); $this->design->assign('meta_keywords', $this->page->meta_keywords); $this->design->assign('meta_description', $this->page->meta_description); } $body = $this->design->fetch('feedback.tpl'); return $body; } } А у вас какая версия? У меня есть такая строчка class FeedbackView extends View { function fetch() { $feedback = new stdClass; if($this->request->method('post') && $this->request->post('feedback')) { $feedback->name = $this->request->post('name'); $feedback->email = $this->request->post('email'); $feedback->message = $this->request->post('message'); $captcha_code = $this->request->post('captcha_code'); Изменено 11 декабря, 2018 пользователем Gruzin Цитата Ссылка на сообщение Поделиться на другие сайты
Consult Опубликовано 11 декабря, 2018 Жалоба Поделиться Опубликовано 11 декабря, 2018 А у вас какая версия? У меня есть такая строчка class FeedbackView extends View { function fetch() { $feedback = new stdClass; if($this->request->method('post') && $this->request->post('feedback')) { $feedback->name = $this->request->post('name'); $feedback->email = $this->request->post('email'); $feedback->message = $this->request->post('message'); $captcha_code = $this->request->post('captcha_code'); 2.1.5 Ну вот я туда примерно и вставил, но не работает. Само сообщение в админку не приходит даже, но видимо из-за капчи. Цитата Ссылка на сообщение Поделиться на другие сайты
Consult Опубликовано 11 декабря, 2018 Жалоба Поделиться Опубликовано 11 декабря, 2018 Вернул почти стандартный FeedbackView и стандартную капчу - работает . Цитата Ссылка на сообщение Поделиться на другие сайты
Consult Опубликовано 11 декабря, 2018 Жалоба Поделиться Опубликовано 11 декабря, 2018 (изменено) Разобрался..,переопределял рекапчу, чтобы сделать 2 в карточке товара, а использовал стандартный див Вот так было <script type="text/javascript"> var onloadCallback = function() { if($("#recaptcha2").length) { grecaptcha.render('recaptcha2', { 'sitekey' : 'XXX' }); } if($("#recaptcha1").length) { grecaptcha.render('recaptcha1', { 'sitekey' : 'XXX' }); }} </script> поэтому и выводить надо было так: <div id="recaptcha1"></div> Изменено 11 декабря, 2018 пользователем Consult Цитата Ссылка на сообщение Поделиться на другие сайты
Consult Опубликовано 11 декабря, 2018 Жалоба Поделиться Опубликовано 11 декабря, 2018 (изменено) Самый интересный вопрос в этой теме - как проверку сделать, отмечена рекапча или нет. Не так-то просто. Получается, что на стороне клиента никак, потому что это не особо проверка и ее легко можно обойти с помощью data-callback="recaptchaCallback" не выходит Изменено 11 декабря, 2018 пользователем Consult Цитата Ссылка на сообщение Поделиться на другие сайты
Consult Опубликовано 11 декабря, 2018 Жалоба Поделиться Опубликовано 11 декабря, 2018 Пробовал вот этот способ http://prntscr.com/lto8ch Но не работает.. Если у кого будет время - пишите в ЛС, договоримся за деньги Цитата Ссылка на сообщение Поделиться на другие сайты
Consult Опубликовано 11 декабря, 2018 Жалоба Поделиться Опубликовано 11 декабря, 2018 (изменено) Если конкретно, то пробовал так <script type="text/javascript"> var onloadCallback = function() { if($("#recaptcha2").length) { grecaptcha.render('recaptcha2', { 'sitekey' : 'XXX' }); } if($("#recaptcha1").length) { grecaptcha.render('recaptcha1', { 'sitekey' : 'XXX', 'data-callback' : 'recaptchaCallback' }); }} </script> И добавил функцию. <script> {literal} function recaptchaCallback() { alert( "Отловили ответ, можно значит проверку сделать и выполнить любое действие" ); }; {/literal} </script> Но функция не срабатывает UPD.Срабатывает... я дуракВот так надо, без data, перед callback <script type="text/javascript"> var onloadCallback = function() { if($("#recaptcha2").length) { grecaptcha.render('recaptcha2', { 'sitekey' : 'XXX' }); } if($("#recaptcha1").length) { grecaptcha.render('recaptcha1', { 'sitekey' : 'XXX', 'callback' : 'recaptchaCallback' }); }} </script> Изменено 11 декабря, 2018 пользователем Consult Цитата Ссылка на сообщение Поделиться на другие сайты
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.