Загрузка Аватара при Регистрации (Случайный Аватар) ХАК (Бесплатно)

2816
Наверное многим как и мне надоели одноликие пользователи которым лень после регистрации закачать аватар.
Тогда то я и захотел, сделать загрузку аватара при регистрации, в блогах уже была такая реализация, но она была платная, а покупать мне не хотелось smile в один прекрасный момент я наконец то понял как это сделать, но тогда встала другая проблема, а что делать если пользователь не выбрал аватар, надо либо делать выбор аватара обязательным либо сделать возможность установки случайного аватара, вот как раз таки как сделать второе я и расскажу:
1. Скачиваем архив rand_ava.zip, без страха распаковываем в корень сайта, в архиве 100 мужских и 100 женских аватаров и больше ничего;
2. В файле ВАШ_ШАБЛОН/components/com_registration.tpl вставьте в любое удобное для вас место ставите это:
Код HTML:
  1. <tr>
  2. <td valign="top" class="">
  3. <div><strong>Аватар:</strong></div>
  4. <div><small>Если вы не загрузите Аватар, вам будет установлен случайный Аватар</small></div>
  5. </td>
  6. <td>
  7. <input name="picture" type="file" id="picture" size="30" />
  8. </td>
  9. </tr>
  10. <tr>
  11. <td valign="top" class=""><strong>Пол:</strong></td>
  12. <td valign="top">
  13. <select name="gender" id="gender" style="width:190px">
  14. <option value="">Выберите Пол</option>
  15. <option value="m">Мужской</option>
  16. <option value="f">Женский</option>
  17. </select>
  18. <span class="regstar">*</span>
  19. </td>
  20. </tr>
Многие из вас скажут, а для чего здесь выбор пола, потерпите скоро все поймете :);
Там же это:
Код PHP:
  1. <form id="regform" name="regform" method="post" action="/registration">
меняем на это:
Код PHP:
  1. <form id="regform" name="regform" method="post" action="/registration" enctype="multipart/form-data">
3. В файле components/registration/frontend.php находим строчку:
Код PHP:
  1. // Если есть опция показывать icq при регистрации, то проверяем
  2. if ($cfg['ask_icq']){
  3. $icq = $inCore->request('icq', 'str', '');
  4. $icq = preg_replace('/([^0-9])/i', '', $icq);
  5. } else {
  6. $icq = '';
  7. }
и после нее вставляем это:
Код PHP:
  1. // Проверяем Пол
  2. $gender = $inCore->request('gender', 'str');
  3. if(!$gender) {
  4. $msg .= 'Вы не указали свой <b>Пол</b>!';
  5. }
  6. $uploaddir = PATH.'/images/users/avatars/';
  7. $realfile = $_FILES['picture']['name'];
  8. $path_parts = pathinfo($realfile);
  9. $ext = strtolower($path_parts['extension']);
  10. $inCore->includeGraphics();
  11. //Проверяем аватар
  12. if ($realfile) {
  13. if ($ext != 'jpg' and $ext != 'jpeg' and $ext != 'gif' and $ext != 'bmp' and $ext != 'png'){
  14. $msg .= 'Ошибка! Разрещенные расширения для Аватара: <b>.jpg</b> <b>.jpeg</b> <b>.gif</b> <b>.bmp</b> <b>.png</b>
  15. ';
  16. }
  17. }
;
4. В том же файле components/registration/frontend.php находим это:
Код PHP:
  1. //create advanced user profile
  2. if ($new_user_id){
  3. $usr = $inDB->fetch_assoc($result);
  4. $sql = "INSERT INTO cms_user_profiles (user_id, city, description, showmail, showbirth, showicq, karma, imageurl, allow_who)
  5. VALUES (".$new_user_id.", '', '', '0', '0', '1', '0', '', 'all')";
  6. $inDB->query($sql) ;
  7.  
  8. $user_array['id'] = $new_user_id;
  9. cmsCore::callEvent('USER_REGISTER', $user_array);
  10. }
