Помощь редирект на шаблон для телефонов

Sunday

Cōgitō ergō sum
Регистрация
13 Дек 2009
Сообщения
825
Реакции
342
Подскажите, как работает механизм, который определяет телефон и редиректит на нужный шаблон. Какие файлы движка здесь задействованы?
 
Через .htaccess перенаправить по юзерагенту телефона на нужный шаблон выглядит примерно вот так:
1) Определяется реф, который конкретной модели телефона
2) Делается в .htaccess переадресания при заходе с этим рефом на страницу примерно таким макаром
Код:
RewriteCond %{HTTP_USER_AGENT} ^.*тут-юзерагент.*$
RewriteRule ^(.*)$ тут-url-переключения-шаблона-для-этого-типа-юзерагента [R=301]
Это если тебе такое перенаправление новое сделать надо. А как там штатно оно переадресовывает я не знаю, скорее всего что то подобное, но на пхп. Можно поискать по содержимому файлов юзерагенты мобильные и найти этот кусок кода. А можно забить и самому сделать по тому принципу, как я выше дал, и не разбираться в чужих тараканах.
 
Ок, посмотрю, что там у них, мне нужно именно на DLE это расковырять.
 
Как уже озвучил lift, в ДЛЕ подобное реализовано на php.
Какие файлы движка здесь задействованы?
functions.php
Для 9.4 строки 1064-1079.
PHP:
function check_smartphone() {
 
    if ( $_SESSION['mobile_enable'] ) return true;
 
    $phone_array = array('iphone', 'android', 'pocket', 'palm', 'windows ce', 'windowsce', '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;
 
}
Сам в свое время искал, когда необходимо было выдрать список признаков, по которым DLE определяет телефон.

Ну а далее в каждом файле отвечающий за вывод, например тот же show.custom, show.full и т.д. DLE уже вырезает то, что не нужно показывать для смартфонов.
PHP:
if ($smartphone_detected) {
 
            if (!$config['allow_smart_format']) {
 
                    $row['short_story'] = strip_tags( $row['short_story'], '<p><br><a>' );
                    $row['full_story'] = strip_tags( $row['full_story'], '<p><br><a>' );
 
            } else {
 
                if ( !$config['allow_smart_images'] ) {
   
                    $row['short_story'] = preg_replace( "#<!--TBegin-->(.+?)<!--TEnd-->#is", "", $row['short_story'] );
                    $row['short_story'] = preg_replace( "#<img(.+?)>#is", "", $row['short_story'] );
                    $row['full_story'] = preg_replace( "#<!--TBegin-->(.+?)<!--TEnd-->#is", "", $row['full_story'] );
                    $row['full_story'] = preg_replace( "#<img(.+?)>#is", "", $row['full_story'] );
   
                }
   
                if ( !$config['allow_smart_video'] ) {
   
                    $row['short_story'] = preg_replace( "#<!--dle_video_begin(.+?)<!--dle_video_end-->#is", "", $row['short_story'] );
                    $row['short_story'] = preg_replace( "#<!--dle_audio_begin(.+?)<!--dle_audio_end-->#is", "", $row['short_story'] );
                    $row['full_story'] = preg_replace( "#<!--dle_video_begin(.+?)<!--dle_video_end-->#is", "", $row['full_story'] );
                    $row['full_story'] = preg_replace( "#<!--dle_audio_begin(.+?)<!--dle_audio_end-->#is", "", $row['full_story'] );
   
                }
 
            }
 
        }
 
В новых версиях целый класс используется для этого.

Кто подскажет, чтобы всё работало, этого достаточно?

PHP:
require_once 'mobiledetect.class.php';

$mobile_detect = new Mobile_Detect;

if ($mobile_detect->isTablet() or $mobile_detect->isMobile()) {

       echo "It's Mobile or Tablet";

     }

PS
Доки, как всегда рулят. Здесь всё понятно: Для просмотра ссылки Войди или Зарегистрируйся
 
Последнее редактирование:
Назад
Сверху