Next Generation CMS :: Форум поддержки

Заинтересовала наша система? Тогда этот форум для Вас!

Вы не зашли.

#1 2014-02-16 23:47:42

padonak
Участник
Откуда Russia
Зарегистрирован: 2011-01-24
Сообщений: 31
Рейтинг :   
Сайт

Авто определение системы и выбор шаблона

Как реализовать в NG такое?

Хак MobTPL для DLE
Позволяет для разных устройств использовать разные шаблоны.
В процессе тестирования новых устройств будет дополняться...

Установка:
Шаг 1
Создать различные шаблоны для различных устройств
Cтандартный (указанный в админке) - Компьютеры/Ноутбуки/Нетбуки(на WindowsNT)
tabletpc - Планшеты (Android/IOS/WindowsPhone)(втч Galaxy Note) / Нетбуки(Android/WindowsCE)
smartphone - Смартфоны
mobphone - Телефоны на J2ME
Шаг 2
В файл /engine/modules/function.php:

Вместо:

function check_smartphone() {

        if ( $_SESSION['mobile_enable'] ) return true;

        $phone_array = array('iphone', 'android', 'pocket', 'palm', 'windows ce', 'windowsce', 'mobile windows', 'cellphone', 'opera mobi', 'operamobi', 'ipod', 'small', 'sharp', 'sonyericsson', 'symbian', 'symbos', 'opera mini', 'nokia', 'htc_', 'samsung', 'motorola', 'smartphone', 'blackberry', 'playstation portable', 'tablet browser', 'android');
        $agent = strtolower( $_SERVER['HTTP_USER_AGENT'] );

        foreach ($phone_array as $value) {

                if ( strpos($agent, $value) !== false ) return true;

        }

        return false;

}

Вставить:

// MobTPL fix

function check_smartphone() {

        if(!empty($_GET['mobtpl'])){
          if($_GET['mobtpl']=='phone'){ $_SESSION['mobtpl']='phone'; return 'phone';}
          else if($_GET['mobtpl']=='smart'){ $_SESSION['mobtpl']='smart'; return 'smart';}
          else if($_GET['mobtpl']=='tablet'){ $_SESSION['mobtpl']='tablet'; return 'tablet';}
          else if($_GET['mobtpl']=='pc'){ $_SESSION['mobtpl']='pc'; return 'pc';}
          else if($_GET['mobtpl']=='reset'){ unset($_SESSION['mobtpl']);}
        }else{
          if(!empty($_SESSION['mobtpl'])){
            if($_SESSION['mobtpl']=='phone') return 'phone';
            else if($_SESSION['mobtpl']=='smart') return 'smart';
            else if($_SESSION['mobtpl']=='tablet') return 'tablet';
            else if($_SESSION['mobtpl']=='pc') return 'pc';
          }
        }
         
        $device_array = array(
        'ip.*opera\smini'=>'smart', // Opera Mini для I-устройств
        'android.*gt\-s'=>'smart', // Android Samsung Galaxy S gt-sXXXX (смартфон)
        'android.*gt\-n'=>'tablet', // Android Samsung Galaxy Note gt-nXXXX (минипланшет)
        'android.*gt\-p'=>'tablet', // Android Samsung Galaxy Tab gt-pXXXX (планшет)
        // тут необходимо добавить тесты на других планшетах под андроид: HTC, VSonic, Китайцы
        'android'=>'smart', // всех остальных андроидов относим к смартам
        'pocket'=>'smart', // HP
        'palm'=>'smart', // Palm/HP
        'webos'=>'smart', // Palm/HP WebOS
        'fennec'=>'smart', // Mobile Firefox
        'windows\s?ce'=>'tablet', //'windowsce'=>'smart', // навигаторы и китайские устройства на windows ce
        'mobile\swindows'=>'smart', // Смартфоны на Windows Mobile 
        'wp7'=>'smart', // Windows Phone 7
        'wp8'=>'smart', // Windows Phone 8 (необходимы доп тесты на пленшете под windows phone)
        'cellphone'=>'phone',
        'opera\s?mobi'=>'smart', //'operamobi'=>'phone', // Opera Mobile
        'opera\smini'=>'phone', // Opera Mini
        'iphone'=>'smart', // Apple IPhone
        'ipod'=>'smart', // Apple IPod Toch
        'ipad'=>'tablet', // Apple IPad
        'sharp'=>'phone',
        'symbian'=>'smart',
        'symbos'=>'smart',
        'htc\_'=>'smart',
        'sonyericsson'=>'phone',
        'nokia'=>'phone',
        'samsung'=>'phone',
        'motorola'=>'phone',
        'blackberry'=>'smart', // смартфон Blackberry
        'playstation\sportable'=>'smart', // Sony PSP
        'rim\stablet'=>'tablet', // планшет Blackberry
        'small'=>'smart',
        'tablet\sbrowser'=>'tablet',
        'smartphone'=>'smart',
        'tablet'=>'tablet'
  // боты поисковые
  // Scooter Ask Jeeves fast googlebot slurp lycos Simple Yandex Stack aport111
        );

        $agent = strtolower( $_SERVER['HTTP_USER_AGENT'] );

  $rtrn='pc';
        foreach ($device_array as $key => $value){
    $pattern="/".$key."/ix"; //echo $key.'
';
    if(preg_match($pattern,$agent,$find)){ $rtrn=$value; /*echo $key.'
';*/ break;}
        }
        return $rtrn;
}

