Ma virradóra megjelentek az alábbi nevekkel leadott regisztrációk több Prestashop-ban is:
- Rita and Carmen waiting
- Aria and Lisa waiting
- Evelyn and Katie waiting
- Cathy and Regina waiting
És még sokan mások is várnak:
Mire is várnak?
Másodlagos névnek (keresztnév) viszont már nem nevet ad meg a robot hanem egy linket, melyre kattintva vírusos, pornós-viagrás oldalra vezetnek bennünket. Rita és Carmen csak arra várnak, hogy felvedd velük a kapcsolatot a megadott url-en keresztül. 😀
Megoldás
Az “Orosz szerelmes levelek – recaptcha!” cikkem alapján kell ebben az esetben is eljárni. Ha még nem olvastad el, akkor pótold kérlek. Ha pedig túl vagy a Google ReCaptcha kódjának beépítésén, akkor nézzük meg hogyan tudod implementálni ezt a regisztrációs form-ba.
Prestashop 1.6
Nyissuk meg a témán belüli authentication.tpl
-t, majd a fenti cikkből már megismert
<div class="g-recaptcha" data-sitekey="IDE_A_TE_EGYEDI_AZONOSITOD_JON"></div>
Recaptcha sort tegyük be a submit (a regisztrációs elküldő gomb) fölé vagy alá. A lényeg, hogy a form-on belül maradjunk. Példa itt látható (648. sor körül):
Persze ha többnyelvű shopot használsz akkor a g-recaptcha div-es sor fölé általunk elhelyezett magyarázó szöveget megírhatod l s -ben is:
<p style="font-weight: 900;color: #333;padding-bottom: 5px;">{l s='Please confirm you are not a robot!'}</p>
Fontos megjegyezni, hogy a regisztráció esetében nem, vagy nem mindig olvassa be a Prestashop a header.tpl-be tett javascript-et, így kivételesen ennek az authentication.tpl-nek az elejébe is tedd be a header.tpl-ben már bent lévő ReCaptcha-hívó scriptet:
<script src='https://www.google.com/recaptcha/api.js'></script>
Jön az ellenőrzés: nyisd meg a /controllers/front/AuthController.php
-t (nézd meg, hogy override-olva van-e már esetleg), majd a 409. sor körüli “Preparing customer” után lévő ellenőrzéshez tegyük be az alábbi kódot:
} elseif (!($gcaptcha = (int)(Tools::getValue('g-recaptcha-response')))) {
$this->errors[] = Tools::displayError('Kérlek jelöld be alul, hogy nem vagy robot!');
}
Valahogy ekképp:
Ha kész, mindent mentsünk el és próbáljuk ki működik-e:
Kiegészítés:
Ha az 1.6-osodban aktív az egyoldalas rendelés, illetve azon belül a vendégként való rendelés akkor még szükség van 2 fájl módosítására. Az egyik a vendégrendelés tpl-je: /themes/TÉMÁDNEVE/order-opc-new-account.tpl
. Nyisd meg, és a {$HOOK_CREATE_ACCOUNT_FORM}
után (valahol a 324-es sor környékén) szúrd be az authentication.tpl
-nél már megismert sort:
<div class="g-recaptcha" data-sitekey="IDE_A_TE_EGYEDI_AZONOSITOD_JON"></div>
A másik fájl az egyoldalas rendelés során adatokat küldő-fogadó javascript: /themes/TÉMÁDNEVE/js/order-opc.js
. Itt találni fogsz a 174. sor körül paramétereket. Ide tegyük be a miénket!
params += 'g-recaptcha-response='+encodeURIComponent($('#g-recaptcha-response').val())+'&';
Modul megoldás
Persze vannak olyan modulok melyek ezt a feladatot ellátják helyettünk. Ilyenek például:
https://addons.prestashop.com/en/website-security-access/18478-re-captcha-anti-spam-recaptcha.html
https://addons.prestashop.com/en/secure-payment-prestashop-modules/26997-captcha.html
https://addons.prestashop.com/en/website-security-access/26035-knowband-google-recaptcha.html
Prestashop 1.7
EgyPontHetes esetében az alábbi fájlt nyisd meg ahhoz, hogy a g-recaptcha-s linket be tudd tenni:
/themes/TÉMÁDNEVE/templates/customer/_partials/customer-form.tpl
Ezen belül pedig meghatározhatod, hogy a form-on belül hová teszed. Mi így oldottuk meg:
<div class="g-recaptcha" data-sitekey="IDE_A_TE_EGYEDI_AZONOSITOD_JON"></div>
Jön az ellenőrzés:
/classes/form/CustomerForm.php
A validate function-ön belül (~105. sortól kezdődik) az e-mail és a birthday ellenőrzése után szúrjuk be ezt:
$gcaptcha = (int)(Tools::getValue('g-recaptcha-response'));
$gcaptchaField = $this->getField('email');
if ($gcaptcha == 0) {
$gcaptchaField->addError($this->translator->trans(
'Kérlek jelöld be alul, hogy nem vagy robot!', array(), 'Shop.Notifications.Error'
));
}
Képen:
Majd próba 🙂