и меняем на это:
Код PHP:
  1. //create advanced user profile
  2. if ($new_user_id){
  3. $usr = $inDB->fetch_assoc($result);
  4. $sql = "INSERT INTO cms_user_profiles (user_id, city, description, showmail, showbirth, showicq, karma, imageurl, allow_who, gender)
  5. VALUES (".$new_user_id.", '', '', '0', '0', '1', '0', '', 'all', '$gender')";
  6. $inDB->query($sql) ;
  7.  
  8. $user_array['id'] = $new_user_id;
  9. cmsCore::callEvent('USER_REGISTER', $user_array);
  10. }
Кто ставил выбор города при регистрации не забываем вставить ".$new_user_id.", '$city', вместо "$new_user_id.", '';
5. В том же файле если не включена активация по email находим это:
Код PHP:
  1. // Регистрируем событие
  2. cmsActions::log('add_user', array(
  3. 'object' => '',
  4. 'user_id' => $new_user_id,
  5. 'object_url' => '',
  6. 'object_id' => $new_user_id,
  7. 'target' => '',
  8. 'target_url' => '',
  9. 'target_id' => 0,
  10. 'description' => ''
  11. ));
  12. $inPage->includeTemplateFile('special/regcomplete.php');
  13.  
  14. if ($cfg['send_greetmsg']){ $model->sendGreetsMessage($new_user_id, $cfg['greetmsg']); }
а если включена активация по email то это:
Код PHP:
  1. if ($is_locked){
  2. sendActivationNotice($send_pass, $new_user_id);
  3. $inPage->includeTemplateFile('special/regactivate.php');
и сразу после него вставляем это:

Теперь вы поняли зачем нужен выбор пола??? Чтобы для Мужчин и Женщин выбирать из разных наборов аватаров.
После распаковки архива у вас в папке /images/users/avatars/ появиться папка rand_ava а в ней папка для Мужчин m для Женщин f, вот в эти папки и можете лить свои наборы аватаров, названия аватаров может быть любым количество тоже любое, на ваше желание и вкус.
И так вроде все, ах да вот ДЕМО регистрируемся не загружая аватар и смотрим каким вас аватаром адарил сайт, кстати не забываем выбирать пол.
Точно работает на Instant 1.8, на других не проверял.
PS. С удовольствием приму благодарности zst реквизиты на стене.
Кнопки Добавить в друзья и Отправить сообщение в Списке Пользователей - Хак | Хак - Флеш эффекты на аватарке
Комментарии (59)
vitalson9 24 сентября 2011 в 17:58 0
всё сделал как тут описано при попытке авторизации на новом нике выдало белую страницу и назад не востонавлевается всё что прописал удалил но картина таже самая белая страница вот посмотрите ссылка
DS Soft 24 сентября 2011 в 18:10 0
Я зашел регистрироваться, на странице регистрации нету пункта загрузки аватора значит вы все таки не все по инструкции сделали. Но я все же зарегистрировался, но потом не могу зайти, а потом Ваш сайт вообще перестал грузиться, вы проводите технические работы или что?
vitalson9 24 сентября 2011 в 18:18 0
всё это началось когда я установил ваш хак на сайт и когда вы регистрировались я его уже снёс и теперь зайти на сайт могу только с мазилы а опера выдаёт пустую страницу не знаю может опера глючит но всеровно ставлю плюс
DS Soft 24 сентября 2011 в 18:25 0
Вот мой файл frontend.php можете им заменить свой и попробовать еще раз
vitalson9 24 сентября 2011 в 22:41 0
не спасибо у меня он переписан
DS Soft 24 сентября 2011 в 18:19 0
С Opera 11 ваш сайт не грузиться, с Мозилы и Хром грузиться, но я так и не увидел в пункте регистрация загрузить аватар.
vitalson9 24 сентября 2011 в 18:25 0
сейчас с оперой разберусь и попробую поставить снова позже отпишусь
DS Soft 24 сентября 2011 в 18:27 0
в архиве с аватарами название папки w замените на f, или заново скачайте архив я его перезалил, может из за этого глюк был.
Ilekor 25 сентября 2011 в 00:29 0
Проблема скорее всего в последнем коде. Быстрым глазом мне кажется что то с елсом что то не то.
DS Soft 25 сентября 2011 в 09:05 0
Но у меня же с этим кодом все работает, сейчас еще раз перепроверю всели скопировал и отпишусь.
Ilekor 24 сентября 2011 в 23:50 0
Также все делал по вашей инструкции, руки прямые, та же ситуация, регистрация нормально идет, потом нажимаешь авторизоваться и белая страница, сейчас нет времени скрипт глянуть, если не сделаете, я посмотрю завтра что не так.
͡﴾͡๏̯͡๏﴿ 25 сентября 2011 в 00:30 0
Вдумайтесь в первый абзац этого блога и все станет ясно без разных непоняток "Наверное многим как и мне надоели одноликие пользователи которым лень после регистрации закачать аватар."
͡﴾͡๏̯͡๏﴿ 25 сентября 2011 в 00:21 0
DagStudent это все конечно круто!Но дело в том чио загрузка аватара не является обязательной!По этому ленивый пользователь может с легкостью зарегиться опять же без аватара))))сделайте это поле обязательным!А так все равно ++++++
Ilekor 25 сентября 2011 в 00:25 0
Ну дык вы прочтите пост, что если пользователь не выбрал аватар тогда берется автоматически с сервера из указанной папки случайный аватар. Для меня это верное решение.
͡﴾͡๏̯͡๏﴿ 25 сентября 2011 в 00:28 -1
Вот как я обошел регистрацию без загрузки аватара!http://даг05.рф/users/qweqweqwe Сделайте пожалуйста это поле ОБЯЗАТЕЛЬНЫМ!
Ilekor 25 сентября 2011 в 00:37 0
Находим  

