X   Сообщение сайта
(Сообщение закроется через 2 секунды)

Здравствуйте, гость ( Вход | Регистрация )

2 страниц Открыть меню   1 2 >  
Ответить в данную темуНачать новую тему
> ХАК: добавление функции отображения аватара, Добавлена функция для более простого отображения аватары пользователя
egysya
сообщение 2009-09-05, 19:06
Сообщение #1
Любитель
Иконка группы

Группа: Eleanor user
Сообщений: 180
Регистрация: 2009-05-21
Из: Ростов-на-Дону

Репутация:   нет  
Всего: 11


Возникла необходимость отображать аватару пользователя в системе. Стандартная функция GetAvatar работает только если пользователь залогинен в системе, иначе - амба.

Для этого, по совету Александра, создал по типу стандартной функции GetAvatar свою - MyGetAvatar.
Итак, открываем файл: classes/login/class_account.php
Вставляем следующий код, ну допустим, после функции public function GetAvatar (в районе 277 строки):


// Моя функия аватары
	public function MyGetAvatar($user=false)
	{
		if ($user===false or $user==='0')
			return array('avatar'=>'','w'=>'','h'=>'','no'=>true);
			
		$this->Mainclass->Db->Query('SELECT `id`, `name`, `avatar_location`, `avatar_size`, `avatar_type` FROM `f_users` INNER JOIN `f_users_extra` USING(`id`) WHERE `id`='.$user.' LIMIT 1',__file__,__line__);
		while($arr=$this->Mainclass->Db->Fetch_assoc())
		{
		if(empty($arr['avatar_location']))
			return array('avatar'=>$this->Mainclass->Template->GetImage($this->Mainclass->vars['noavatar']),'w'=>'auto','h'=>'auto','no'=>false);
			
		if (strpos($arr['avatar_size'],'x')!==false)
		{
			$temp=explode('x',$arr['avatar_size'],2);
			$width=$temp[0];
			$height=$temp[1];
		}
		else
			$width=$height='auto';
		switch($arr['avatar_type'])
		{
			case 'local':
				$avatar='images/avatars/'.$arr['avatar_location'];
			break;
			case 'upload':
				$avatar=Mainclass::UPLOADS_DIR.'/uploaded_avatars/'.$arr['avatar_location'];
			break;
			case 'url':
				$avatar=$arr['avatar_location'];
				$temp=explode('x',$arr['avatar_size'],2);
			break;
			default:
				$avatar='';
			break;
		}
		}
		return array('avatar'=>$avatar,'w'=>$width,'h'=>$height,'no'=>false);
	}


И наслаждаемся новой функцией! )

Использование:

$av=$Mainclass->Account->MyGetAvatar($uid - это id пользователя);
 	$my_avatar=$av[&#39;no&#39;] ? &#39;Нет Аватара&#39; : &#39;<img align="middle" src="&#39;.$av[&#39;avatar&#39;].&#39;" width="&#39;.$av[&#39;w&#39;].&#39;" height="&#39;.$av[&#39;h&#39;].&#39;" border="0" alt="" >&#39;;



Пример использования в моем блоке комментариев: Прикрепленные файлы  avatara.png ( 18.26 килобайт ) Скачиваний: 169

Прикрепленные файлы
Прикрепленные файлы  avatara.png ( 18.26 килобайт ) Скачиваний: 169
 
Одобрили: myk0lka
Перейти в начало страницы
+Цитировать сообщение
Alexander
сообщение 2009-09-05, 19:22
Сообщение #2
Eleanor developer
Иконка группы

Группа: Администраторы
Сообщений: 5 260
Регистрация: 2008-11-11
Из: Николаев
Версия системы: RC5

Репутация:   нет  
Всего: 67


Я вот изменил свою функцию на:
public function GetAvatar($user=false)
	{
		if(!$user)
			$user=&$this->user;
		elseif(!is_array($user))
		{
			$this->Mainclass->Db->Query(&#39;SELECT `id`,`avatar_location`,`avatar_size`,`avatar_type` FROM `f_users_extra` WHERE `id`=&#39;.intval($user).&#39; LIMIT 1&#39;,__file__,__line__);
			$user=$this->Mainclass->Db->Fetch_assoc();
		}
		if(empty($user[&#39;avatar_location&#39;]))
			return array(&#39;avatar&#39;=>$this->Mainclass->Template->GetImage($this->Mainclass->vars[&#39;noavatar&#39;]),&#39;w&#39;=>&#39;auto&#39;,&#39;h&#39;=>&#39;auto&#39;,&#39;no&#39;=>true);
		if (strpos($user[&#39;avatar_size&#39;],&#39;x&#39;)!==false)
		{
			$temp=explode(&#39;x&#39;,$user[&#39;avatar_size&#39;],2);
			$width=$temp[0];
			$height=$temp[1];
		}
		else
			$width=$height=&#39;auto&#39;;
		switch($user[&#39;avatar_type&#39;])
		{
			case &#39;local&#39;:
				$avatar=&#39;images/avatars/&#39;.$user[&#39;avatar_location&#39;];
			break;
			case &#39;upload&#39;:
				$avatar=Mainclass::UPLOADS_DIR.&#39;/uploaded_avatars/&#39;.$user[&#39;avatar_location&#39;];
			break;
			case &#39;url&#39;:
				$avatar=$user[&#39;avatar_location&#39;];
				$temp=explode(&#39;x&#39;,$user[&#39;avatar_size&#39;],2);
			break;
			default:
				$avatar=&#39;&#39;;
			break;
		}
		return array(&#39;avatar&#39;=>$avatar,&#39;w&#39;=>$width,&#39;h&#39;=>$height,&#39;no&#39;=>false);
	}

Думаю, пользоваться можно :)
Перейти в начало страницы
+Цитировать сообщение
egysya
сообщение 2009-09-05, 19:37
Сообщение #3
Любитель
Иконка группы

Группа: Eleanor user
Сообщений: 180
Регистрация: 2009-05-21
Из: Ростов-на-Дону

Репутация:   нет  
Всего: 11


Цитата (Alexander @ 5.9.2009, 20:22)
Я вот изменил свою функцию на:
...Думаю, пользоваться можно :)


Саша, подправь пжл, когда пользователь залогинен, то аватаре Гостя присваивается аватара залогиненного юзверя. Когда никто не залогинен, то все ок.
Перейти в начало страницы
+Цитировать сообщение
Alexander
сообщение 2009-09-06, 12:56
Сообщение #4
Eleanor developer
Иконка группы

Группа: Администраторы
Сообщений: 5 260
Регистрация: 2008-11-11
Из: Николаев
Версия системы: RC5

Репутация:   нет  
Всего: 67


egysya, уточни, когда такое происходит и где..
Перейти в начало страницы
+Цитировать сообщение
egysya
сообщение 2009-09-06, 15:11
Сообщение #5
Любитель
Иконка группы

Группа: Eleanor user
Сообщений: 180
Регистрация: 2009-05-21
Из: Ростов-на-Дону

Репутация:   нет  
Всего: 11


Цитата (Alexander @ 6.9.2009, 13:56)
egysya, уточни, когда такое происходит и где..


Ну смотри. Я использую эту функцию в блоке отображения последних коментов. При использовании твоего врианта получается такое: Аватары пользователей, при присвоении функции $av=$Mainclass->Account->GetAvatar($uid); id пользователя, отображаются верно. Но к пользователю гость, аватара отображается не та, которая должна при условии $av['no']=true, т.е.  к $my_avatar=$av['no'] ? 'аватара гостя' : 'аватара пользователя'; - не наступает условие для вывода 'аватара гостя'. Ему присваивается аватара залогиненного в данный момент времени пользователя. Если юзер не залогинен, то у меня в блоке комментариев аватара гостя отображается верно - 'аватара гостя'
Перейти в начало страницы
+Цитировать сообщение
Alexander
сообщение 2009-09-06, 16:25
Сообщение #6
Eleanor developer
Иконка группы

Группа: Администраторы
Сообщений: 5 260
Регистрация: 2008-11-11
Из: Николаев
Версия системы: RC5

Репутация:   нет  
Всего: 67


egysya, так не передавайте той функции $uid равный нулю. Проверяйте заранее:
if($uid)
$avatar=$Mainclass->Account->GetAvatar($uid);
else
$avatar_path=$Mainclass->vars[&#39;comments_guest&#39;];//Тут хранится путь к аватару (настройка группы [i]Комментарии[/i]).

Или что Вы предлагаете?
Перейти в начало страницы
+Цитировать сообщение
egysya
сообщение 2009-09-06, 16:30
Сообщение #7
Любитель
Иконка группы

Группа: Eleanor user
Сообщений: 180
Регистрация: 2009-05-21
Из: Ростов-на-Дону

Репутация:   нет  
Всего: 11


Цитата (Alexander @ 6.9.2009, 17:25)
egysya, так не передавайте той функции $uid равный нулю. Проверяйте заранее:
if($uid)
$avatar=$Mainclass->Account->GetAvatar($uid);
else
$avatar_path=$Mainclass->vars['comments_guest'];//Тут хранится путь к аватару (настройка группы Комментарии).Или что Вы предлагаете?


Alexander, да в том то и дело, в моем варианте, я проверяю, передается ли $uid значение нуля. У меня с аватарами все нормально отображается и работает. Просто хотел уточнить для твоего вариант, чтобы он работал как надо. Чтобы потом у пользователей не возникали лишние вопросы. )))
Перейти в начало страницы
+Цитировать сообщение
Alexander
сообщение 2009-09-06, 20:48
Сообщение #8
Eleanor developer
Иконка группы

Группа: Администраторы
Сообщений: 5 260
Регистрация: 2008-11-11
Из: Николаев
Версия системы: RC5

Репутация:   нет  
Всего: 67


Хорошо. Вот, переделал:
public function GetAvatar($user=false)
	{
		if($user===false)
			$user=&$this->user;
		elseif(!$user)
			return array(&#39;avatar&#39;=>&#39;&#39;,&#39;w&#39;=>&#39;&#39;,&#39;h&#39;=>&#39;&#39;,&#39;no&#39;=>true);
		elseif(!is_array($user))
		{
			$this->Mainclass->Db->Query(&#39;SELECT `id`,`avatar_location`,`avatar_size`,`avatar_type` FROM `f_users_extra` WHERE `id`=&#39;.intval($user).&#39; LIMIT 1&#39;,__file__,__line__);
			$user=$this->Mainclass->Db->Fetch_assoc();
		}
		if(empty($user[&#39;avatar_location&#39;]))
			return array(&#39;avatar&#39;=>$this->Mainclass->Template->GetImage($this->Mainclass->vars[&#39;noavatar&#39;]),&#39;w&#39;=>&#39;auto&#39;,&#39;h&#39;=>&#39;auto&#39;,&#39;no&#39;=>true);
		if (strpos($user[&#39;avatar_size&#39;],&#39;x&#39;)!==false)
		{
			$temp=explode(&#39;x&#39;,$user[&#39;avatar_size&#39;],2);
			$width=$temp[0];
			$height=$temp[1];
		}
		else
			$width=$height=&#39;auto&#39;;
		switch($user[&#39;avatar_type&#39;])
		{
			case &#39;local&#39;:
				$avatar=&#39;images/avatars/&#39;.$user[&#39;avatar_location&#39;];
			break;
			case &#39;upload&#39;:
				$avatar=Mainclass::UPLOADS_DIR.&#39;/uploaded_avatars/&#39;.$user[&#39;avatar_location&#39;];
			break;
			case &#39;url&#39;:
				$avatar=$user[&#39;avatar_location&#39;];
				$temp=explode(&#39;x&#39;,$user[&#39;avatar_size&#39;],2);
			break;
			default:
				$avatar=&#39;&#39;;
			break;
		}
		return array(&#39;avatar&#39;=>$avatar,&#39;w&#39;=>$width,&#39;h&#39;=>$height,&#39;no&#39;=>false);
	}
Перейти в начало страницы
+Цитировать сообщение
sifflex
сообщение 2013-01-11, 7:54
Сообщение #9
Новичок
Иконка группы

Группа: Eleanor user
Сообщений: 35
Регистрация: 2012-05-08

Репутация:   нет  
Всего: нет


Попробовал вставить всё что вы описали не катит, выдаёт ошибку!!!! аватара у меня воообще нет((((. Прошу вашей помощи т.к я не продвинутый юзер!!! :nea: вот ошибка< Parse error: syntax error, unexpected T_ELSEIF, expecting T_STRING or T_VARIABLE or '$' in /home/privateg/public_html/classes/login/class_account.php on line 328>

Сообщение отредактировал sifflex - 2013-01-11, 8:09
Перейти в начало страницы
+Цитировать сообщение
sifflex
сообщение 2013-01-11, 8:18
Сообщение #10
Новичок
Иконка группы

Группа: Eleanor user
Сообщений: 35
Регистрация: 2012-05-08

Репутация:   нет  
Всего: нет


Цитата (sifflex @ 2013-01-11, 8:54)
Попробовал вставить всё что вы описали не катит, выдаёт ошибку!!!! аватара у меня воообще нет((((. Прошу вашей помощи т.к я не продвинутый юзер!!! :nea: вот ошибка< Parse error: syntax error, unexpected T_ELSEIF, expecting T_STRING or T_VARIABLE or '$' in /home/privateg/public_html/classes/login/class_account.php on line 328>


вот что стоит вместо этого !!!!
public function GetAvatar($user=false)
    {
        if($user===false)
            $user=&$this->user;
        elseif(!$user)
            return array('avatar'=>'','w'=>'','h'=>'','no'=>true);
        elseif(!is_array($user))
        {
            $this->Mainclass->Db->Query('SELECT `id`,`avatar_location`,`avatar_size`,`avatar_type` FROM `f_users_extra` WHERE `id`='.(int)$user.' LIMIT 1',__file__,__line__);
            $user=$this->Mainclass->Db->Fetch_assoc();
        }
        if(empty($user['avatar_location']))
            return array('avatar'=>$this->Mainclass->Template->GetImage($this->Mainclass->vars['noavatar']),'w'=>'auto','h'=>'auto','no'=>true);
        if(strpos($user['avatar_size'],'x')!==false)
        {
            $temp=explode('x',$user['avatar_size'],2);
            $width=$temp[0];
            $height=$temp[1];
        }
        else
            $width=$height='auto';
        switch($user['avatar_type'])
        {
            case 'local':
                $avatar='images/avatars/'.$user['avatar_location'];
            break;
            case 'upload':
                $avatar=Mainclass::UPLOADS_DIR.'/uploaded_avatars/'.$user['avatar_location'];
            break;
            case 'url':
                $avatar=$user['avatar_location'];
                $temp=explode('x',$user['avatar_size'],2);
            break;
            default:
                $avatar='';
            break;
        }
        return array('avatar'=>$avatar,'w'=>$width,'h'=>$height,'no'=>false);
    }
аватара повторяю вообще нет. Люди добрые помогите чем сможете!!! Не могу настроить свою лошадку!!!!! :nea: :nea: :nea:
Перейти в начало страницы
+Цитировать сообщение
Xenus
сообщение 2013-01-12, 1:53
Сообщение #11
Любитель
Иконка группы

Группа: Eleanor user
Сообщений: 180
Регистрация: 2011-11-01

Репутация:   нет  
Всего: нет


Цитата (sifflex @ 2019-11-18 19:08)
Попробовал вставить всё что вы описали не катит, выдаёт ошибку!!!!
Какая у тебя версия системы? 1.0? Хак делался под RC версию eleanor. Актуальную на момент создания темы.
Перейти в начало страницы
+Цитировать сообщение
Alexander
сообщение 2013-01-14, 11:29
Сообщение #12
Eleanor developer
Иконка группы

Группа: Администраторы
Сообщений: 5 260
Регистрация: 2008-11-11
Из: Николаев
Версия системы: RC5

Репутация:   нет  
Всего: 67


sifflex, объясните, какого эффекта вы хотите достичь - сделаю.
Перейти в начало страницы
+Цитировать сообщение
sifflex
сообщение 2013-01-14, 16:12
Сообщение #13
Новичок
Иконка группы

Группа: Eleanor user
Сообщений: 35
Регистрация: 2012-05-08

Репутация:   нет  
Всего: нет


Система стоит RC 5 а эффект должен быть чтобы гости висели без аватарв а поситители с аватаром !!! Заранее спасибо !!!
Перейти в начало страницы
+Цитировать сообщение
Alexander
сообщение 2013-01-14, 17:36
Сообщение #14
Eleanor developer
Иконка группы

Группа: Администраторы
Сообщений: 5 260
Регистрация: 2008-11-11
Из: Николаев
Версия системы: RC5

Репутация:   нет  
Всего: 67


sifflex, где именно они должны "висеть"?
Перейти в начало страницы
+Цитировать сообщение
sifflex
сообщение 2013-01-14, 19:51
Сообщение #15
Новичок
Иконка группы

Группа: Eleanor user
Сообщений: 35
Регистрация: 2012-05-08

Репутация:   нет  
Всего: нет


Цитата (Alexander @ 2013-01-14, 18:36)
sifflex, где именно они должны "висеть"?
блин я образно !!! что бы на саите гости без аватара а пользователи с аватаром, загрузка аватаров только для пользователей в любом формате !!!


Сообщение отредактировал sifflex - 2013-01-14, 22:05
Перейти в начало страницы
+Цитировать сообщение
Alexander
сообщение 2013-01-15, 9:39
Сообщение #16
Eleanor developer
Иконка группы

Группа: Администраторы
Сообщений: 5 260
Регистрация: 2008-11-11
Из: Николаев
Версия системы: RC5

Репутация:   нет  
Всего: 67


sifflex, у меня отпало желание вам помогать. Так истошно орать... Даже общаться с вами нет желания. Лечитесь что-ли...
Перейти в начало страницы
+Цитировать сообщение
sifflex
сообщение 2013-01-17, 21:11
Сообщение #17
Новичок
Иконка группы

Группа: Eleanor user
Сообщений: 35
Регистрация: 2012-05-08

Репутация:   нет  
Всего: нет


сам лечись..... я же написал что мне нужно что бы было с аватаром!!! я же не продвинутый юзер как вы :angry: :angry: :angry:


Добавлено через 2 минут, 30 секунд:

Цитата (sifflex @ 2013-01-17, 22:11)
сам лечись..... я же написал что мне нужно что бы было с аватаром!!! я же не продвинутый юзер как вы :angry: :angry: :angry:


висеть они нигде не должны !!!! повторяю висеть они нигде не должны!!!!
Перейти в начало страницы
+Цитировать сообщение
Kaname26
сообщение 2013-01-17, 21:18
Сообщение #18
Любитель
Иконка группы

Группа: Eleanor user
Сообщений: 395
Регистрация: 2010-03-09

Репутация:   нет  
Всего: нет


просто ты ореш на него!!!! вот он и тебе так и написал .
Перейти в начало страницы
+Цитировать сообщение
Alexander
сообщение 2013-01-17, 21:52
Сообщение #19
Eleanor developer
Иконка группы

Группа: Администраторы
Сообщений: 5 260
Регистрация: 2008-11-11
Из: Николаев
Версия системы: RC5

Репутация:   нет  
Всего: 67


При переписке, один знак ! - это уже "внимание, с собеседником что-то не то". Два - это уже диагноз. Три и больше - 100% клиника.
Напоминаю: я ничего никому не должен, чтобы на меня орали да еще так истошно.
Перейти в начало страницы
+Цитировать сообщение
Xenus
сообщение 2013-01-18, 1:20
Сообщение #20
Любитель
Иконка группы

Группа: Eleanor user
Сообщений: 180
Регистрация: 2011-11-01

Репутация:   нет  
Всего: нет


А теперь представьте что приходится читать саппорту юкоз-юзеров. :rolleyes:
Перейти в начало страницы
+Цитировать сообщение

2 страниц Открыть меню   1 2 >
Ответить в данную темуНачать новую тему
0 чел. читают эту тему (гостей: 0, скрытых пользователей: 0)
Пользователей: 0

 
RSS Текстовая версия 0.0534 сек.    12 запросов    GZIP включен    Сейчас: 2019-11-18, 18:08