Всем привет! У меня OpenCart (русская сборка v2.0.2.0). В ней нет базовой капчи, а есть капча гугл, которая, как оказалось не работает. Вот я и решил установить свою капчу. Но не как модуль, а просто привязав ее к форме обратной связи. Создал в корневой папке папку captcha. В нее поместил файлы index.html (сама капча), captcha.php (генерация капчи), background.png (фон капчи) и verify.php (файл обработки капчи). Саму капчу вывел в форме без проблем. Но вот код обработки капчи: <?php session_start(); //проверяет соответствие коду CAPTCHA if ($_SESSION["code"] == $_POST["captcha"]) { //сообщаем строку true, если код соответствует echo 'true'; } else { //сообщаем строку false, если код не соответствует echo 'false'; header("Location: captcha.php"); } ?> ) который находится в файле verify.php не знаю куда и как правильно вставить. Форма обратной связи обрабатывается другим файлом (<form action="<?php echo $action; ?>" method="post" enctype="multipart/form-data" class="form-horizontal">). Подскажите, если кто знает, как мне это реализовать
Пожалуйста, оформляйте код правильно Рекомендации по оформлению кода и вопросов Лучше взять из версии 2.3 капчу базовую и будет счастье. Если не справитесь... сам напишу решение на недельке..
1. В директорию catalog\controller\tool кидаем файл captcha.php 2. В шаблоне \catalog\view\theme\default\template\information\contact.tpl вставим код капчи Код: <div class="form-group required"> <label class="col-sm-2 control-label" for="input-captcha"><?php echo $entry_captcha; ?></label> <div class="col-sm-2"> <input type="text" name="captcha" id="input-captcha" class="form-control" /> </div> <div class="col-sm-6"> <img src="index.php?route=tool/captcha" alt="" /> <?php if ($error_captcha) { ?> <div class="text-danger"><?php echo $error_captcha; ?></div> <?php } ?> </div> </div> 3. Далее в контроллере \catalog\controller\information\contact.php перед Код: return !$this->error; вставим PHP: if (empty($this->session->data['captcha']) || ($this->session->data['captcha'] != $this->request->post['captcha'])) { $this->error['captcha'] = $this->language->get('error_captcha'); } перед Код: $data['column_left'] = $this->load->controller('common/column_left'); вставим PHP: if (isset($this->request->post['captcha'])) { $data['captcha'] = $this->request->post['captcha']; } else { $data['captcha'] = ''; } перед Код: $data['button_submit'] = $this->language->get('button_submit'); вставим PHP: if (isset($this->error['captcha'])) { $data['error_captcha'] = $this->error['captcha']; } else { $data['error_captcha'] = ''; } и после Код: if (($this->request->server['REQUEST_METHOD'] == 'POST') && $this->validate()) { вставим PHP: unset($this->session->data['captcha']); Ну и в яз файл добавить переменные error_captcha и entry_captcha и назначить их при необходимости. Должно работать.. если постараться...
Ravilr, здравствуйте! Спасибо еще раз за помощь с капчей. Скажите, а как-то можно прикрутить к ней кнопку обновления?
Добрый вечер. Помогите, пожалуйста, установить капчу на страницу Регистрация. У меня OpenCart 1.5.6.4
HTML: <img src="index.php?route=tool/captcha" alt="" onclick="this.src='index.php?route=tool/captcha&id=' + (+new Date());"/> при клике по капче, должна изменяться. пробуйте. я не проверял
То вы писали для сборки v2.0.2.0, как понимаю. А относительно 2.3 можете разложить в таком же виде? По указанному адресу в 2.3 нет капчи и как она где должна располагаться ума не приложу (не, ну она есть тут admin/controller/extension/captcha/basic_captcha.php - однако название другое имеет) Не могу понять, куда эта капча у меня подевалась со страниц. Точно помню, шо она была. А потом в процессе всяких правок кудась исчезла. Когда - не помню. Куда - не знаю. Посмотрела - в настройках магаза в опциях включена. В модулях включена (обычная капча, по умолчанию). Грешу на всякие правки и конфликты в результате этого, но думаю - дайка перед заменой сайта на серваке - спрошу, мож умные люди чего скажут доброго... Фактически она конечно не сильно спасает от ботов, они ща научились обходить всё. Но важно мне понять, куда она делась. Для порядку. Вот в голове крутится, шо мне она как-то даже надоела и я могла сгоряча её удалить. Так я бы заблокировала её работу и всё. А тут всё открыто вроде, а её нет. Чертовщина какая-то У меня вместо for="input-captcha" везде писано for="input-name" - это нормально? П.С. Усиленно соображаю - может я даже ставила ваш модуль раньше https://forum.opencart-russia.ru/threads/modul-forma-obratnoj-svjazi.4230/#post-41086 (это я с положительной интонацией сказала - вдруг я не там где надо кнопку включения ищу)
Лежит она в 2.3 как отдельные модули, в директории *\extension\captcha Соответственно в контроллере необходимых "страниц" есть код PHP: // Captcha if ($this->config->get($this->config->get('config_captcha') . '_status') && in_array('contact', (array)$this->config->get('config_captcha_page'))) { $data['captcha'] = $this->load->controller('extension/captcha/' . $this->config->get('config_captcha'), $this->error); } else { $data['captcha'] = ''; } который проверяет статус капчи и для какой защищаемой странице включено. На основе этих данных и происходит включение капчи в контроллер странице.
Ан нет!!! Взяла в поиск ВСЮ строчку и указанный вами код только в одном файле обнаружен - в catalog\controller\information\contact.php А в других уже другой код. Буду сравнивать их разницу...
У меня почему-то там лежат другие файлы: admin/controller/extension/captcha/basic_captcha.php Но в нём нет такого кода, как вы показали catalog/controller/extension/captcha/--- нет файла с базовой капчей--- По этому адресу совсем нет такого файла (там только Гуглевская капча) ПС. Приложила на всяк случай базовую капчу из адреса admin/controller/extension/captcha/basic_captcha.php
Вау! Вставила из базовой версии прямо, из оСторе 2.3.02 (какую быстро нашла под рукой) И о, чудо, появился код! Благодарю,Ravilr, за поддержку!
Но есть одна особенность - код не меняется. Я написала сообщение, отправила, а код остался таким же. Написала следующее, отправила, всё опубликовалось. Понимаю так, шо он под сессией работает одного человека. Выхожу, захожу с другого браузера и там уже другой код. А может кто помнит, как сделать код постоянно сменяемым? Отправил чел сообщение - и код изменился. Шоб не привязывался к сессии? Я не уверена, что захочу такое внедрять, но шоб принять решение хотелось бы попробовать для начала...