Спасибо за работу FreeLancer. С его разрешения публикую решение проверки никнейма на уникальность, которое точно нужно в ряде проектов.
Изменению подверглись 2 файла:
1. Проверка при регистрации components/registration/frontend.php
После кода
добавляем
2. Проверка при изменении профиля components/users/frontend.php
В блоке EDIT PROFILE после кода
добавить
Вот и все.
Или можете скачать архив и заменить файлы.
Изменению подверглись 2 файла:
1. Проверка при регистрации components/registration/frontend.php
После кода
// Проверяем nickname или имя и фамилию if($cfg['name_mode']=='nickname'){ $nickname = $inCore->request('nickname', 'str', '');
// UNIQUE NICKNAME $nick_ok = 0; { $nick_ok = 1; } { $nick_ok = 1; } if(!$nick_ok) { $msg .= 'В нике нельзя использовать одновременно Русские и Латинские символы! '; } $is_nickname = $inDB->get_field('cms_users', "nickname = '$nickname'", 'nickname'); if($is_nickname) { $msg .= 'Выбранный никнейм занят '; } // /UNIQUE NICKNAME
В блоке EDIT PROFILE после кода
if ($opt == 'save'){ $errors = false; $nickname = $inCore->request('nickname', 'str');
// UNIQUE NICKNAME $nick_ok = 0; { $nick_ok = 1; } { $nick_ok = 1; } if(!$nick_ok) { cmsCore::addSessionMessage(" В нике нельзя использовать одновременно Русские и Латинские символы!", 'error'); $errors = true; } $is_nickname = $inDB->get_field('cms_users', "nickname = '$nickname'", 'id'); if($is_nickname && $id!=$is_nickname) { cmsCore::addSessionMessage(" Выбранный никнейм занят", 'error'); $errors = true; } // /UNIQUE NICKNAME
Или можете скачать архив и заменить файлы.



Но, спасибо автору за начало движения в нужную сторону.
Так что не критично.
1. com_registration.tpl в папке темы
код
<input name="nickname" id="nickinput" class="text-input" type="text" size="30" value="{$nickname|escape:'html'}"/> <span class="regstar">*</span><input name="nickname" id="nickinput" class="text-input" type="text" size="30" value="{$nickname|escape:'html'}" onchange="checkNickname()"/> <span class="regstar">*</span> <div id="nicknamecheck"></div>2. создаем /core/ajax/registrationnickname.php
содержимое:
<?php if($_SERVER['HTTP_X_REQUESTED_WITH'] != 'XMLHttpRequest') { die(); } define("VALID_CMS", 1); define('PATH', $_SERVER['DOCUMENT_ROOT']); include(PATH.'/core/cms.php'); $inCore = cmsCore::getInstance(); define('HOST', 'http://' . $inCore->getHost()); $inCore->loadClass('config'); //конфигурация $inCore->loadClass('db'); //база данных $opt = $inCore->request('opt', 'str', ''); $data = $inCore->request('data', 'str', ''); if (!$opt) { return; } $inDB = cmsDatabase::getInstance(); if ($opt=='checknickname'){ $sql = "SELECT id, login FROM cms_users WHERE (nickname LIKE '$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>'; } } return; ?>добавляем код:
function checkNickname(){ var nickname = $("#nickinput").attr('value'); var reg1= /^[a-zA-Z0-9\]\[\._ @-]+$/; var reg2= /^[а-яА-Я0-9\]\[\._ @-]+$/; if (nickname.length < 2){ $("#nicknamecheck").html('<span style="color:red">Минимальная длина = 2</span>'); } else if (nickname.length > 15){ $("#nicknamecheck").html('<span style="color:red">Максимальная длина = 15</span>'); } else if (reg1.test(nickname) || reg2.test(nickname)){ $("#nicknamecheck").load("/core/ajax/registrationnickname.php", {opt: "checknickname", data:nickname}); } else{ $("#nicknamecheck").html('<span style="color:red">В нике нельзя использовать одновременно Русские и Латинские символы!</span>'); } }1. Правки касаются момента регистрации, но не редактирования в профиле.
2. При использовании указанного мною кода правки, указанные Евгением в данном посте, теряют актуальность.
3. Написал код здесь, потому что на данную реализацию натолкнул сам пост Евгения.
Регулярка должна быть [а-яА-ЯЁё0-9\] а не [а-яА-Я0-9\]