Показать сообщение отдельно
Старый 02.06.2008, 01:09   #2
void
Senior Member
 
Аватар для void
 
Регистрация: 14.03.2006
Адрес: Russia, Penza
Сообщений: 1,504
Отправить сообщение для void с помощью ICQ
По умолчанию

Как нам говорит исходный кот,
PHP код:
    function browserInfo($useragent)    {
        foreach(
$this->hookObjectsArr as $hookObj)    {
            if (
method_exists($hookObj'browserInfo')) {
                
$result $hookObj->browserInfo($useragent);
                if (
strlen($result)) {
                    return 
$result;
                }
            }
        }

        
$useragent trim($useragent);
        
$browserInfo=Array();
        
$browserInfo['useragent']=$useragent;
        if (
$useragent)    {
            
// browser
            
if (strstr($useragent,'MSIE'))    {
                
$browserInfo['browser']='msie';
            } elseif(
strstr($useragent,'Konqueror'))    {
                
$browserInfo['browser']='konqueror';
            } elseif(
strstr($useragent,'Opera'))    {
                
$browserInfo['browser']='opera';
            } elseif(
strstr($useragent,'Lynx'))    {
                
$browserInfo['browser']='lynx';
            } elseif(
strstr($useragent,'PHP'))    {
                
$browserInfo['browser']='php';
            } elseif(
strstr($useragent,'AvantGo'))    {
                
$browserInfo['browser']='avantgo';
            } elseif(
strstr($useragent,'WebCapture'))    {
                
$browserInfo['browser']='acrobat';
            } elseif(
strstr($useragent,'IBrowse'))    {
                
$browserInfo['browser']='ibrowse';
            } elseif(
strstr($useragent,'Teleport'))    {
                
$browserInfo['browser']='teleport';
            } elseif(
strstr($useragent,'Mozilla'))    {
                
$browserInfo['browser']='netscape';
            } else {
                
$browserInfo['browser']='unknown';
            }
            
// version
            
switch($browserInfo['browser'])    {
                case 
'netscape':
                    
$browserInfo['version'] = $this->browserInfo_version(substr($useragent,8));
                    if (
strstr($useragent,'Netscape6')) {$browserInfo['version']=6;}
                break;
                case 
'msie':
                    
$tmp strstr($useragent,'MSIE');
                    
$browserInfo['version'] = $this->browserInfo_version(substr($tmp,4));
                break;
                case 
'opera':
                    
$tmp strstr($useragent,'Opera');
                    
$browserInfo['version'] = $this->browserInfo_version(substr($tmp,5));
                break;
                case 
'lynx':
                    
$tmp strstr($useragent,'Lynx/');
                    
$browserInfo['version'] = $this->browserInfo_version(substr($tmp,5));
                break; 
в нём проверка на наличие в useragent строки MSIE стоит раньше, чем Opera, и, видимо, до этого case просто не доходит выполнение кода.
Стало быть, можно написать патч и послать его в core team, а можно воспользоваться любезно предоставленным Hook и написать мааленький экстеншен, и возвращать в нём значение только для оперы.
__________________
TYPO3 FAQ
void вне форума   Ответить с цитированием