//\ MobTPL fix
Шаг 3
В файле /engine/init.php
Вместо:

$smartphone_detected = false;

if( isset( $_REQUEST['action'] ) and $_REQUEST['action'] == "mobiledisable" ) $_SESSION['mobile_disable'] = 1;
if( isset( $_REQUEST['action'] ) and $_REQUEST['action'] == "mobile" ) { $_SESSION['mobile_enable'] = 1; $_SESSION['mobile_disable'] = 0;}
if( !isset( $_SESSION['mobile_disable'] ) ) $_SESSION['mobile_disable'] = 0;
if( !isset( $_SESSION['mobile_enable'] ) ) $_SESSION['mobile_enable'] = 0;

if ( $config['allow_smartphone'] AND !$_SESSION['mobile_disable'] ) {

        if ( check_smartphone() ) {

                if ( @is_dir ( ROOT_DIR . '/templates/smartphone' ) ) {

                        $config['skin'] = "smartphone";
                        $smartphone_detected = true;
                        $config['allow_comments_wysiwyg'] = "no";

                }

        }

}

Вставить:

// MobTPL fix

$smartphone_detected = $_SESSION['mobile_disable'] = $_SESSION['mobile_enable'] = false;

$device=check_smartphone();
if ($device=='phone'){
  if ( @is_dir ( ROOT_DIR . '/templates/mobphone' ) ) {
    $config['skin'] = "mobphone";
    $smartphone_detected = true;
    $config['allow_comments_wysiwyg'] = "no";
  }
}else if($device=='smart'){
  if ( @is_dir ( ROOT_DIR . '/templates/smartphone' ) ) {
    $config['skin'] = "smartphone";
    $smartphone_detected = true;
    $config['allow_comments_wysiwyg'] = "no";
  }
}else if($device=='tablet'){
  if ( @is_dir ( ROOT_DIR . '/templates/tabletpc' ) ) {
    $config['skin'] = "tabletpc";
    $smartphone_detected = true;
    $config['allow_comments_wysiwyg'] = "no";
  }     
}

//\ MobTPL fix
Шаг 4
При необходимости, добавить ссылки на жесткое переключение типов шаблонов для пользователя.
Внимание!!!
После переключения тип устройства будет игнорироваться

<a href="/index.php?mobtpl=pc" title="Включить стандартный шаблон">ПК</a>
<a href="/index.php?mobtpl=phone" title="Включить шаблон для мобильных телефонов">Телефон</a> 
<a href="/index.php?mobtpl=smart" title="Включить шаблон для смартфонов и наладонников">Смартфон</a> 
<a href="/index.php?mobtpl=tablet" title="Включить шаблон для планшетов">Планшет</a> 
<a href="/index.php?mobtpl=reset" title="Сбросить настройки шаблонов">Сбросить</a>

Не в сети

#2 2014-02-17 08:02:06

irbees2008
Продвинутый чайник ;)
Откуда Шахтинск
Зарегистрирован: 2012-03-14
Сообщений: 2,873
Рейтинг :   121 
Сайт

Re: Авто определение системы и выбор шаблона

Есть адаптивные шаблоны,резиновые ,да и последние модели смартфонов и планщетов нормально переваривают все сайты,смысл?

Не в сети

#3 2014-02-17 11:41:54

easmik
VIP забанил этого пользователя.
Зарегистрирован: 2011-02-01
Сообщений: 1,030
Рейтинг :   37 

Re: Авто определение системы и выбор шаблона

padonak,  http://ngcms.ru/forum/viewtopic.php?id=957

Не в сети

Подвал раздела

Работает на FluxBB