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

+48
3.75K
Наверное многим как и мне надоели одноликие пользователи которым лень после регистрации закачать аватар.
Тогда то я и захотел, сделать загрузку аватара при регистрации, в блогах уже была такая реализация, но она была платная, а покупать мне не хотелось😊в один прекрасный момент я наконец то понял как это сделать, но тогда встала другая проблема, а что делать если пользователь не выбрал аватар, надо либо делать выбор аватара обязательным либо сделать возможность установки случайного аватара, вот как раз таки как сделать второе я и расскажу:
1. Скачиваем архив rand_ava.zip, без страха распаковываем в корень сайта, в архиве 100 мужских и 100 женских аватаров и больше ничего;
2. В файле ВАШ_ШАБЛОН/components/com_registration.tpl вставьте в любое удобное для вас место ставите это:
  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>
Многие из вас скажут, а для чего здесь выбор пола, потерпите скоро все поймете :);
Там же это:
  1. <form id="regform" name="regform" method="post" action="/registration">
меняем на это:
  1. <form id="regform" name="regform" method="post" action="/registration" enctype="multipart/form-data">
3. В файле components/registration/frontend.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. }
и после нее вставляем это:
  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 находим это:
  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. }
и меняем на это:
  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 находим это:
  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 то это:
  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реквизиты на стене.
0
vitalson9 vitalson9 13 лет назад #
всё сделал как тут описано при попытке авторизации на новом нике выдало белую страницу и назад не востонавлевается всё что прописал удалил но картина таже самая белая страница вот посмотрите ссылка
0
DS Soft DS Soft 13 лет назад #
Я зашел регистрироваться, на странице регистрации нету пункта загрузки аватора значит вы все таки не все по инструкции сделали. Но я все же зарегистрировался, но потом не могу зайти, а потом Ваш сайт вообще перестал грузиться, вы проводите технические работы или что?
0
vitalson9 vitalson9 13 лет назад #
всё это началось когда я установил ваш хак на сайт и когда вы регистрировались я его уже снёс и теперь зайти на сайт могу только с мазилы а опера выдаёт пустую страницу не знаю может опера глючит но всеровно ставлю плюс
0
DS Soft DS Soft 13 лет назад #
Вот мой файл frontend.php можете им заменить свой и попробовать еще раз
0
vitalson9 vitalson9 13 лет назад #
не спасибо у меня он переписан
0
DS Soft DS Soft 13 лет назад #
С Opera 11 ваш сайт не грузиться, с Мозилы и Хром грузиться, но я так и не увидел в пункте регистрация загрузить аватар.
0
vitalson9 vitalson9 13 лет назад #
сейчас с оперой разберусь и попробую поставить снова позже отпишусь
0
DS Soft DS Soft 13 лет назад #
в архиве с аватарами название папки w замените на f, или заново скачайте архив я его перезалил, может из за этого глюк был.
0
Ilekor Ilekor 13 лет назад #
Проблема скорее всего в последнем коде. Быстрым глазом мне кажется что то с елсом что то не то.
0
DS Soft DS Soft 13 лет назад #
Но у меня же с этим кодом все работает, сейчас еще раз перепроверю всели скопировал и отпишусь.
0
Ilekor Ilekor 13 лет назад #
Также все делал по вашей инструкции, руки прямые, та же ситуация, регистрация нормально идет, потом нажимаешь авторизоваться и белая страница, сейчас нет времени скрипт глянуть, если не сделаете, я посмотрю завтра что не так.
0
nikitka nikitka 13 лет назад #
Вдумайтесь в первый абзац этого блога и все станет ясно без разных непоняток "Наверное многим как и мне надоели одноликие пользователи которым лень после регистрации закачать аватар."
0
nikitka nikitka 13 лет назад #
DagStudent это все конечно круто!Но дело в том чио загрузка аватара не является обязательной!По этому ленивый пользователь может с легкостью зарегиться опять же без аватара))))сделайте это поле обязательным!А так все равно ++++++
0
Ilekor Ilekor 13 лет назад #
Ну дык вы прочтите пост, что если пользователь не выбрал аватар тогда берется автоматически с сервера из указанной папки случайный аватар. Для меня это верное решение.
-1
nikitka nikitka 13 лет назад #
Вот как я обошел регистрацию без загрузки аватара!http://даг05.рф/users/qweqweqwe Сделайте пожалуйста это поле ОБЯЗАТЕЛЬНЫМ!
0
Ilekor Ilekor 13 лет назад #
Находим

Код 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);
		}
	}
}
Кажется так.
0
DS Soft DS Soft 13 лет назад #
Если сделать так то пользователь зарегистрируется, а потом выдаст ошибку. надо в пункте 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/>';
}
0
DS Soft DS Soft 13 лет назад #
И еще тогда в пункте 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);
	}