Код PHP:
// Регистрируем событие
cmsActions::log('add_user', array(
	'object' => '',
	'user_id' => $new_user_id,
	'object_url' => '',
	'object_id' => $new_user_id,
	'target' => '',
	'target_url' => '',
	'target_id' => 0,
	'description' => ''
	));                  
$inPage->includeTemplateFile('special/regcomplete.php');

if ($cfg['send_greetmsg']){ $model->sendGreetsMessage($new_user_id, $cfg['greetmsg']); }
После ставим

Код PHP:
if(!$realfile) {
  $msg  .= 'Вы не выбрали аватар для загрузки!
';
}

if ($realfile) {
	if ($ext == 'jpg' or $ext == 'jpeg' or $ext == 'gif' or $ext == 'bmp' or $ext == 'png')
	{
		$filename 		= md5($realfile . '-' . $new_user_id . '-' . time()).'.jpg';
		$uploadfile		= $uploaddir . $realfile;
		$uploadavatar 	= $uploaddir . $filename;
		$uploadthumb 	= $uploaddir . 'small/' . $filename;
		$source			= $_FILES['picture']['tmp_name'];
		$errorCode 		= $_FILES['picture']['error'];
						
		if ($inCore->moveUploadedFile($source, $uploadfile, $errorCode)) {
			$cfg = $inCore->loadComponentConfig('users');
			//CREATE THUMBNAIL
			if (isset($cfg['smallw'])) { $smallw = $cfg['smallw']; } else { $smallw = 64; }
			if (isset($cfg['medw'])) { 	 $medw = $cfg['medw']; } else { $medw = 200; }
			if (isset($cfg['medh'])) { 	 $medh = $cfg['medh']; } else { $medh = 200; }
			@img_resize($uploadfile, $uploadavatar, $medw, $medh);
			@img_resize($uploadfile, $uploadthumb, $smallw, $smallw);
			//DELETE ORIGINAL							
			@unlink($uploadfile);
			//MODIFY PROFILE
			$sql = "UPDATE cms_user_profiles 
				SET imageurl = '$filename'
				WHERE user_id = '$new_user_id'
				LIMIT 1";	
			$inDB->query($sql);
		}
	}
}
Кажется так.
DS Soft 25 сентября 2011 в 09:10 0
Если сделать так то пользователь зарегистрируется, а потом выдаст ошибку. надо в пункте 3 вместо строк:
Код PHP:
//Проверяем аватар
if ($realfile) {
	if ($ext != 'jpg' and $ext != 'jpeg' and $ext != 'gif' and $ext != 'bmp' and $ext != 'png'){
		$msg  .= 'Ошибка! Разрещенные расширения для Аватара: <b>.jpg</b>  <b>.jpeg</b>  <b>.gif</b>  <b>.bmp</b>  <b>.png</b><br/>';
	}
}
записать эти:
Код PHP:
//Проверяем аватар
if (!$realfile) {
	$msg  .= 'Ошибка! Вы не выбрали <b>Аватар</b><br/>';
}
if ($ext != 'jpg' and $ext != 'jpeg' and $ext != 'gif' and $ext != 'bmp' and $ext != 'png'){
	$msg  .= 'Ошибка! Разрещенные расширения для Аватара: <b>.jpg</b>  <b>.jpeg</b>  <b>.gif</b>  <b>.bmp</b>  <b>.png</b><br/>';
}
DS Soft 25 сентября 2011 в 09:14 0
И еще тогда в пункте 5, нужно после этого:
Код PHP:
// Регистрируем событие
cmsActions::log('add_user', array(
	'object' => '',
	'user_id' => $new_user_id,
	'object_url' => '',
	'object_id' => $new_user_id,
	'target' => '',
	'target_url' => '',
	'target_id' => 0,
	'description' => ''
	));                  
