Хак MobTPL для DLE

Позволяет для разных устройств использовать разные шаблоны.
Основан на коде Генри Хофмана "Хак MobTPL для DLE версия 1.0 от 02.08.2012"

В данной версии предлагаются две реализации:
1. OLD Version - Код user-agent добавляется вручную, как в первой версии хака.
2. NEW Version - Используется php class от проекта mobiledetect.net уже добавленный в DLE 10.3 разработчиками движка.

Данный хак работает на версиях DataLife Engine 10.3

Установка OLD Version:

Пожалуйста, сделайте резервные копии перед внесением изменений.
Правки будут вноситься всего в 2 файла:

/engine/modules/function.php
/engine/init.php

Шаг 1

Создать различные шаблоны для различных устройств
Cтандартный (указанный в админке) - Компьютеры/Ноутбуки/Нетбуки(на WindowsNT)
tabletpc - Планшеты (Android/IOS/WindowsPhone)(втч Galaxy Note) / Нетбуки(Android/WindowsCE)
smartphone - Смартфоны
mobphone - Телефоны на J2ME

Шаг 2

В файл /engine/modules/function.php:

В конце файла, перед:

?>

Вставить:


// MobTPL fix
function check_device() {
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',
'touch'=>'tablet',
'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; break;}
}
return $rtrn;
}
// .MobTPL fix

Шаг 3

В файле /engine/init.php
Вместо:


if ( ($config['allow_smartphone'] AND !$_SESSION['mobile_disable'] AND $tpl->smartphone) OR $_SESSION['mobile_enable'] ) {
  if ( @is_dir ( ROOT_DIR . '/templates/smartphone' ) ) {
    $config['skin'] = "smartphone";
    $smartphone_detected = true;
    $config['allow_comments_wysiwyg'] = 0;
  }
}

Вставить:


// MobTPL fix
if ( $config['allow_smartphone'] ) {
    $smartphone_detected = $_SESSION['mobile_disable'] = $_SESSION['mobile_enable'] = false;
    $device=check_device();
    
    if ( $device == 'tablet' && @is_dir ( ROOT_DIR . '/templates/tabletpc' ) ) {
      $config['skin'] = "tabletpc";
      $smartphone_detected = true;
      $config['allow_comments_wysiwyg'] = 0;
      
    }elseif ( $device == 'phone' && @is_dir ( ROOT_DIR . '/templates/mobphone' ) ) {
      $config['skin'] = "mobphone";
      $smartphone_detected = true;
      $config['allow_comments_wysiwyg'] = 0;
    } elseif ( $device == 'smart' && @is_dir ( ROOT_DIR . '/templates/smartphone' ) ) {
      $config['skin'] = "smartphone";
      $smartphone_detected = true;
      $config['allow_comments_wysiwyg'] = 0;
    }
}
// .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>


Установка NEW Version:

Пожалуйста, сделайте резервные копии перед внесением изменений.
Правки будут вноситься всего в 3 файла:

/engine/modules/function.php
/engine/init.php
/engine/classes/templates.class.php

Шаг 1

Создать различные шаблоны для различных устройств
Cтандартный (указанный в админке) - Компьютеры/Ноутбуки/Нетбуки(на WindowsNT)
tabletpc - Планшеты (Android/IOS/WindowsPhone)(втч Galaxy Note) / Нетбуки(Android/WindowsCE)
smartphone - Смартфоны
mobphone - Телефоны на J2ME

Шаг 2

В файл /engine/modules/function.php:

В конце файла, перед:

?>

Вставить:


// MobTPL fix mobiledetect.net
function check_device_std() {
  global $tpl;
  
  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';
    }
  }
  if ( $tpl->tablet ) return 'tablet';
  if ( $tpl->phone ) return 'phone';
  if ( $tpl->smartphone ) return 'smart';
}
// .MobTPL fix mobiledetect.net

Шаг 3

В файле /engine/init.php
Вместо:


if ( ($config['allow_smartphone'] AND !$_SESSION['mobile_disable'] AND $tpl->smartphone) OR $_SESSION['mobile_enable'] ) {
  if ( @is_dir ( ROOT_DIR . '/templates/smartphone' ) ) {
    $config['skin'] = "smartphone";
    $smartphone_detected = true;
    $config['allow_comments_wysiwyg'] = 0;
  }
}

Вставить:


// MobTPL fix mobiledetect.net
if ( $config['allow_smartphone'] ) {
    $smartphone_detected = $_SESSION['mobile_disable'] = $_SESSION['mobile_enable'] = false;
    $device=check_device_std();
    
    if ( $device == 'tablet' && @is_dir ( ROOT_DIR . '/templates/tabletpc' ) ) {
      $config['skin'] = "tabletpc";
      $smartphone_detected = true;
      $config['allow_comments_wysiwyg'] = 0;
      
    }elseif ( $device == 'phone' && @is_dir ( ROOT_DIR . '/templates/mobphone' ) ) {
      $config['skin'] = "mobphone";
      $smartphone_detected = true;
      $config['allow_comments_wysiwyg'] = 0;
    } elseif ( $device == 'smart' && @is_dir ( ROOT_DIR . '/templates/smartphone' ) ) {
      $config['skin'] = "smartphone";
      $smartphone_detected = true;
      $config['allow_comments_wysiwyg'] = 0;
    }
}
// .MobTPL fix mobiledetect.net

