В статусе пользователя показываем устройство с которого он заходил 1.X

2723
Пара телодвижений позволяющих организовать показ в профиле пользователя тип устройства, точнее USER AGENT с которым пользователь приходил на сайт при последнем посещении когда обновлялся его logdate



1. Сделать бэкап таблицы cms_users из базы данных и всех изменяемых файлов и сохранить в надёжном месте.



2. В базе данных сделать запрос
Код PHP:
  1. ALTER TABLE `cms_users` ADD `lastlog_uagent` VARCHAR(250) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL AFTER `openid`;
3. В файле /core/classes/user.class.php

вместо

Код PHP:
  1. cmsDatabase::getInstance()->query("UPDATE cms_users SET logdate = CURRENT_TIMESTAMP WHERE id = '$user_id'");
вставить

Код PHP:
  1. $useragent = cmsCore::strClear((string)$_SERVER['HTTP_USER_AGENT']);
  2. cmsDatabase::getInstance()->query("UPDATE cms_users SET logdate = CURRENT_TIMESTAMP, lastlog_uagent = '$useragent' WHERE id = '$user_id'");
4. В файле /components/users/fronted.php

Перед

Код PHP:
  1. cmsPage::initTemplate('components', 'com_users_profile.tpl')->
вставить

Код PHP:
  1. $user_logdate_agent = $usr['lastlog_uagent'];
  2. if(stripos($user_logdate_agent,'Android') !== false) { $user_device = 'android';}
  3. if(stripos($user_logdate_agent,'iPod') !== false) { $user_device = 'ipod';}
  4. if(stripos($user_logdate_agent,'iPhone') !== false) { $user_device = 'iphone';}
  5. if(stripos($user_logdate_agent,'iPad') !== false) { $user_device = 'ipad';}
  6. if(stripos($user_logdate_agent,'iOS') !== false) { $user_device = 'ios';}
  7. if(stripos($user_logdate_agent,'Windows Mobile') !== false) { $user_device = 'winmobile';}
  8. if(stripos($user_logdate_agent,'Opera Mini') !== false) { $user_device = 'operamini';}
  9. if(stripos($user_logdate_agent,'Windows NT') !== false) { $user_device = 'desktop';}
  10. if(stripos($user_logdate_agent,'Macintosh') !== false) { $user_device = 'macintosh';}
  11. if(stripos($user_logdate_agent,'Windows Phone') !== false) { $user_device = 'windowsphone';}
  12.  
  13.  
(Если хотите учитывать все возможные юзер агенты, можете поискать их список и добавить строки под каждый юзер агент.)

5. В этом же файле чуть ниже перед

Код PHP:
  1. display('com_users_profile.tpl');
вставить

Код PHP:
  1. assign('user_device', $user_device)->
6. В шаблоне com_users_profile.tpl

где нибудь перед или после {$usr.flogdate}

вставить

Код PHP:
  1. {if $user_device}<img src="/images/icons/devices/{$user_device}.png" alt="{$user_device}" align="absmiddle" width="16" height="16" border="0"/>{/if}
в папку /images/icons/devices/ закачать иконки для каждого юзер агента в списке из пункта 4. То есть android.png, ipod.png, iphone.png и так далее.


Если всё сделали верно должно получиться как то так.

В статусе пользователя показываем устройство с которого он заходил


В статусе пользователя показываем устройство с которого он заходил


Вроде ничего не забыл.

Если хотите дополнить, улучшить, не стесняйтесь.

UPDATE

Зачем это
Не то, что бы я кого то уговаривал, просто объясняю (в ответ на вопросы ниже) зачем это было нужно мне.
Делал себе для того, что бы лучше понимать с каких устройств на сайте лучше конверт, регистрация и далее. Яндекс метрика показывает соотношение мобильных посетителей к десктопам, но далее у меня провал, я не могу знать, кто чаще регистрируется, мне хотелось бы это понимать для себя, как админа. Например, таким образом, я наконец то узнал, что есть такой юсер агент как Windows Phone, а у меня в настройках мобильной версии не указано, что этому юсер агенту показывать мобильную версию и люди с этих устройств получали полную версию.

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

Список юсер агентов
После двух дней работы на своем сайте, у себя добавил два агента для Макинтош (десктоп) и Виндовс Фон (мобильный)
Выше тоже их добавил.

В принципе, думаю нет нужды выводить разную иконку под каждый юзер агент одного типа. Например opera mini, iphone, windows phone могут выглядеть одинаково, как мобильный телефон, а для подробной информации (для админа) можно добавить тег title, что бы при наведении на иконку появлялась подсказка, какой именно Юзер агент.

В статусе пользователя показываем устройство с которого он заходил


Код PHP:
  1. {if $user_device}<img src="/images/icons/devices/{$user_device}.png" {if $is_admin} title="{$user_device}"{/if} alt="{$user_device}" align="absmiddle" width="16" height="16" border="0"/>{/if}