и архив качать и распаковывать не надо
0
DS Soft DS Soft 13 лет назад #
Вот из за того что вы не выбрали аватар вам система поставила этот:
-1
Алексей Т Алексей Т 13 лет назад #
Ошибка: Не указан Город!
Вы не указали свой Пол!
0
Vovan Vovan 13 лет назад #
А с какой периодичностью повторяются одни и те же аватары
0
DS Soft DS Soft 13 лет назад #
ну смотря сколько аватаров накидаете в папки m и f которые в архиве
0
russianru russianru 13 лет назад #
кокойто недогон!!! я вставел свою фотку и всеровно вылиз аватар левый с галилей можской и во вторы у меня уже стоит какой пол выбрать как с этим быть?
0
Ingvarruss Ingvarruss 13 лет назад #
Сделал все по инструкции, но постоянно вылазит сообщение что не выбран пол, зарегистрироваться не получается.
0
Ingvarruss Ingvarruss 13 лет назад #
Исправил
0
DS Soft DS Soft 13 лет назад #
Блин забыл про 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">
Пост Обновил!
0
russianru russianru 13 лет назад #
там две токих строки какую из них менять первую или вторую?
0
DS Soft DS Soft 13 лет назад #
Второй
0
Ilekor Ilekor 13 лет назад #
Вобщем брал ваш файлы и методом сравнения переносил код, и вуаля, регистрация заработала, и авторизация проходит, вот только аватар не выбрался автоматически.
0
Ilekor Ilekor 13 лет назад #
и не загружается, метод регистрации используется через активацию по майлу.
0
Ilekor Ilekor 13 лет назад #
без включенной активации по мылу работает.
+1
DS Soft DS Soft 13 лет назад #
чтобы работало с включенной активации по мылу, то в пункте 5 надо вставку делать после этого:
Код PHP:
if ($is_locked){
  sendActivationNotice($send_pass, $new_user_id);
  $inPage->includeTemplateFile('special/regactivate.php');
0
vitalson9 vitalson9 13 лет назад #
всё супер 1.8 полёт нормальный спасибо автору
0
imprint imprint 13 лет назад #
все сделал при регистрации все нормально только аватар загрузился nopic
0
DS Soft DS Soft 13 лет назад #
Не знаю не знаю, несколько раз перепроверял и с нуля ставил должен работать, если можешь скинь свой fronted.php посмотрю
0
Александр Александр 13 лет назад #
ладно поставим посмотрим на свой страх и риск))) а так идея отличная спасибо за ваш труд)))) давно хотел , чтоб сразу зашел и была аватарка!
0
Анатолий Анатолий 12 лет назад #
Поставил на 1.9 полёт нормальный! Спасибо автору
-1
GarikKR GarikKR 12 лет назад #
Ребят после регистрации белый экран,подскажите что поправить?все сделал по инструкции,уже незнаю что править
0
oll oll 12 лет назад #
Вот не помню , или поставить или убрать одну закрывающую скобку }
php редактором посмотри после if .
0
Rossoman Rossoman 12 лет назад #
А у меня на 1.9 просто не загружается аватар. Фотка выбирается, при нажатии на кнопку регистрация у пользователя остается заглушка
-1
GarikKR GarikKR 12 лет назад #
Вроде зделал ,при регистрации без аваторки на ура,сейчас попробую загрузить аватор при регистрации
-1
GarikKR GarikKR 12 лет назад #
Все работает на Ура!В купе с выбором города,аватарка загружается с компа,без аватарки ставится с сайта.В опере полет нормальный!

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

Спасибо!
0
DS Soft DS Soft 12 лет назад #
В 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  .= 'Ошибка не выбран аватар';
}
0
Tagil-Rulit Tagil-Rulit 12 лет назад #
Автору спасибо. Сайт автора работает, однако архив не скачивается...
0
DS Soft DS Soft 12 лет назад #
Проверил архив на месте и скачивается, попробуйте скачать по этой ссылке с зеркала http://da05.ru/rand_ava.zip а то то до сих пор браузеры плохо обрабатывают кирилические домены.
0
RudFox RudFox 12 лет назад #
1.8 все отлично
Dag Student, а как вы город в форму регистрации вывели?
0
RudFox RudFox 12 лет назад #
т.е. я видел ваше красивое решение, но мне такое не надо. Я хочу вывести стандартное заполнение города, т.е. человек сам вписывает название своего города.

видел подобное здесь: http://instantcms.ru/forum/thread1114.html но это походу для старых версий, не работает
0
DS Soft DS Soft 12 лет назад #
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 делаем как написано и все будет ок.
0
DS Soft DS Soft 12 лет назад #
погорячился чуток вместо 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>
0
RudFox RudFox 12 лет назад #
так всё ок, но после регистрации в профиле не отображается выбранный пол человека
0
DS Soft DS Soft 12 лет назад #
Это:
Код 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);
}
0
RudFox RudFox 12 лет назад #
спасибо
0
vpugachev vpugachev 12 лет назад #
Спасибо очень нужное решение. Есть несколько вопросов:
1) Как сделать, что бы при неверном заполнении какого-либо поля и последующим сообщением об этом на вновь открывшейся странице регистрации данные о выбранном поле сохранялись.
2) Можно ли выполнить какой то sql-запрос, что бы у уже зарегистрированных пользователей на сайте в случайном порядке изменились аватары на загруженные в какую-либо папку на сервере?
0
VopisUVD VopisUVD 12 лет назад #
Мну тоже это интересует... у меня хоть и не много пользователе... но всеже?
вопрос к админам подобное решение достойно войти в релиз?
0
Алексей Гаврилов Алексей Гаврилов 12 лет назад #
На 1.9 катит?
0
vpugachev vpugachev 12 лет назад #
Анатолий:
Поставил на 1.9 полёт нормальный! Спасибо автору

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

Еще от автора

DS Twitter Sender
Компонент DS Twitter Sender для Instant CMS 1.10.3.
Виджет Табло для яндекс браузера
Модуль «Виджет Табло для яндекс браузера» создан для простой генерации манифеста для виджета Табло в Яндекс браузере.
DS Music v1.0.3 FREE
DS Music v1.0.3 FREE (бывшая Instant Music v1.0) для InstantCMS v1.10.3
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.