Шаг 4

В файле /engine/classes/templates.class.php
Вместо:


if ( $mobile_detect->isMobile() ) {
  $this->smartphone = true;
  $this->desktop = false;
}
if ( $mobile_detect->isTablet() ) {
  $this->smartphone = false;
  $this->desktop = false;
  $this->tablet = true;
}

Вставить:

// MobTPL fix mobiledetect.net
    if ( $mobile_detect->isTablet() ) {
      $this->tablet = true;
    } elseif ( $mobile_detect->isMobile() ) {
      if($mobile_detect->mobileGrade() == 'C') $this->phone = true;
      else $this->smartphone = true; 
    } else $this->desktop = true;
// .MobTPL fix mobiledetect.net

Найти:

var $tablet = false;

После нее вставить:

var $phone = false;

Шаг 5

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


<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>

Хак MobTPL для DLE
модуль бесплатно, установка 500 рублей.
http://tcse-cms.com/instructions/648-hak-mobtpl-dlya-dle.html | Инструкции
Заказать мод

Хак MobTPL для DLE

Версия: 2.0 от 23.09.2014
Страница модуля: http://tcse-cms.com/works/592-mobtpl-hack.html
Автор версии: Антон Антонов
Правообладатель: Виталий Чуяков. (talik@tcse-cms.com)


Имя:*
E-Mail:
  • bowtiesmilelaughingblushsmileyrelaxedsmirk
    heart_eyeskissing_heartkissing_closed_eyesflushedrelievedsatisfiedgrin
    winkstuck_out_tongue_winking_eyestuck_out_tongue_closed_eyesgrinningkissingstuck_out_tonguesleeping
    worriedfrowninganguishedopen_mouthgrimacingconfusedhushed
    expressionlessunamusedsweat_smilesweatdisappointed_relievedwearypensive
    disappointedconfoundedfearfulcold_sweatperseverecrysob
    joyastonishedscreamtired_faceangryragetriumph
    sleepyyummasksunglassesdizzy_faceimpsmiling_imp
    neutral_faceno_mouthinnocent
Введите два слова, показанных на изображении: *


09/08/2017 - Центр физкультурно-оздоровительной работы ОЛИМП

Корпоративный сайт для регионального спортивного клуба. Наша работа в новом жанре - проект в сфере фитнеса и здорового образа жизни....

05/06/2017 - Поиск по складу запчастей - модуль для DLE v3.1.1

Модуль интернет-магазина еще проще, еще легче и еще быстрее. Мы рады представить наш новый продукт - модуль "Поиск по складу" для DLE. Специальный модуль для отображения прайс-листов компании с...

17/04/2017 - WIELTON SPB - сайт по продаже и обслуживанию прицепной техники бренда WELTON

Основной задачей была приведение внешнего вида сайта официального дилера WIELTON в России к фирменному стилю производителя wielton.ru Но с учетом доработок и общего облегчения восприятия информации о...

01/03/2017 - Корпоративный сайт компании ВентСтройПром - услуги по вентиляции и кондиционированию

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

05/12/2016 - most2002.ru - услуги на рынке складской логистики

Редизайн сайта и перенос c устаревшей версии движка internet-cms на актуальную версию DLE - именно такие задачи были решены для сайта most2002.ru. О заказчике: ООО «Компания „МОСТ“» предлагает свои...

16/11/2016 - Редизайн сайта SsangYong для Аларм Комтранс

Плановое обновление дизайна корпоративного сайта согласно фирменному стилю дистрибьютора в РФ. Корейская компания SsangYong Motor Company - признанный специалист по созданию полноприводных...

14/11/2016 - Скрипт просмотра папки php_folder_viewer

Обзор содержимого папки всего одним файлом. Достаточно загрузить файл в нужную папку, например www.site.ru/folder1/ и открыть его адрес в веб-браузере, например www.site.ru/folder1/index.php...

25/10/2016 - Спецтехника JENZ - сайт для официального дилера

Основной задачей была приведение внешнего вида сайта официального дилера JENZ в России к фирменному стилю производителя jenz.de Но с учетом доработок и общего облегчения восприятия информации о...

24/10/2016 - Модуль DLE-convert.xfields

Скрипт конвертации формата дополнительного поля новостей для DataLife Engine тип поля: text в новый тип поля: yesorno...

28/03/2016 - Блог Змея - финансы, инвестиции, волновой анализ

Разработка классического блога на DLE. В процессе работы над проектом применили несколько хаков. Уникальность данного проекта - оптимизация стоимости разработки введу уже готового дизайна со стороны...

comments powered by Disqus