Выбор тегов из набора при создании поста в блоге | Мои гости
Комментарии (29)
Олег Васильевич я 2 декабря 2016 в 02:09 0
Нил™:
В статусе пользователя показываем устройство с которого он заходил
Кому показываем? Для чего показываем? За чей счёт демонстрация?
Нил™ 2 декабря 2016 в 08:21 +4
1) Самому пользователю. Он должен наконец то узнать с какого устройства он зашел на сайт.
2) Что бы внушить пользователю чувство незащищенности, показать ему, что мы кое что о нём знаем *многозначительная ухмылка*, и это только цветочки.
3) Спонсор показа "Туркменские авиалинии"
Atid 2 декабря 2016 в 11:26 +1
Если условие 3 не верно, то два предыдущие условия верны?
Нил™ 2 декабря 2016 в 11:32 0
не понял вопроса)
Александр 2 декабря 2016 в 16:17 0
"летают и слава богу"?
Alekskrug 2 декабря 2016 в 08:16 +4
А для 2 ветке есть такая вкусняшка
Def 2 декабря 2016 в 13:28 +2
поддерживаю вопрос
Нил™ 2 декабря 2016 в 13:33 +1
ну, я точно не в курсе куда там, что. Может разработчики под вторую ветку заметят интерес, сделают..
ХR 2 декабря 2016 в 14:07 +2
Такое бы для двойки.
Soul 16 января 2017 в 17:26 0
В двойке для этого уже есть соответствующий плангин.
титанио 3 декабря 2016 в 18:57 +1
Дайте как сделать для 2х
TOPg 3 декабря 2016 в 19:19 +1
согласен, очень нужно!
Val 3 декабря 2016 в 21:16 +2
А, позвольте узнать, для чего? =)
Jestik 3 декабря 2016 в 21:29 +3
Что бы сделать свой ВК с блэкджеком и ... joke
титанио 7 декабря 2016 в 09:09 +2
Так что, как на вторую версию сделать так же ?
TOPg 16 января 2017 в 14:41 0
пробовали сделать под вторую версию, не удается получить данные, автор помоги!!!
Нил™ 16 января 2017 в 14:48 0
Я плохо знаком со второй веткой. Сидеть разбираться, мне оно пока не нужно. Сори.
TOPg 16 января 2017 в 15:06 0
назовите цену))
Нил™ 16 января 2017 в 15:18 0
Вы не потянете мою цену)
Я не разработчик ЖЕ. Я просто методом тыка кое что делаю для себя и кое-что из этого кое-что иногда готов выложить для тех, кто сам не может.
Лучше сделайте по-другому. Огласите сколько можете заплатить и разработчики для двойки которых тут много-много, вероятно найдут время что бы сделать это для вас.
Или посмотрите тут http://instantcms.ru/freelancers
Нил™ 16 января 2017 в 15:21 0
Или другое контр предложение. Переходите на единицу! бгг
С единицей осталось работать много энтузиастов, да и там уже много чего есть.
А для двойки пока в основном каждый чих за $$$
TOPg 16 января 2017 в 15:54 0
я 2 месяца потратил на переход с неё на двойку)))))))
Нил™ 16 января 2017 в 16:17 0
В принципе, если вы уже пытались что то сделать для двойки, наверно стоит создать тему на форуме с конкретными вопросами, где там у вас данные получить не удаётся.
Ris 17 января 2017 в 00:08 0
Нормально всё и в двойке получается.
Также стрипозом из юзерагента.
WD Sx21 27 мая 2018 в 12:25 0
Сколько с размером иконки на выходе возился не помогло ничего!в профиле иконка на всю страницу
Нил™ 27 мая 2018 в 12:45 0
Может быть у вас где то в css указано для картинок в родительском диве ширина на 100%!important
попробуйте задать класс для самой картинки и прописать ширину в css для класса
<img class="userdeviceinfo"

.userdeviceinfo{
width:16px!important;
height:16px!important;
}

Если не поможет, то вместо

Код PHP:
  1. {if $user_device}<img src="/images/icons/devices/{$user_device}.png" {if $is_admin} title="{$user_device}"{/if} alt="{$user_device}" align="absmiddle" width="16" height="16" border="0"/>{/if}
так

Код PHP:
  1. {if $user_device}<span {if $is_admin} title="{$user_device}"{/if} style="width:15px; height:16px; background:url(/images/icons/devices/{$user_device}.png) center no-repeat;")"{/if}
Нил™ 27 мая 2018 в 12:46 0
забыл закрыть тег спан. В конце перед

Код PHP:
  1. {/if}
тег

Код PHP:
  1. </span>
WD Sx21 27 мая 2018 в 13:04 0
Заменил ширину 100%!important на меньший процент!Спасибо!
WD Sx21 22 июля 2018 в 12:46 0
Всё сделал-и ничего! версия 1.10.7 шаблон Токарева
WD Sx21 22 июля 2018 в 12:51 0
Отбой всё ок)тупанул