PDA

Zobacz pełną wersję : Captcha we wtyczce z rejestracją



jackos91
05-08-2015, 00:43
Witajcie. Moja strona beczkodance.pl (http://beczkodance.pl).

Mam zainstalowaną google'owską Captchę i działa bardzo dobrze w formularzu rejestracji użytkownika. Mam też zainstalowaną wtyczkę Seminar Manager, którą po długich godzinach skonfigurowałem do swoich potrzeb i działa bardzo dobrze - tylko, że potrzebuję dołożyć do formularza zapisów użytkownika w tej wtyczce (http://beczkodance.pl/index.php/dolacz/2-beczkodance-2015-2016/1-grupa-poczatkujaca-wtorek-panie#appform) Captchę, żeby goście mogli się zapisywać na warsztaty bez konieczności rejestracji jako użytkownik strony.

Wykminiłem, że rejestracja we wtyczce opiera się na dwóch plikach: /components/com_seminarman/views/courses/tmpl/deafult_applicationform.php, gdzie jest szablon formularza do zapisów na warsztaty oraz /components/com_seminarman/views/courses/tmpl/deafult.php gdzie są instrukcje, które pola są wymagane przy rejestracji we wtyczce.

Pliki deafult_applicationform.php, deafult.php, plik .php Captchy recaptcha.php oraz plik z formularzem rejestracji użytkownika załączam tutaj (http://beczkodance.pl/pliki/seminar_formularz.rar).

Do deafult.php dodałem część kodu z recaptcha.php:


private function getResponse($privatekey, $remoteip, $response, $challenge = null) { $version = $this->params->get('version', '1.0');
switch ($version) { case '1.0': $response = $this->_recaptcha_http_post( 'www.google.com', '/recaptcha/api/verify', array( 'privatekey' => $privatekey, 'remoteip' => $remoteip, 'challenge' => $challenge, 'response' => $response ) );
$answers = explode("\n", $response[1]);
if (trim($answers[0]) !== 'true') { // @todo use exceptions here $this->_subject->setError(JText::_('PLG_RECAPTCHA_ERROR_' . strtoupper(str_replace('-', '_', $answers[1]))));
return false; } break; case '2.0': require_once 'recaptchalib.php';
$reCaptcha = new JReCaptcha($privatekey); $response = $reCaptcha->verifyResponse($remoteip, $response);
if ( !isset($response->success) || !$response->success) { // @todo use exceptions here foreach ($response->errorCodes as $error) { $this->_subject->setError($error); }
return false; } break; }
return true; }mając nadzieję, że spowoduje to sprawdzenie kliknięcia w Captchę, ale tylko zablokowałem sobie możliwość wysłania formularza.

Do deafult_applicationform.php dodałem kod:

<table> <tbody> <tr> <script src='https://www.google.com/recaptcha/api.js'></script> <div class="g-recaptcha" data-sitekey="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"></div> </tr> </tbody></table>
dzięki któremu Captcha w ogóle się wyświetla.

Nie umiem jednak napisać, ani znaleźć odpowiedniego kodu do przeklejenia do formularza i wymuszenia kliknięcia w Captchę. Widziałem jakieś stare pluginy integrujące Captchę z podobno każdą możliwą stroną w Joomli, ale nie dało się tego zainstalować (031_plg_jezReCaptcha-v1.0.0). Wiem, że najprościej wyłączyć możliwość zapisów dla gości, ale nie o to w tym chodzi (niestety).

Jak dołączyć Captchę do formularza zapisów wtyczki tak, żeby trzeba było w nią kliknąć?

jackos91
05-08-2015, 10:42
EDIT: na razie wróciłem do domyślnych plików i widok na stronie w tym formularzu jest bez żadnej Captchy.