$inPage->includeTemplateFile('special/regcomplete.php');

if ($cfg['send_greetmsg']){ $model->sendGreetsMessage($new_user_id, $cfg['greetmsg']); }
надо ставить это:
Код PHP:
	$filename 		= md5($realfile . '-' . $new_user_id . '-' . time()).'.jpg';
	$uploadfile		= $uploaddir . $realfile;
	$uploadavatar 	= $uploaddir . $filename;
	$uploadthumb 	= $uploaddir . 'small/' . $filename;
	$source			= $_FILES['picture']['tmp_name'];
	$errorCode 		= $_FILES['picture']['error'];

	if ($inCore->moveUploadedFile($source, $uploadfile, $errorCode)) {
		$cfg = $inCore->loadComponentConfig('users');
		//CREATE THUMBNAIL
		if (isset($cfg['smallw'])) { $smallw = $cfg['smallw']; } else { $smallw = 64; }
		if (isset($cfg['medw'])) { 	 $medw = $cfg['medw']; } else { $medw = 200; }
		if (isset($cfg['medh'])) { 	 $medh = $cfg['medh']; } else { $medh = 200; }
		@img_resize($uploadfile, $uploadavatar, $medw, $medh);
		@img_resize($uploadfile, $uploadthumb, $smallw, $smallw);
		//DELETE ORIGINAL							
		@unlink($uploadfile);
		//MODIFY PROFILE
		$sql = "UPDATE cms_user_profiles 
			SET imageurl = '$filename'
			WHERE user_id = '$new_user_id'
			LIMIT 1";	
		$inDB->query($sql);
	}
