yura3d |
Отправлено: 30 июля 2009 — 18:38
|
ExBB Team ExBB Developer ExBB Mods Author
Покинул форум
Сообщений всего: 3394
Дата рег-ции: Февр. 2009
Откуда: Минск, Беларусь
Репутация: 353
|
В продолжение начинания пользователя altjo решил выложить доработанный вариант модуля антиспама для гостей, который требует от гостей ввода защитного кода с картинки (каптчи) при создании тем или написании сообщений. Для установки необходимо проделать следующие изменения
Откройте файл post.php, найдите строки:
CODE:function addnewthread() {
global $fm;
И под ними вставьте строку:
Далее в этом же файле найдите строки:
CODE:function addreply() {
global $fm;
И под ними вставьте строку:
Затем в этом же файле найдите последнюю строку:
И над ней вставьте строки:
CODE:function check_captcha() {
global $fm;
if ($fm->exbb['anti_bot'] && !$fm->user['id'] && (!isset($_SESSION['captcha']) || $fm->_String('captcha') !== $_SESSION['captcha']))
$fm->_Message($fm->LANG['Captcha'], $fm->LANG['CaptchaMes']);
}
Теперь откройте файл language/russian/lang_front_forums.php, найдите строку:
CODE:$this->LANG['MoveInExistsOk'] = 'Выбранные сообщения успешно выделены в тему "%s"!';
И под ней вставьте строки:
CODE:/*
captcha
*/
$this->LANG['Captcha'] = 'Защитный код';
$this->LANG['CaptchaDesc'] = 'Введите код, изображённый на картинке<br /><br />Зарегистрируйтесь, чтобы избавиться от необходимости ввода защитного кода';
$this->LANG['CaptchaReload'] = 'Если Вы не видите код на картинке, попробуйте <a href="#" onClick="reload_captcha(); return false;"><b>обновить картинку</b></a>';
$this->LANG['CaptchaMes'] = 'Введён неверный защитный код!<br />Зарегистрируйтесь, чтобы избавиться от необходимости ввода защитного кода.';
Далее откройте файлы post_addnew.tpl и post_reply.tpl (они располагаются в папке templates/InvisionExBB), в каждом из них найдите строки:
CODE:if ($upload !== 0) {
echo <<<DATA
<tr valign="top">
<td class="pformleft">
{$fm->LANG['FileUpload']}
</td>
<td class="pformright">
{$fm->LANG['FileUploadMax']}{$upload}
<br />
{$fm->LANG['UploadExts']} {$fm->exbb['file_type']}
<br />
<input type="hidden" name="MAX_FILE_SIZE" value="{$upload}">
<input class="input" type="file" size="30" name="FILE_UPLOAD">
</td>
</tr>\n
DATA;
}
И под ними вставьте строки:
CODE:if ($fm->exbb['anti_bot'] && !$fm->user['id'])
echo <<<DATA
<tr>
<td class="pformleft" valign="top"><b>{$fm->LANG['Captcha']}</b><br />{$fm->LANG['CaptchaDesc']}</td>
<td class="pformright" valign="top">{$fm->LANG['CaptchaReload']}<br /><br />
<img id="captcha" src="regimage.php" alt="Captcha" /><br /><br />
<input type="text" name="captcha" size="20" maxlength="10" />
<script language="JavaScript" src="javascript/reload_captcha.js"></script></td>
</tr>
DATA;
Затем откройте файл templates/InvisionExBB/post_form.tpl, найдите строки:
CODE:if ($upload !== 0) {
$post_form .= <<<DATA
<tr valign="top">
<td class="pformleft">
{$fm->LANG['FileUpload']}
</td>
<td class="pformright">
{$fm->LANG['FileUploadMax']}{$upload}
<br />
{$fm->LANG['UploadExts']} {$fm->exbb['file_type']}
<br />
<input type="hidden" name="MAX_FILE_SIZE" value="{$upload}">
<input class="input" type="file" size="30" name="FILE_UPLOAD">
</td>
</tr>
DATA;
}
И под ними вставьте строки:
CODE:if ($fm->exbb['anti_bot'] && !$fm->user['id'])
$post_form .= <<<DATA
<tr>
<td class="pformleft" valign="top"><b>{$fm->LANG['Captcha']}</b><br />{$fm->LANG['CaptchaDesc']}</td>
<td class="pformright" valign="top">{$fm->LANG['CaptchaReload']}<br /><br />
<img id="captcha" src="regimage.php" alt="Captcha" /><br /><br />
<input type="text" name="captcha" size="20" maxlength="10" />
<script language="JavaScript" src="javascript/reload_captcha.js"></script></td>
</tr>
DATA;
Осталось только скачать из прикреплённого архива файл reload_captcha.js и закачать его в папку javascript
На этом всё. Данный мод работает в том случае, если в админке включена защита от регистрации ботов (Админцентр -> Общие настройки -> Безопасность -> Активировать защиту от регистрации ботов? -> да). Все Ваши пожелания и предложения по этому моду оставляйте в данной теме
|
|
|
luigi |
Отправлено: 31 июля 2009 — 10:39
|
Newbie
Покинул форум
Сообщений всего: 10
Дата рег-ции: Март 2009
Репутация: 2
|
with this code:
CODE:
<script language="javascript">
function reloadimage() {
var currentTime = new Date()
document.getElementById('captcha').src='regimage.php?ss='+currentTime.getTime();
}
</script>
and
CODE:
<div style="float:left;"><img id="captcha" src="regimage.php" border="0" alt="captcha"></div><div style="vertical-align:middle;" class="button"><input type="button" value="{$fm->LANG['CaptchaReload']}" onClick="reloadimage()" /></div>
<br><br><br><input type="text" name="captcha" size="13" maxlength="10">
it's possible to reload only the Captcha image and not all page Прикреплено изображение
(Отредактировано автором: 31 июля 2009 — 10:42) |
|
|
yura3d |
Отправлено: 31 июля 2009 — 11:42
|
ExBB Team ExBB Developer ExBB Mods Author
Покинул форум
Сообщений всего: 3394
Дата рег-ции: Февр. 2009
Откуда: Минск, Беларусь
Репутация: 353
|
luigi
That's good idea
Предложенный luigi вариант позволяет перезагружать картинку с кодом (каптчу) без необходимости перезагрузки всей страницы, а это особенно актуально, если картинка сформировалась таким образом, что некоторые символы плохо видны. В первом сообщении уже выложена усовершенствованная версия этого мода, для тех же, кто уже устанавливал данный мод необходимо проделать следующие изменения
Откройте файл language/russian/lang_front_forums.php, найдите строку:
CODE:$this->LANG['CaptchaDesc'] = 'Введите код, изображённый на картинке<br /><br />Зарегистрируйтесь, чтобы избавиться от необходимости ввода защитного кода';
И под ней разместите строку:
CODE:$this->LANG['CaptchaReload'] = 'Если Вы не видите код на картинке, попробуйте <a href="#" onClick="reload_captcha(); return false;"><b>обновить картинку</b></a>';
Далее откройте файлы post_addnew.tpl, post_reply.tpl и post_form.tpl (все они находятся в папке templates/InvisionExBB), в каждом из них найдите строки:
CODE:<tr>
<td class="pformleft" valign="top"><b>{$fm->LANG['Captcha']}</b><br />{$fm->LANG['CaptchaDesc']}</td>
<td class="pformright" valign="top"><img src="regimage.php" alt="Captcha" /><br /><br />
<input type="text" name="captcha" size="20" maxlength="10" /></td>
</tr>
И замените их строками:
CODE:<tr>
<td class="pformleft" valign="top"><b>{$fm->LANG['Captcha']}</b><br />{$fm->LANG['CaptchaDesc']}</td>
<td class="pformright" valign="top">{$fm->LANG['CaptchaReload']}<br /><br />
<img id="captcha" src="regimage.php" alt="Captcha" /><br /><br />
<input type="text" name="captcha" size="20" maxlength="10" />
<script language="JavaScript" src="javascript/reload_captcha.js"></script></td>
</tr>
Останется только разместить файл reload_captcha.js (скачать его можно здесь) в папке javascript
Как выглядит вариант мода с обновлением картинки, Вы можете видеть на скриншоте ниже Прикреплено изображение
|
|
|
yura3d |
Отправлено: 31 июля 2009 — 18:08
|
ExBB Team ExBB Developer ExBB Mods Author
Покинул форум
Сообщений всего: 3394
Дата рег-ции: Февр. 2009
Откуда: Минск, Беларусь
Репутация: 353
|
electron пишет:а можно нечто подобное и в окне регистрации сделать? я понимаю, что это не очень сложно и попробовал бы сам, но не соображу куда лезть...
Можно. В файле language/russian/lang_front_register.php нужно найти строку:
CODE:$this->LANG['CaptchaBroken'] = 'Если Вы не видете код на картинке, то перегрузите окно браузера (Ctrl+R)';
И заменить её строкой:
CODE:$this->LANG['CaptchaBroken'] = 'Если Вы не видете код на картинке, то <a href="#" onClick="reload_captcha(); return false;"><b>обновите картинку с кодом</b></a>';
Далее в файле templates/InvisionExBB/agreed.tpl найти строку:
CODE:<td class="profilright"><img src="regimage.php" border="0" alt="captcha"></td>
И заменит её строкой:
CODE:<td class="profilright"><img src="regimage.php" id="captcha" border="0" alt="captcha"></td>
И, наконец, в этом же файле чуть ниже ищем строку:
CODE:<td class="profilright"><input type="text" style="width: 130px" name="captcha" size="13" maxlength="10"></td>
И заменяем её строками:
CODE:<td class="profilright"><input type="text" style="width: 130px" name="captcha" size="13" maxlength="10">
<script language="JavaScript" src="javascript/reload_captcha.js"></script></td>
Чтобы обновление каптчи работало, в папке javascript должен размещаться скрипт reload_captcha.js, выложенный в первом сообщении темы |
|
|
altjo |
Отправлено: 18 февраля 2010 — 16:28
|
ExBB Skins Creator
Покинул форум
Сообщений всего: 277
Дата рег-ции: Февр. 2009
Репутация: 86
|
*пожалуй, поделюсь своими маразмами=)
Упрощённая текстовая альтернатива мода "Антиспам для гостей при создании тем и сообщений" (возможно кого-то заинтересует)
Включение/Отключение мода возможно в Админцентре, в разделе "Управление" Модулями
*****
Недостатки:
- пользователи с выключенным JavaScript не смогут оставлять сообщения/создавать темы
- пока не тестировалось в боевых условиях (собственно остановит ли это спам-бота неизвестно=)) *в процессе тестирования
*****
Обновление от 26.02.2010 (только для тех, кто ранее устанавливал этот текстовый мод)
Спойлер (Отобразить)- Замените оригинальные файлы содержимым прикрепленного архива txtcode.zip
- Откройте файлы post_addnew.tpl, post_reply.tpl и post_form.tpl
найдите в каждом
CODE:if(!$fm->user['id'])
и замените на
CODE:if(!$fm->user['id'] && $fm->exbb['txtcode'] === TRUE)
- откройте post.php
найдите
CODE:if(!$fm->user['id'] && (!isset($_SESSION['txtuid']) || $fm->_String('txtuid') !== $_SESSION['txtuid']))
и замените на
CODE:if(!$fm->user['id'] && $fm->exbb['txtcode'] === TRUE && (!isset($_SESSION['txtuid']) || $fm->_String('txtuid') !== $_SESSION['txtuid']))
*****
УСТАНОВКА:
- перенесите папку /txtcode/ из архива, в каталог /modules/ форума.
- следуйте инструкциям, описанным ниже.
Спойлер (Отобразить)В файле post.php
Найдите строки:
CODE:function addnewthread() {
global $fm;
И под ними вставьте строку:
Найдите строки:
CODE:function addreply() {
global $fm;
И под ними вставьте строку:
Найдите последнюю строку:
И над ней вставьте следующее:
CODE:function txtcode()
{
global $fm;
if(!$fm->user['id'] && $fm->exbb['txtcode'] === TRUE && (!isset($_SESSION['txtuid']) || $fm->_String('txtuid') !== $_SESSION['txtuid']))
{
$fm->_Message($fm->LANG['TxtCode'], $fm->LANG['TxtCodeErr']);
}
}
-------------------------
Откройте файлы post_addnew.tpl и post_reply.tpl (в папке со скином), и в каждом из них найдите строки:
CODE:if ($upload !== 0) {
echo <<<DATA
<tr valign="top">
<td class="pformleft">
{$fm->LANG['FileUpload']}
</td>
<td class="pformright">
{$fm->LANG['FileUploadMax']}{$upload}
<br />
{$fm->LANG['UploadExts']} {$fm->exbb['file_type']}
<br />
<input type="hidden" name="MAX_FILE_SIZE" value="{$upload}">
<input class="input" type="file" size="30" name="FILE_UPLOAD">
</td>
</tr>\n
DATA;
}
И под ними вставьте строки:
CODE:if(!$fm->user['id'] && $fm->exbb['txtcode'] === TRUE) {
include('modules/txtcode/rnd.php');
echo <<<DATA
<tr>
<td class="pformleft" valign="top"><b>{$fm->LANG['TxtCode']}</b><br />{$fm->LANG['TxtCodeDesc']}</td>
<td class="pformright" valign="top">
<script language=JavaScript><!--
$k1='{$itm}';
document.write($k1);
//--></script>
<noscript><b>*{$fm->LANG['TxtCodeNoJS']}*</b></noscript><br /><br />
<input name='txtuid' type='text' size='{$n}' maxlength='{$n}' /><br />
</td>
</tr>
DATA;
}
Откройте файл post_form.tpl, найдите строки:
CODE:if ($upload !== 0) {
$post_form .= <<<DATA
<tr valign="top">
<td class="pformleft">
{$fm->LANG['FileUpload']}
</td>
<td class="pformright">
{$fm->LANG['FileUploadMax']}{$upload}
<br />
{$fm->LANG['UploadExts']} {$fm->exbb['file_type']}
<br />
<input type="hidden" name="MAX_FILE_SIZE" value="{$upload}">
<input class="input" type="file" size="30" name="FILE_UPLOAD">
</td>
</tr>
DATA;
}
И под ними вставьте строки:
CODE:if(!$fm->user['id'] && $fm->exbb['txtcode'] === TRUE) {
include('modules/txtcode/rnd.php');
$post_form .= <<<DATA
<tr>
<td class="pformleft" valign="top"><b>{$fm->LANG['TxtCode']}</b><br />{$fm->LANG['TxtCodeDesc']}</td>
<td class="pformright" valign="top">
<script language=JavaScript><!--
$k1='{$itm}';
document.write($k1);
//--></script>
<noscript><b>*{$fm->LANG['TxtCodeNoJS']}*</b></noscript><br /><br />
<input name='txtuid' type='text' size='{$n}' maxlength='{$n}' /><br />
</td>
</tr>
DATA;
}
-------------------
Теперь откройте файл language/russian/lang_front_forums.php, найдите строку:
CODE:$this->LANG['MoveInExistsOk'] = 'Выбранные сообщения успешно выделены в тему "%s"!';
И под ней вставьте строки:
CODE:/* TxtCode */
$this->LANG['TxtCode'] = 'Защитный код';
$this->LANG['TxtCodeDesc'] = 'Введите цифры.<br /><a href="register.php" target="_blank">Зарегистрируйтесь</a>, чтобы избавиться от необходимости ввода защитного кода.';
$this->LANG['TxtCodeNoJS'] = 'Необходима поддержка JavaScript!';
$this->LANG['TxtCodeErr'] = 'Введён пустой или неверный защитный код!';
-----
Откройте файл data/boardinfo.php, и перед строкой:
добавьте строку:
CODE:$this->exbb['txtcode'] = TRUE;
Откройте файл setvariables.php, найдите строки:
CODE:$sponsor_yes = ($fm->exbb['sponsor']) ? 'checked="checked"' : '';
$sponsor_no = (!$fm->exbb['sponsor']) ? 'checked="checked"' : '';
И под ними разместите строки:
CODE:$txtcode_yes = ($fm->exbb['txtcode']) ? 'checked="checked"' : '';
$txtcode_no = (!$fm->exbb['txtcode']) ? 'checked="checked"' : '';
Откройте файл admin/board_module.tpl, найдите строки:
CODE:<tr class="gen">
<td class="row1">{$fm->LANG['SponsorMod']}<br /><span class="gensmall">{$fm->LANG['SponsorModDesc']}</span></td>
<td class="row2"><input type="radio" name="new_exbb[b][sponsor]" value="yes" {$sponsor_yes} /> {$fm->LANG['Yes']} <input type="radio" name="new_exbb[b][sponsor]" value="no" {$sponsor_no} /> {$fm->LANG['No']}</td>
<td class="row2">{$fm->LANG['EditModul']}</td>
</tr>
И под ними разместите строки:
CODE:<tr class="gen">
<td class="row1">{$fm->LANG['TxtCode']}<br /><span class="gensmall">{$fm->LANG['TxtCodeDesc']}</span></td>
<td class="row2"><input type="radio" name="new_exbb[b][txtcode]" value="yes" {$txtcode_yes} /> {$fm->LANG['Yes']} <input type="radio" name="new_exbb[b][txtcode]" value="no" {$txtcode_no} /> {$fm->LANG['No']}</td>
<td class="row2">{$fm->LANG['EditModul']}</td>
</tr>
Далее откройте файл language/russian/lang_admin_setvariables.php, найдите строку:
И над ней добавьте строки:
CODE:$this->LANG['TxtCode'] = 'Защитный код (текстовый)';
$this->LANG['TxtCodeDesc'] = 'При включении опции гостям необходимо вводить цифровой защитный код при создании тем или написании сообщений. Необходима поддержка JavaScript!';
(Отредактировано автором: 27 февраля 2010 — 10:00) |
|
|
altjo |
Отправлено: 27 февраля 2010 — 10:08
|
ExBB Skins Creator
Покинул форум
Сообщений всего: 277
Дата рег-ции: Февр. 2009
Репутация: 86
|
Для тех, кто устанавливал оригинальный мод "Антиспам для гостей при создании тем и сообщений" (с графическим защитным кодом)
т.к. отключить этот мод возможно только выключив защиту от регистрации ботов (чего делать не желательно), то можно вынести управление этим модом в "Админцентр"
Спойлер (Отобразить)Откройте файл data/boardinfo.php, и перед строкой:
добавьте строку:
CODE:$this->exbb['captchacode'] = TRUE;
Откройте файл setvariables.php, найдите строки:
CODE:$sponsor_yes = ($fm->exbb['sponsor']) ? 'checked="checked"' : '';
$sponsor_no = (!$fm->exbb['sponsor']) ? 'checked="checked"' : '';
И под ними разместите строки:
CODE:$captchacode_yes = ($fm->exbb['captchacode']) ? 'checked="checked"' : '';
$captchacode_no = (!$fm->exbb['captchacode']) ? 'checked="checked"' : '';
Откройте файл admin/board_module.tpl, найдите строки:
CODE:<tr class="gen">
<td class="row1">{$fm->LANG['SponsorMod']}<br /><span class="gensmall">{$fm->LANG['SponsorModDesc']}</span></td>
<td class="row2"><input type="radio" name="new_exbb[b][sponsor]" value="yes" {$sponsor_yes} /> {$fm->LANG['Yes']} <input type="radio" name="new_exbb[b][sponsor]" value="no" {$sponsor_no} /> {$fm->LANG['No']}</td>
<td class="row2">{$fm->LANG['EditModul']}</td>
</tr>
И под ними разместите строки:
CODE:<tr class="gen">
<td class="row1">{$fm->LANG['CaptchaCode']}<br /><span class="gensmall">{$fm->LANG['CaptchaCodeDesc']}</span></td>
<td class="row2"><input type="radio" name="new_exbb[b][captchacode]" value="yes" {$captchacode_yes} /> {$fm->LANG['Yes']} <input type="radio" name="new_exbb[b][captchacode]" value="no" {$captchacode_no} /> {$fm->LANG['No']}</td>
<td class="row2">{$fm->LANG['EditModul']}</td>
</tr>
Далее откройте файл language/russian/lang_admin_setvariables.php, найдите строку:
И над ней добавьте строки:
CODE:$this->LANG['CaptchaCode'] = 'Защитный код (графический)';
$this->LANG['CaptchaCodeDesc'] = 'При включении опции гостям необходимо вводить защитный код с картинки (каптчи) при создании тем или написании сообщений.';
- Откройте файлы post_addnew.tpl, post_reply.tpl и post_form.tpl
найдите в каждом
CODE:if ($fm->exbb['anti_bot'] && !$fm->user['id'])
и замените на
CODE:if ($fm->exbb['anti_bot'] && !$fm->user['id'] && $fm->exbb['captchacode'] === TRUE)
- откройте post.php
найдите
CODE:if ($fm->exbb['anti_bot'] && !$fm->user['id'] && (!isset($_SESSION['captcha']) || $fm->_String('captcha') !== $_SESSION['captcha']))
и замените на
CODE:if ($fm->exbb['anti_bot'] && $fm->exbb['captchacode'] === TRUE && !$fm->user['id'] && (!isset($_SESSION['captcha']) || $fm->_String('captcha') !== $_SESSION['captcha']))
-----
В результате если установить оба эти варианта мода (текстовый и графический), то получим такое :'-)
Собственно можно оставить любой один вариант или отключить/включить всё %) |
|
|
|