Идем на recapcha.net
если у вас нет google-аккаунта, то регистрируетесь.
создаете ключи для своего домена.
вот отсюда
забираете php-библиотеку, распаковываете,файл recaptchalib.php копируете в published/SC/html/scripts

Не забываем делать копии редактируемых файлов!

далее редактируем published/SC/html/scripts/includes/product_discussion.php
в самом начале примерно 6-7 строчка, после

Код:

$Message = $Register->get(VAR_MESSAGE);
    /*@var $Message Message*/

вставляем этот кусок

Код:

include("recaptchalib.php");
    $publickey = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
    $privatekey="YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY";

где XXXX и YYYY – ключи сгенерированые рекапчей для вашего сайта

далее в этом же файле ниже примерно 27 строка
было так:

Код:

if(CONF_ENABLE_CONFIRMATION_CODE){
                        require_once(DIR_CLASSES.'/class.ivalidator.php');
                        $iVal = new IValidator();
                        if(!$iVal->checkCode($_POST['fConfirmationCode'])){

                                Message::raiseMessageRedirectSQ(MSG_ERROR, '#add-review', "err_wrong_ccode", '', array('topic_data' => $_POST));
                        }
                }

делаем так:

Код:

if(CONF_ENABLE_CONFIRMATION_CODE){    
    /*            
            require_once(DIR_CLASSES.'/class.ivalidator.php');
            $iVal = new IValidator();
            if(!$iVal->checkCode($_POST['fConfirmationCode'])){

                Message::raiseMessageRedirectSQ(MSG_ERROR, '#add-review', "err_wrong_ccode", '', array('topic_data' => $_POST));
            }
    */
            if ($_POST["recaptcha_response_field"]) {
            $resp = recaptcha_check_answer ($privatekey,
                                        $_SERVER["REMOTE_ADDR"],
                                        $_POST["recaptcha_challenge_field"],
                                        $_POST["recaptcha_response_field"]);

                if (!$resp->is_valid) {
                    Message::raiseMessageRedirectSQ(MSG_ERROR, '#add-review', "err_wrong_ccode", '', array('topic_data' => $_POST));
                }
            }

далее в этом же файле примерно 93 строка
было:

Код:

$smarty->assign('conf_image', URL_ROOT.'/imgval.php?'.generateRndCode(4).'=1');

делаем так:

Код:

//$smarty->assign('conf_image', URL_ROOT.'/imgval.php?'.generateRndCode(4).'=1');
    $smarty->assign('conf_image', recaptcha_get_html($publickey, $error));

теперь в файле published/SC/html/scripts/templates/frontend/product_discussion.html
почти в самом конце вместо:

Код:

{if $smarty.const.CONF_ENABLE_CONFIRMATION_CODE}
<tr>
    <td colspan="2">&nbsp;</td>
</tr>
<tbody class="background1">
<tr>
    <td colspan="2">{"str_enter_ccode"|translate}</td>
</tr>
<tr>
    <td align="right">
        <img src="{$conf_image}" alt="code" align="right" />
    </td>
    <td align="left">
        <input name="fConfirmationCode" type="text" >
    </td>
</tr>
</tbody>
{/if}

делаем:

Код:

{if $smarty.const.CONF_ENABLE_CONFIRMATION_CODE}
<tr>
    <td colspan="2">&nbsp;</td>
</tr>
<tbody class="background1">
<tr>
    <td colspan="2">{"str_enter_ccode"|translate}</td>
</tr>
<tr> 
        <td align="right">
<!--                 <img src="{$conf_image}" alt="code" align="right" />
        </td>
        <td align="left">
                <input name="fConfirmationCode" type="text" >  -->
        </td>
        <td>
            {$conf_image}
        </td>
</tr>
</tbody>
{/if}

в шаблоне верстку делайте сами как хотите, рекапча в разы больше стандартной капчи.
естественно после автоматического обновления изменения в этих двух файлах будут слетать. но так как изменений тут немного, не думаю что будет проблемой возвратить их на место.

будет примерно так:
recapchaex

Источник

Голосов  (1)
Об авторе

Веб-разработчик. Работа с проектами простой и средней сложности. Верстка, программирование. Simpla, Drupal, Wordpress.

Смотреть посты