и архив качать и распаковывать не надо
DS Soft 25 сентября 2011 в 09:03 0
Вот из за того что вы не выбрали аватар вам система поставила этот:
Алексей Тимофеев 25 сентября 2011 в 02:53 -1
Ошибка:  Не указан Город!
Вы не указали свой Пол!
Vovan 25 сентября 2011 в 03:21 0
А с какой периодичностью повторяются одни и те же аватары
DS Soft 25 сентября 2011 в 09:17 0
ну смотря сколько аватаров накидаете в папки m и f которые в архиве
russianru 25 сентября 2011 в 10:23 0
кокойто недогон!!! я вставел свою фотку и всеровно вылиз аватар левый с галилей можской и во вторы у меня уже стоит какой пол выбрать как с этим быть?
Ingvarruss 25 сентября 2011 в 11:14 0
Сделал все по инструкции, но постоянно вылазит сообщение что не выбран пол, зарегистрироваться не получается.
Ingvarruss 25 сентября 2011 в 11:23 0
Исправил
DS Soft 25 сентября 2011 в 11:35 0
Блин забыл про enctype
В файле ВАШ_ШАБЛОН/components/com_registration.tpl
Это:
Код PHP:
<form id="regform" name="regform" method="post" action="/registration">
меняем на это:
Код PHP:
<form id="regform" name="regform" method="post" action="/registration" enctype="multipart/form-data">
Пост Обновил!
russianru 25 сентября 2011 в 12:12 0
там две токих строки какую из них менять первую или вторую?
DS Soft 25 сентября 2011 в 12:21 0
Второй
Ilekor 25 сентября 2011 в 12:30 0
Вобщем брал ваш файлы и методом сравнения переносил код, и вуаля, регистрация заработала, и авторизация проходит, вот только аватар не выбрался автоматически.
Ilekor 25 сентября 2011 в 12:35 0
и не загружается, метод регистрации используется через активацию по майлу.
Ilekor 25 сентября 2011 в 12:38 0
без включенной активации по мылу работает.
DS Soft 25 сентября 2011 в 13:53 +1
чтобы работало с включенной активации по мылу, то в пункте 5 надо вставку делать после этого:
Код PHP:
if ($is_locked){
  sendActivationNotice($send_pass, $new_user_id);
  $inPage->includeTemplateFile('special/regactivate.php');
vitalson9 25 сентября 2011 в 13:02 0
всё супер 1.8 полёт нормальный спасибо автору
imprint 26 сентября 2011 в 13:38 0
все сделал при регистрации все нормально только аватар загрузился nopic
DS Soft 26 сентября 2011 в 16:12 0
Не знаю не знаю, несколько раз перепроверял и с нуля ставил должен работать, если можешь скинь свой fronted.php посмотрю
Александр 11 октября 2011 в 15:48 0
ладно поставим посмотрим на свой страх и риск))) а так идея отличная спасибо за ваш труд)))) давно хотел , чтоб сразу зашел и была аватарка!
Анатолий 7 декабря 2011 в 08:24 0
Поставил на 1.9 полёт нормальный! Спасибо автору
GarikKR 24 января 2012 в 23:57 -1
Ребят после регистрации белый экран,подскажите что поправить?все сделал по инструкции,уже незнаю что править
oll 25 января 2012 в 00:24 0
Вот не помню , или поставить или убрать одну закрывающую скобку }
php редактором посмотри после if .
Rossoman 25 января 2012 в 00:36 0
А у меня на 1.9 просто не загружается аватар. Фотка выбирается, при нажатии на кнопку регистрация у пользователя остается заглушка
GarikKR 25 января 2012 в 01:08 -1
Вроде зделал ,при регистрации без аваторки на ура,сейчас попробую загрузить аватор при регистрации
GarikKR 25 января 2012 в 01:17 -1
Все работает на Ура!В купе с выбором города,аватарка загружается с компа,без аватарки ставится с сайта.В опере полет нормальный!

<form id="regform" name="regform" method="post" action="/registration">
эту строку менять не первую!а вторую!
GarikKR 25 января 2012 в 01:18 -1
v.1.9
pasplus 2 февраля 2012 в 23:34 0
Спасибо DagStudent на 1.9 все работает на УРА, одозначно++++
Thanatognozija 4 февраля 2012 в 10:31 0
Здравствуйте, уважаемое сообщество!
Скорее всего мой вопрос не по теме, но здесь звучало мнение, что можно включить принудительную, то есть, обязательную загрузку, или включение аватара пользователем. Может быть кто-то знает как это сделать, а то я не нашел где это включить?

Спасибо!
DS Soft 5 февраля 2012 в 21:08 0
В 3м пункте вместо этого:
Код PHP:
//Проверяем аватар
if ($realfile) {
	if ($ext != 'jpg' and $ext != 'jpeg' and $ext != 'gif' and $ext != 'bmp' and $ext != 'png'){
		$msg  .= 'Ошибка! Разрещенные расширения для Аватара: <b>.jpg</b>  <b>.jpeg</b>  <b>.gif</b>  <b>.bmp</b>  <b>.png</b>
';
	}
}
ставим это:
//Проверяем аватар
Код PHP:
if ($realfile) {
	if ($ext != 'jpg' and $ext != 'jpeg' and $ext != 'gif' and $ext != 'bmp' and $ext != 'png'){
		$msg  .= 'Ошибка! Разрещенные расширения для Аватара: <b>.jpg</b>  <b>.jpeg</b>  <b>.gif</b>  <b>.bmp</b>  <b>.png</b>
';
	}
}else{
	$msg  .= 'Ошибка не выбран аватар';
}
Tagil-Rulit 18 февраля 2012 в 21:52 0
Автору спасибо. Сайт автора работает, однако архив не скачивается...
DS Soft 21 февраля 2012 в 18:07 0
Проверил архив на месте и скачивается, попробуйте скачать по этой ссылке с зеркала http://da05.ru/rand_ava.zip а то то до сих пор браузеры плохо обрабатывают кирилические домены.
RudFox 2 марта 2012 в 21:48 0
1.8 все отлично
Dag Student, а как вы город в форму регистрации вывели?
RudFox 3 марта 2012 в 09:44 0
т.е. я видел ваше красивое решение, но мне такое не надо. Я хочу вывести стандартное заполнение города, т.е. человек сам вписывает название своего города.

