Определение ОС и браузера пользователя

#1 5 октября 2011 в 12:00
Ребят, кто может помочь разобраться с реализацией сего решения?
Запись юзерагента в БД реализовал уже давно, в шаблоне даже сделал вывод {$comment.useragent} строкой, но нужно вывести картинками браузеров и ОС. Был у меня такой плагин под Wordpress, не могу разобраться как его адаптировать под Инстант. Кто поможет?
Нужно примерно следующее:
Иллюстрация
#2 5 октября 2011 в 15:32

нужно вывести картинками браузеров и ОС

del
Наверное примерно так:
  1. {if $comment.useragent == 'ЗНАЧЕНИЕ'}<img src="ССЫЛКА_НА_КАРТИНКУ">{/if}
#3 5 октября 2011 в 15:43

Наверное примерно так:
Код PHP:
1 {if $comment.useragent == 'ЗНАЧЕНИЕ'}<img src="ССЫЛКА_НА_КАРТИНКУ">{/if}

DagStudent
Шутку оценил. Если что, useragent — это строка, имеющая примерно следующее значение:
  1. Mozilla/5.0 (X11; Arch Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0
или еще пример:
  1. Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.187 Safari/535.1
Как я понял, Вы предлагаете задать условия для каждого сочетания "браузер + его версия + ОС + ее версия" отдельную картинку? Определение каждого браузера и ОС в отдельности занимает более 1500 строк кода. Теперь в голове себе представьте множество сочетаний той или иной ОС с тем или иным браузером, да еще и с различными версиями. Сколько их получится? А сколько тогда нужно приведенных Вами условий написать? Вот Вам примеры строк юзерагентов, на всякий случай: user-agents.org
Прошу отписаться в теме тех, кто смыслит в программировании, в частности PHP, а также разбирается во внутренней структуре Инстанта.
#4 5 октября 2011 в 16:29
del, Раньше была такая функция — get_browser(), но ИМХО сегодня она бесполезна.

Вы наверное и сами видели сколько там вариантов строк юзерагентов.
Плюс сегодня многие браузеры имеют плагины позволяющие менять эту строку на что угодно.

Собирать условия для цельной строки не имеет смысла. Единых правил у этой строки тоже нет.

— Что можно предложить?
— Если версии агентов не важны, перед записью в базу парсить строку на предмет знакомых слов (предварительно составив их список)
#5 5 октября 2011 в 16:43
Max, у меня у самого стоит подмена юзерагента в Firefox. Но это не мешает абсолютно. Про условия целой строки никто и не говорит, это DagStudent просто пошутил.
Браузеры, ОС и их версии — все это определяется без проблем (я в первом посте привел скриншот страницы с плагином для Wordpress, там определяется абсолютно все: браузер и версия, тип ОС и ее версия).

Вот архив скрипта для определения ОС и браузера: instantcms.ru/users/files/download1434.html
Вопрос в том, как это адаптировать под Инстант.
P.S. Скрипт изменен, не пытайтесь его на WP поставить, работать не будет, я оттуда уже половину функционала убрал за ненадобностью. Оттуда можно взять только само определение браузеров и осей, т.к. ни в одном скрипте я более полного списка еще не встречал.
#6 5 октября 2011 в 19:37

… Оттуда можно взять только само определение браузеров и осей, т.к. ни в одном скрипте я более полного списка еще не встречал.

del
Кроме полного описания оказывается и сам код полностью рабочий и его можно легко использовать.

Нужная строка для вывода формируется в переменной $ua
#7 6 октября 2011 в 00:30
Max, ну, код то рабочий, я просто сказал, что не стоит его пытаться подключить как плагин к WP, т.к. я его там покрамсал прилично уже.
Я не смог разобраться, как организовать получение из БД строки с юзерагентом, и разобрав ее по кусочкам вывести в шаблоне комментариев. Плохо понимаю структуру Инстанта, да и со Смарти не работал. Я пока только в коде компонента комментариев дописал в запрос sql получение строки, а в шаблоне комментариев вывел ${comment.useragent} всплывающей подсказкой к аватару комментатора. Хотелось бы разобраться, как сделать то, что я описал выше, т.е. вывод под аватаром картинок с всплывающими подсказками с версиями ОС и браузеров.
#8 6 октября 2011 в 09:20
Я так понял у тебя уже все сделано.
Все что тебе осталось:
Перед тем как передать переменную $useragent смарти, прогнать ее через цепочку функций с твоего файла.
На выходе — в переменной $ua и будет нужная тебе строка (уже картинки с подписями os и браузера) которую и отдай смарти вместо прежнего значения $useragent.
#9 6 октября 2011 в 10:21
Max, да, именно в этом у меня и загвоздка. Я не могу сообразить как подключить скрипт к компоненту комментариев и передать ему переменную $useragent.
#10 6 октября 2011 в 17:09

Я не могу сообразить как подключить скрипт к компоненту комментариев и передать ему переменную $useragent.

del
Подключить — include, передать переменную — либо как аргумент функции либо объяви ее глобальной, что бы функция вернула значение — return
#11 6 октября 2011 в 17:13

Подключить — include, передать переменную — либо как аргумент функции либо объяви ее глобальной, получить — return

Max
По поводу include и require я в курсе, про возвращаемое значение функции тоже. Просто не могу сообразить, в каком месте там это вызывать, и какой аргумент передавать в сам скрипт (насколько я понял, это $con['useragent']).
#12 6 октября 2011 в 17:18
Так… Есть компонент comments, есть модуль mod_comments. И с чем работать?
Строку я получаю сейчас через модуль, вывожу в шаблон.
#13 6 октября 2011 в 17:29
Там же где переменная отправляется в БД. Точнее прямо перед теми строками.

т.е. в БД уже надо записать готовую строку для вывода картинок.
#14 6 октября 2011 в 17:34
Эм… не понял. В БД то зачем записывать строку для вывода картинок? В БД как раз хранится строка юзерагента. А уже разбирая ее нужно вывести картинки.
Вот модуль комментариев: pastebin.com/5m3Xqi8C
Там я пытаюсь заинклудить скрипт и вызвать функцию. Но таким способом не получается. Даже если я задам так:

$useragent_title=$con['useragent'];
$con['useragent']="123";

то будет выведена все равно строка с юзерагентом, а не "123". ЧЯДНТ?
Пробовал и global $useragent_title=$con['useragent'];
#15 6 октября 2011 в 17:47

В БД то зачем записывать строку для вывода картинок? В БД как раз хранится строка юзерагента. А уже разбирая ее нужно вывести картинки.

del
Представь страницу с сотней комментов.
Для каждого коммента, при каждом просмотре придется вычислять то что можно получить 1 раз и потом просто брать с базы. Зачем же делать 100 разборов строки если можно сделать 1 ?

зы. Код сейчас гляну
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.