Настройка защиты от спамботов для PrestaShop

 

 

 

 PrestaShop 1.7.0.0 и выше.

1. Загрузите с Github.com CleanTalk API.

 

2. Распакуйте архив в папку <root directory>/classes/. Вы получите там папку"php-antispam-master". Переименуйте её в "cleantalk".

 

3. Пройдите в <root directory>/classes/cleantalk и откройте файл CleantalkValidate.php. Найдите строчку:

 

public static $access_key = 'your access key';

 

Введите ваш ключ доступа CleanTalk вместо  your access key:

 

public static $access_key = '123456';

 

4. Для защиты регистраций, откройте файл CustomerForm.php в папке classes/form/.

 

Вставьте код в начале (после <?php):

 

<?php
require_once $_SERVER['DOCUMENT_ROOT'].'/classes/cleantalk/CleantalkValidate.php';

 

Вставьте код в разделе валидации (после $this->validateByModules();):

 

    $spamCheckResult = CleantalkValidate::spamCheckUser($customer->firstname.' '.$customer->lastname, $customer->email);
    if ($spamCheckResult->allow == 0)
        $emailField->addError($this->translator->trans(
            $spamCheckResult->comment, array(), 'Shop.Notifications.Error'
        ));

 

5. Для проверки используйте тестовый e-mail stop_email@example.com. В результате вы должны получить сообщение о блокировке. 

 

6. Для защиты контактной формы, пройдите в <root directory>/modules/contactform и откройте файл contactform.php

 

Вставьте код в начале (после <?php):

 

<?php
require_once $_SERVER['DOCUMENT_ROOT'].'/classes/cleantalk/CleantalkValidate.php';

 

Перед кодом

else {
$customer = $this->context->customer;

 

вставьте следующий код:

    elseif ($spamCheck = CleantalkValidate::spamCheckMessage('', trim(Tools::getValue('from')), $message))
    {
        if ($spamCheck->allow == 0) {
            $this->context->controller->errors[] = $this->trans(
                $spamCheck->comment,
                [],
                'Shop.Notifications.Error'
            );
        }
    }

 

Должно получиться что-то вроде этого:

 

...

         );

        $this->createNewToken();

    } elseif ($spamCheck = CleantalkValidate::spamCheckMessage('', trim(Tools::getValue('from')), $message))

    {

        if ($spamCheck->allow == 0) {

            $this->context->controller->errors[] = $this->trans(

                $spamCheck->comment,

                [],

                'Shop.Notifications.Error'

            );

        }

    } else {

        $customer = $this->context->customer;

...

endphp 

 

Для старых версий (старее 1.7.0.0) шаги 1-3 будут аналогичны.

 

4. Для защиты формы регистрации пройдите в <root directory>/controllers/front и откройте AuthController.php.  

 

Вставьте в начале (после <?php):

 

<?php
require_once $_SERVER['DOCUMENT_ROOT'].'/classes/cleantalk/CleantalkValidate.php';

 

После этой строки (#442):

beginphp
if (!count($this->errors)) {
endphp

 

вставьте код:

 

    $spamCheckResult = CleantalkValidate::spamCheckUser($customer->firstname.' '.$customer->lastname, $customer->email);
    if ($spamCheckResult->allow == 0)
    {
        $this->errors[] = Tools::displayError('User forbidden. Reason: '.$spamCheckResult->comment);
    }

 

  5. Для защиты комментариев пройдите в <root directory>/modules/productcomments/controllers/front/ и откройте файл default.php.

 

Вставьте в начале (после <?php):

 

<?php
require_once $_SERVER['DOCUMENT_ROOT'].'/classes/cleantalk/CleantalkValidate.php';

 

Вставьте код:

 

    $spamCheckResult = CleantalkValidate::spamCheckUser($customer->firstname.' '.$customer->lastname, $customer->email);
    if ($spamCheckResult->allow == 0)
    {
        $this->errors[] = Tools::displayError('User forbidden. Reason: '.$spamCheckResult->comment);
    }

 

После этой строки (#70):

beginphp
$errors = array();
endphp

Примечание: Для защиты комментариев должен быть установлен этот модуль.

 

 6. Для защиты подписки на новости, в папке <root directory>/modules/blocknewsletter/ откройте blocknewsletter.php.
 

 

Вставьте в начале (после <?php):

 

<?php
require_once $_SERVER['DOCUMENT_ROOT'].'/classes/cleantalk/CleantalkValidate.php';

 

Вставьте код вверху функции newsletterRegistration():

 

    $spamCheckResult = CleantalkValidate::spamCheckUser($customer->firstname.' '.$customer->lastname, $customer->email);
    if ($spamCheckResult->allow == 0)
    {
        $this->errors[] = Tools::displayError('User forbidden. Reason: '.$spamCheckResult->comment);
    }

 

 

Вы можете задавать любые вопросы, касающиеся Анти-Спам от CleanTalk через:

 
 — E-mail [ support@cleantalk.org ].
 — Запрос в Системе тикетов [ https://cleantalk.org/my/support ].

Возможно, будет так же интересно