видел подобное здесь: http://instantcms.ru/forum/thread1114.html но это походу для старых версий, не работает
DS Soft 4 марта 2012 в 16:36 0
1,2й пункт отсюда http://instantcms.ru/blogs/blog-nachavshego-programirovat/krasivoe-reshenie-vybora-goroda-pri-registraci.html не делаем;
вместо 3го пишем это:
Код PHP:
<tr>
	<td valign="top" class="">
		<div><strong>Город</strong></div>
		<div><small>Выберите место своего рождения или пребывания</small></div>
	</td>
	<td valign="top" class="">
		<div class="city">
			<strong>Город:</strong>
			<select name="city" id="city">
				<option value="">Выберите город</option>
			</select>
		</div>
	</td>
</tr>
4 и 5 делаем как написано и все будет ок.
DS Soft 4 марта 2012 в 16:39 0
погорячился чуток вместо 3го это:
Код PHP:
<tr>
	<td valign="top" class="">
		<div><strong>Город</strong></div>
		<div><small>Выберите место своего рождения или пребывания</small></div>
	</td>
	<td valign="top" class="">
		<div class="city">
                   <input type="text" name="city" value="">
		</div>
	</td>
</tr>
RudFox 6 марта 2012 в 14:14 0
так всё ок, но после регистрации в профиле не отображается выбранный пол человека
DS Soft 7 марта 2012 в 15:53 0
Это:
Код PHP:
if ($new_user_id){
	$usr = $inDB->fetch_assoc($result);
	$sql = "INSERT INTO cms_user_profiles (user_id, city, description, showmail, showbirth, showicq, karma, imageurl, allow_who)
	VALUES (".$new_user_id.", '$city', '', '0', '0', '1', '0', '', 'all')";
	$inDB->query($sql) ;
	
	$user_array['id'] = $new_user_id;
	cmsCore::callEvent('USER_REGISTER', $user_array);
}
меняем на это
Код PHP:
if ($new_user_id){
	$usr = $inDB->fetch_assoc($result);
	$sql = "INSERT INTO cms_user_profiles (user_id, city, description, showmail, showbirth, showicq, karma, imageurl, allow_who, gender)
	VALUES (".$new_user_id.", '$city', '', '0', '0', '1', '0', '', 'all', '$gender')";
	$inDB->query($sql) ;
	
	$user_array['id'] = $new_user_id;
	cmsCore::callEvent('USER_REGISTER', $user_array);
}
RudFox 7 марта 2012 в 16:10 0
спасибо
vpugachev 24 марта 2012 в 10:21 0
Спасибо очень нужное решение. Есть несколько вопросов:
1) Как сделать, что бы при неверном заполнении какого-либо поля и последующим сообщением об этом на вновь открывшейся странице регистрации данные о выбранном поле сохранялись.
2) Можно ли выполнить какой то sql-запрос, что бы у уже зарегистрированных пользователей на сайте в случайном порядке изменились аватары на загруженные в какую-либо папку на сервере?
VopisUVD 22 апреля 2012 в 23:42 0
Мну тоже это интересует... у меня хоть и не много пользователе... но всеже?
вопрос к админам подобное решение достойно войти в релиз?
Алексей Гаврилов 26 мая 2012 в 00:43 0
На 1.9 катит?
vpugachev 26 мая 2012 в 06:57 0
Анатолий:
Поставил на 1.9 полёт нормальный! Спасибо автору

pasplus:
Спасибо DagStudent на 1.9 все работает на УРА, одозначно++++