При разработке последнего модуля возникла необходимость получения информации каким именно браузером пользуется текущий посетитель страницы, а также его полной UserAgent строке. В виду того, что Joomla 3 с версии 3.4.7 перестала хранить такие данные в mysql таблице _session, пришлось покопать встроенные классы Joomla 3. Как оказалось, все довольно просто. Как обычно, данный материал создан, чтобы быть под рукой в случае, когда опять появится необходимость, ну и, быть может, будет полезен тем, кто озадачен данным вопросом сегодня. Описание встроенных классов определение браузера в Joomla 3, как с ними работать, а также несколько примеров под катом этого поста. 

Получить данные о текущем браузере пользователя в Joomla можно при помощи 2 различных классов: JBrowser и JApplictionWebClient. Последний предоставляет скудные данные, поэтому сегодня будем рассматривать возможности класса JBrowser.

1. JBrowser класс в Joomla 3

Класс JBrowser входит в подкласс Environment, который в свою очередь является частью основной библиотеки Joomla 3. Для того, чтобы воспользоваться классом JBrowser для начала нужно его подключить, точнее импортировать в вашем модуле\плагине\компоненте. Делается это следующим образом:

jimport('joomla.environment.browser');

 После чего можно задать в переменную объект класса JBrowser при помощи следующей строки:

$browser = &JBrowser::getInstance();

1. Теперь из переменной можно получить кое-какие полезные данные. Для начала можно выдернуть UserAgent строку браузера:

$browserUserAgent = $browser->getAgentString();
echo "UserAgent строка: $browserUserAgent";

На что браузер должен нам ответить что-нибудь наподобие:

UserAgent строка: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106

 2. Можно не парится определять браузер по строке UserAgent, а сразу получить тип браузера через метод getBrowser();

$browserType = $browser->getBrowser();
echo "Тип браузера: $browserType";

После чего в ответ получим что-нибудь типа:

Тип браузера: chrome 

Данный метод может определять следующие браузеры: 'opera','chrome','palm','msie', 'amaya', 'fresco', 'avantgo', 'safari','konqueror', 'mozilla', 'lynx', 'links', 'hotjava', 'up','xiino', 'palmscape', 'nokia', 'ericsson', 'wap', 'imode', 'blackberry', 'motorola', 'mml'. В метод постоянно добавляют сигнатуры браузеров, поэтому с каждой новой версией Joomla, она может знать их больше. 

3. Без лишних манипуляций модно определить версию браузера текущего пользователя. Для этого нам помогут сразу 3 метода: getMajor(),getMinor(),getVersion(). Допустим у меня браузер Chrome версии 47.0.2526.106 m. 

$browserMajor = $browser->getMajor();
echo $browserMajor;
$browserMinor = $browser->getMinor();
echo $browserMinor;
$browserVersion = $browser->getVersion();
echo $browserVersion;

Метод getMajor() получает часть версии браузера до первой точки. То есть в ответ выдает просто строку:

47

Метод getMinor() получает следующую часть версии браузера до второй точки. То бишь в ответ он мне выдает просто - 0. 

Метод же getVersion() возвращает нам версию браузера до второй точки, то есть в моем случае:

47.0

4. Стандартными методами класса можем также определить платформу операционной системы, на которой работает текущий браузер пользователя. Получить ее можно используя метод getPlatform();

$browserPlatform = $browser->getPlatform();
echo $browserPlatform;

В ответ Joomla 3 нам выдаст только один вариант из трех: это 'win','mac' or 'unix'. 

Если предыдущие методы возвращали нам в ответ какую-либо строку, то следующие методы будут отвечать нам только да или нет.

5. Метод isBrowser() позволяет определить, является ли текущий браузер пользователя таким же, какой мы хотим найти. Например, у меня браузер chrome, и если я хочу чтобы именно при использовании браузеров chrome пользователи увидели какое-нибудь сообщение, то можно использовать следующий код:

if ($browser->isBrowser('chrome')) 
{
	echo "Да, это Хром, мать его!";
}

Или допустим нам нужно подгрузить дополнительный сss стиль если браузер является Осликом с версией ниже 7й:

  if(($browserType == 'msie') &amp;& ($browserVersion < 7))
        {
           $doc->addStyleSheet( 'css/ie6.css' );
        }

6.  Метод isMobile() дает нам возможность узнать заранее, является ли текущий браузер пользователя мобильным. Спросим у Joomla, является ли браузер мобильным, если да - то выдаем сообщение:

if ($browser->isMobile) 
{
	echo "Да, это мобильный браузер";
}

7. В классе JBrowser присутствует функция определения интернет ботов в Joomla 3. Она легла в основу метода isRobot(). Данный метод проводит перебор по своей небольшой базе ботов, состоящую из 40 сигнатур. Данный метод не определяет имя бота, он просто ищет в useragent сигнатуру из своей базы. Если находит - то возвращает true. 

if ($browser->isRobot) 
{
	echo "Да, это робот";
}
else 
{ 
    echo "Нее, обычный люд!";
}

8. Кому нужно можно определить является ли текущее соединение защищенным SSL или нет при помощи следующего метода:

if ($browser->isSSLConnection) 
{
	echo "Да, соединение защищено";
}

9. А также совсем, наверное, не нужный метод определяющий версию http протокола сервера:

$browserprotocol = $browser->getHTTPProtocol();
echo $browserprotocol;

10. Еще есть возможность определить, может ли текущий браузер отображать файлы определенного типа. Например, определим может ли браузер показывать нам adobe flash файлы:

if (!$browser->isViewable('application/x-shockwave-flash'))
{
	// определенные действия если нет поддержки flash. например предложить скачать adobe flash
}

Список mime-типов для проверки можно найти в википедии. 

Полезные материалы по теме:

Полезный материал? Поддержи наш блог - лайкни в соцсети!
 

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