Вернуться   SEO форум - оптимизация и продвижение сайтов > Web разработки > Разработка сайтов > InstantCMS

Важная информация
InstantCMS - Установка InstantCMS, шаблоны, модули, компоненты, плагины, видео инструкции и т.д.

Ответ
 
Опции темы Оценить тему Опции просмотра
Старый 15.03.2013, 19:59   #1
 
Аватар для СТЕПАН
 
Сообщений: 1,655
FR (активность): 113,743

Доп. информация
Стрелка Автор темы [Хак] Уникальность никнейма InstantCMS

Предистория
на сайте появилось два пользователя с абсолютно одинаковыми никнеймами. один из них стал оставлять комментарии, а второго засыпали вопросами по поводу этих комментариев. пошла путаница, пока не выяснилось, что это 2 разных пользователя с одинаковыми никнеймами на сайте. да и вообще не удобно, будет к примеру какое нибудь обсуждение, и мне скажут - "а вон обратись к васе, он шарит." а к какому именно васе ??? если их у меня будет 20 на сайте, поэтому поднял вопрос об уникальности никнейма на форуме, где меня тыкнули носов в тему для версии 1.5-1.6. принцип не изменился, но во первых там немного поменялись файлы, во вторых там есть некоторый недочёт, при котором я не могу сменить что либо в профиле если не поменяю хотяб один символ в своём никнейме и плюс если я админ - я не могу изменить профиль, не поменяв при этом никнейма пользователя.
и так приступаем
проверка происходит
* при регистрации
* при редактировании профиля
то есть если никнейм занят - выводится сообщение что он занят

первое - открываем /components/registration/js/check.js Вставляем в самом конце

// Проверка никнейма на корректность (русские и латинские буквы, длина) и уникальность.
function checkNickname() {

var nickname = $("#nickinput").attr('value');
var reg= /^[a-zA-Zа-яА-Я0-9_\-\.\"\ \@\*\si]{2,15}$/ ;
if (reg.test(nickname)) {
$("#nicknamecheck").load("/core/ajax/registration.php", {opt: "checknickname", data:nickname});
}
else {
if (nickname.length < 2){
$("#nicknamecheck").html('<span style="color:red">Минимальная длина = 2</span>');
} else {
if (userlogin.length > 15){
$("#nicknamecheck").html('<span style="color:red">Максимальная длина = 15</span>');
} else {
$("#nicknamecheck").html('<span style="color:red">Только латинские буквы и цифры</span>');
}
}
}

}


второе - в файле /templates/ваш_шаблон/components/com_registration.tpl

 <td valign="top" class="">
<input name="nickname" id="nickinput" class="text-input" type="text" size="30" value="{$nickname|escape:'html'}" />
<span class="regstar">*</span>
</td>


меняем на

<td valign="top" class="">
<input name="nickname" id="nickinput" class="text-input" type="text" size="30" value="{$nickname|escape:'html'}" onchange="checkNickname()" autocomplete="off" />
<span class="regstar">*</span>
<div id="nicknamecheck"></div>
</td>


третий шаг - в файле /core/ajax/registration.php перед

return;


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

// Проверка никнейма на уникальность (русский текст с кодировкой в БД 1251)
if ($opt=='checknickname') {

$sql = "SELECT id, nickname FROM cms_users WHERE (nickname LIKE '".iconv('UTF-8', 'Windows-1251', $data)."') AND (is_deleted = 0) LIMIT 1";
$result = $inDB->query($sql);

if($inDB->num_rows($result)==0){
echo '<span style="color:green">Вы можете использовать этот никнейм</span>';
} else {
echo '<span style="color:red">Выбранный никнейм занят!</span>';
}

}


с регистрацией разобрались
переходим к редактированию в профиле
в файле /components/users/frontend.php в разделе // EDIT PROFILE //
находим строку

$nickname = $inCore->request('nickname', 'str');
if (strlen($nickname)<2) { cmsCore::addSessionMessage($_LANG['SHORT_NICKNAME'], 'error'); $errors = true; }


и вставляем после неё

// Здесь вставим проверку на уникальность никнейма 
$sqlnik = "SELECT id, nickname FROM cms_users WHERE (nickname LIKE '$nickname') AND (is_deleted = 0) and (id != '$inUser->id') LIMIT 1";
$resultnik = $inDB->query($sqlnik);
if (!$inUser->is_admin) {if($inDB->num_rows($resultnik)!=0) { cmsCore::addSessionMessage($_LANG['ZANYAT_NICKNAME'], 'error'); $errors = true; } }
// Блок проверки уникальности никнейма закончен


затем в файле /languages/ru/components/users.php после

$_LANG['PROFILE_SAVED']             ='Профиль успешно сохранен.';


добавляем строку

$_LANG['ZANYAT_NICKNAME']             ='Введённый никнейм занят.';


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


  • Обзор SEO софт для Вебмастера! | Антикапча лучшая RU сегменте
  • ZennoPoster 5 + Бонус шаблоны | Купить Key Collector со скидкой за 1100р
СТЕПАН вне форума  
Ответить с цитированием Сказать Плохо за это бесполезное сообщение Быстрый ответ на это сообщение
Ответ

Метки
instantcms

Быстрый ответ
Ваше имя пользователя: Регистрация. Для входа нажмите здесь
Случайный вопрос

Сообщение:
Опции
Внимание!
Этой теме более 3349 дней. Вы можете оставить сообщение здесь. Но, обращаем внимание. Возможно, рациональней создать новую тему (найти свежее обсуждение)?


Опции темы
Опции просмотра Оценка этой теме
Оценка этой теме:

Ваши права в разделе
Вы не можете создавать новые темы
Вы можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[ Вопрос ] Как сделать ЧПУ для instantcms СТЕПАН InstantCMS 9 15.03.2013 18:10
О системе - InstantCMS СТЕПАН InstantCMS 0 15.03.2013 17:58
[ Бесплатно ] Карта Сайта xml v2.1 для InstantCMS 1.10 СТЕПАН InstantCMS 0 15.03.2013 17:55
Как установить счетчик ли.ру на instantcms? storm9 InstantCMS 1 15.03.2013 17:38
Установка кода на InstantCMS Alexandr S InstantCMS 4 29.07.2012 17:43

Текущее время: 09:07. Часовой пояс GMT +3.