[Mod] reCaptcha в отзывах

Тема в разделе "WebAsyst", создана пользователем IRIDON, 4 авг 2011.

Модераторы: mdss
  1. IRIDON

    IRIDON

    Регистр.:
    3 авг 2008
    Сообщения:
    227
    Симпатии:
    12
    Взядо Перейти по ссылке , спасибо пользователю gumanoid , правда кусок кода был с ошибкой, но на исправление ушло не много времени.


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


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

    далее редактируем published/SC/html/scripts/includes/product_discussion.php


    Ищем

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

    Ниже вставляем

    PHP:
    include("recaptchalib.php");
        
    $publickey "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
        
    $privatekey="YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY";
    где XXXX (publickey) и YYYY (privatekey) - ключи сгенерированые рекапчей для вашего сайта

    Ищем

    PHP:
        if (isset($_POST["add_topic"])){ // add post to the product discussion

            
    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));
                }
            }
            
    discAddDiscussion$productID$_POST["nick"], $_POST["topic"], $_POST["body"] );
            
    RedirectSQ('productID='.$productID.'&ukey=discuss_product');
        }
    Заменяем на:

    PHP:
        if (isset($_POST["add_topic"])){ // add post to the product discussion

            
    if(CONF_ENABLE_CONFIRMATION_CODE){    
                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));
                    }
                }
                
            
    discAddDiscussion$productID$_POST["nick"], $_POST["topic"], $_POST["body"] );
            
    RedirectSQ('productID='.$productID.'&ukey=discuss_product');
        }
        }
    далее в этом же файле примерно 93 строка
    было:
    PHP:
    $smarty->assign('conf_image'URL_ROOT.'/imgval.php?'.generateRndCode(4).'=1');
    делаем так:

    PHP:
    $smarty->assign('conf_image'recaptcha_get_html($publickey$error));
    теперь в файле published/SC/html/scripts/templates/frontend/product_discussion.html
    почти в самом конце вместо:

    PHP:
    {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}
    Заменяем на:

    PHP:
    {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}
    в шаблоне верстку делайте сами как хотите, рекапча в разы больше стандартной капчи.
    естественно после автоматического обновления изменения в этих двух файлах будут слетать. но так как изменений тут немного, не думаю что будет проблемой возвратить их на место.

    Далее человек просил благодарить его материально, если у вас есть такое желание, то реквизиты можете найти по ссылке которой я давал в начале сообщения.
     
    nigga22480 нравится это.
  2. Alexandr3

    Alexandr3

    Заблокирован
    Регистр.:
    22 апр 2008
    Сообщения:
    429
    Симпатии:
    96
    Сделал по инструкции все, кеш очистил, все равно старая капча, где искать баг? Так же желательно вставить и на форму регистрации.
     
  3. IRIDON

    IRIDON

    Регистр.:
    3 авг 2008
    Сообщения:
    227
    Симпатии:
    12
    Капча будет только в отзывал


    Отредактированные файлы которые я лмчно ставил, на версию 300

    http://depositfiles.com/files/5h14p3mzc
     
  4. werax

    werax Создатель

    Регистр.:
    2 мар 2009
    Сообщения:
    42
    Симпатии:
    4
    Поделюсь своим вариантом решения проблемы спама в отзывах.

    Как-то около года назад напали спам-боты, а здесь на форуме не устраивали решения.
    В моем варианте добавлется вопрос, сколько будет 2+3 и т.п.

    Работает у меня без нареканий! Ни одного спам отзыва с тех пор!

    По шагам:

    1. В редакторе "Языки и перевод" добавляем новую переменную:
    str_enter_ccode_rev ---> "Защита от спама: Напишите, пожалуйста, сколько будет 2 + 3"
    err_wrong_ccode_rev ---> "Введен не правильный ответ на вопрос"

    2. В файле /public_html/published/SC/html/scripts/templates/frontend/product_discussion.html
    После
    Код:
    <tr> <td align=right>{"str_subject"|translate}:</td> <td><input type="text" name="topic" value="{$new_topic.topic|escape:'html'}" ></td> </tr>
    Добавляем еще одно поле с вопросом для анти спама:
    Код:
    <tr> <td align=right width="250">{"str_enter_ccode_rev"|translate}:</td> <td><input type="text" name="antispam" ></td> </tr>
    3. В файле /public_html/published/SC/html/scripts/includes/product_discussion.php
    Находим строку

    Код:
    discAddDiscussion( $productID, $_POST["nick"], $_POST["topic"], $_POST["body"] );
    Заменяем на (проверяет, правильно ли указал пользователь цифру
    Код:
    if ($_POST["antispam"] == 5) { discAddDiscussion( $productID, $_POST["nick"], $_POST["topic"], $_POST["body"] ); } else { Message::raiseMessageRedirectSQ(MSG_ERROR, '#add-review', "err_wrong_ccode_rev", '', array('topic_data' => $_POST)); }
    4. В файле /public_html/published/SC/html/scripts/js/frame.js
    Этот шаг уже необязателен, но многие (90% у меня на сайте) не хотят указывать тему, а просто пишут отзыв. Поэтому я проверку наличия темы отзыва отключаю.

    Код:
    if (document.formD.topic.value.length < 1) { alert(translate.err_input_message_subject); return false; }
    выключаем комментарием


    Код:
    /* if (document.formD.topic.value.length < 1) { alert(translate.err_input_message_subject); return false; } */
    Вот и все!
     
    mras..ad и gukerman нравится это.