Перейти к содержанию
Официальный форум поддержки Simpla

Рекомендуемые сообщения

Поэтому вставил в начало функции

	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;
	}
}

Ссылка на сообщение
Поделиться на другие сайты

 

Поэтому вставил в начало функции

	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');
Изменено пользователем Gruzin
Ссылка на сообщение
Поделиться на другие сайты

 

А у вас какая версия? У меня есть такая строчка

 

 

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

 

 

Ну вот я туда примерно и вставил, но не работает. Само сообщение в админку не приходит даже, но видимо из-за капчи.

Ссылка на сообщение
Поделиться на другие сайты

Разобрался..,

переопределял рекапчу, чтобы сделать 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>
Изменено пользователем Consult
Ссылка на сообщение
Поделиться на другие сайты

Самый интересный вопрос в этой теме - как проверку сделать, отмечена рекапча или нет.

 

Не так-то просто. Получается, что на стороне клиента никак, потому что это не особо проверка и ее легко можно обойти

 

с помощью data-callback="recaptchaCallback" не выходит

Изменено пользователем Consult
Ссылка на сообщение
Поделиться на другие сайты

Пробовал вот этот способ http://prntscr.com/lto8ch

 

Но не работает..

 

Если у кого будет время - пишите в ЛС, договоримся за деньги

Ссылка на сообщение
Поделиться на другие сайты

Если конкретно, то пробовал так 

<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>
Изменено пользователем Consult
Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
×
×
  • Создать...