В php не выводить кусок кода, если экран юзера = моб, как?

1 234
P
На сайте с 06.01.2009
Offline
556
#21
shurik0:
Всё наоборот:

Сначала грузится урезанный код, а потом, если если это не моб, подгружается дополнительный блок. Без перезагрузки страницы.

Расскажите, пож-та, как же средствами js/ajax определить десктоп или мобила и не перезагружать страницу для вывода доп информации?

ps повторюсь, при всем при этом роботу нужно отдавать весь код.

webiumpro
На сайте с 20.03.2017
Offline
38
#22
postavkin:
Расскажите, пож-та, как же средствами js/ajax определить десктоп или мобила и не перезагружать страницу для вывода доп информации?

После загрузки страницы получаете в js ширину экрана и юзерагент (для определения бота). Если это бот или ширина декстопная, то делать ajax-запрос и подгружать нужный кусок кода в нужное место, если мобила и обычный юзер, то ничего не делать. Если у вас в этом куске кода html без php, то даже запрос на сервер делать не надо, просто html-файл подгружать (через .load() например)

Копирование лендингов. Разработка на фреймворке сервисов. Создание сайтов (/ru/forum/994418)
P
На сайте с 06.01.2009
Offline
556
#23
webiumpro:
После загрузки страницы получаете в js ширину экрана и юзерагент (для определения бота). Если это бот или ширина декстопная, то делать ajax-запрос и подгружать нужный кусок кода в нужное место, если мобила и обычный юзер, то ничего не делать. Если у вас в этом куске кода html без php, то даже запрос на сервер делать не надо, просто html-файл подгружать (через .load() например)

а как же это

ps повторюсь, при всем при этом роботу нужно отдавать весь код.

Решил не заморачиваться, все это милисекунды загрузки...

SV
На сайте с 03.11.2008
Offline
1394
#24
postavkin:
а как же это

Тут или крестик снять или трусы одеть.

А роботы бывают разные. Даже роботы ПС разные. Одни проверяют обычные версии, а другие - "мобильные". Но и те и другие смотрят насколько соответствующему юзеру будет удобно. Но никто не смотрит "код сайта" (если речь не про html) - смотрят контент и "юзабильность".

Делаю хорошие сайты хорошим людям. Предпочтение коммерческим направлениям. Топики помощи с ⓌordPress (https://searchengines.guru/ru/forum/1032910 ) и основы безопасности сайтов ( https://searchengines.guru/ru/forum/774117 ). *** Помощь\консультации в топиках форума - БЕСПЛАТНО. Платные услуги ( https://wp.me/P3YHjQ-3 ) - с бюджетом от 150$ ***
M
На сайте с 04.10.2011
Offline
90
#25

SeVlad, была бы четкая увернность, что ПС "видят" js/ajax, а не "размытые" намёки о всемогущих ботах которые ВСЁ "увидят" ))) Двигался бы СЕОшный контингет спокойней... А так - маемо шо маемо )) СЕОшники хотят 100% гарантии видимости контента, ПС юлят и не дают 100% гарантии, но... ТРЕБУЮТ мобайл юзабилити... пилите ... ))))

Сдается, обращаться скайп avdesk-it-kmm Верстка, кодинг - контакты в профиле... VPS от 5€ (https://gmhost.com.ua/?partner=10255)
SV
На сайте с 03.11.2008
Offline
1394
#26
mmkulikov:
была бы четкая увернность, что ПС "видят" js/ajax, а не "размытые" намёки о всемогущих ботах которые ВСЁ "увидят"

Совершено согласен. Но как показывает практика, если "без излишеств", то всё ОК.

Но это всё же несколько другая история, чем "не грузить моб. юзеру огромный кусок кода". Да и как правило этот "огромный кусок" и десктопному может не сильно-то и нужен :)

mmkulikov:
но... ТРЕБУЮТ мобайл юзабилити... пилите ...

И норм. Нафик тот аякс - в большинстве случаев только ресурсы браузера/девайса жрать гаразды :)

P
На сайте с 06.01.2009
Offline
556
#27
SeVlad:
Тут или крестик снять или трусы одеть.

А роботы бывают разные. Даже роботы ПС разные. Одни проверяют обычные версии, а другие - "мобильные". Но и те и другие смотрят насколько соответствующему юзеру будет удобно. Но никто не смотрит "код сайта" (если речь не про html) - смотрят контент и "юзабильность".

Я говорю как раз про "исходный код страницы".

---------- Добавлено 20.09.2018 в 15:28 ----------

SeVlad:
Но это всё же несколько другая история, чем "не грузить моб. юзеру огромный кусок кода". Да и как правило этот "огромный кусок" и десктопному может не сильно-то и нужен :)

Нужен. Алфавит производителей, карусель интерьеров для товаров и т.д. Десктопу с нормальным каналом оно удобно, наглядно, красиво. А вот мобильному юзеру я бы это отрезал. А так, например, алфавит прячется средствами css, и в идеале было бы не прятать, а просто не выводить мобильнику.

P
На сайте с 08.02.2016
Offline
23
#28
postavkin:

Решил не заморачиваться, все это милисекунды загрузки...

Персональный менеджер из команды Яндекс.Директ как-то ответил мне на вопрос об отказах с мобильных, что скрипт счётчика на этих устройствах не всегда нормально прогружается. Хотя, казалось бы, код асинхронный, проблем быть не должно. Отчасти поэтому и видим пугающую статистику для смартфонов. Так что лучше по максимуму сократить объём информации, загружаемый пользователем. Что касается скриптов, долгое время пользовался таким.

function is_mobile_browser() {

$user_agent=strtolower(getenv('HTTP_USER_AGENT'));
$accept=strtolower(getenv('HTTP_ACCEPT'));

if ((strpos($accept,'text/vnd.wap.wml')!==false) ||
(strpos($accept,'application/vnd.wap.xhtml+xml')!==false)) {
// return 1; // Мобильный браузер обнаружен по HTTP-заголовкам
return true;
}

if (isset($_SERVER['HTTP_X_WAP_PROFILE']) ||
isset($_SERVER['HTTP_PROFILE'])) {
// return 2; // Мобильный браузер обнаружен по установкам сервера
return true;
}

if (preg_match('/(mini 9.5|vx1000|lge |m800|e860|u940|ux840|compal|'.
'wireless| mobi|ahong|lg380|lgku|lgu900|lg210|lg47|lg920|lg840|'.
'lg370|sam-r|mg50|s55|g83|t66|vx400|mk99|d615|d763|el370|sl900|'.
'mp500|samu3|samu4|vx10|xda_|samu5|samu6|samu7|samu9|a615|b832|'.
'm881|s920|n210|s700|c-810|_h797|mob-x|sk16d|848b|mowser|s580|'.
'r800|471x|v120|rim8|c500foma:|160x|x160|480x|x640|t503|w839|'.
'i250|sprint|w398samr810|m5252|c7100|mt126|x225|s5330|s820|'.
'htil-g1|fly v71|s302|-x113|novarra|k610i|-three|8325rc|8352rc|'.
'sanyo|vx54|c888|nx250|n120|mtk |c5588|s710|t880|c5005|i;458x|'.
'p404i|s210|c5100|teleca|s940|c500|s590|foma|samsu|vx8|vx9|a1000|'.
'_mms|myx|a700|gu1100|bc831|e300|ems100|me701|me702m-three|sd588|'.
's800|8325rc|ac831|mw200|brew |d88|htc\/|htc_touch|355x|m50|km100|'.
'd736|p-9521|telco|sl74|ktouch|m4u\/|me702|8325rc|kddi|phone|lg |'.
'sonyericsson|samsung|240x|x320vx10|nokia|sony cmd|motorola|'.
'up.browser|up.link|mmp|symbian|smartphone|midp|wap|vodafone|o2|'.
'pocket|kindle|mobile|psp|treo|android|iphone|ipod|webos|wp7|wp8|'.
'fennec|blackberry|htc_|opera m|windowsphone)/', $user_agent)) {
// return 3; // Мобильный браузер обнаружен по сигнатуре User Agent
return true;
}

if (in_array(substr($user_agent,0,4),
Array("1207", "3gso", "4thp", "501i", "502i", "503i", "504i", "505i", "506i",
"6310", "6590", "770s", "802s", "a wa", "abac", "acer", "acoo", "acs-",
"aiko", "airn", "alav", "alca", "alco", "amoi", "anex", "anny", "anyw",
"aptu", "arch", "argo", "aste", "asus", "attw", "au-m", "audi", "aur ",
"aus ", "avan", "beck", "bell", "benq", "bilb", "bird", "blac", "blaz",
"brew", "brvw", "bumb", "bw-n", "bw-u", "c55/", "capi", "ccwa", "cdm-",
"cell", "chtm", "cldc", "cmd-", "cond", "craw", "dait", "dall", "dang",
"dbte", "dc-s", "devi", "dica", "dmob", "doco", "dopo", "ds-d", "ds12",
"el49", "elai", "eml2", "emul", "eric", "erk0", "esl8", "ez40", "ez60",
"ez70", "ezos", "ezwa", "ezze", "fake", "fetc", "fly-", "fly_", "g-mo",
"g1 u", "g560", "gene", "gf-5", "go.w", "good", "grad", "grun", "haie",
"hcit", "hd-m", "hd-p", "hd-t", "hei-", "hiba", "hipt", "hita", "hp i",
"hpip", "hs-c", "htc ", "htc-", "htc_", "htca", "htcg", "htcp", "htcs",
"htct", "http", "huaw", "hutc", "i-20", "i-go", "i-ma", "i230", "iac",
"iac-", "iac/", "ibro", "idea", "ig01", "ikom", "im1k", "inno", "ipaq",
"iris", "jata", "java", "jbro", "jemu", "jigs", "kddi", "keji", "kgt",
"kgt/", "klon", "kpt ", "kwc-", "kyoc", "kyok", "leno", "lexi", "lg g",
"lg-a", "lg-b", "lg-c", "lg-d", "lg-f", "lg-g", "lg-k", "lg-l", "lg-m",
"lg-o", "lg-p", "lg-s", "lg-t", "lg-u", "lg-w", "lg/k", "lg/l", "lg/u",
"lg50", "lg54", "lge-", "lge/", "libw", "lynx", "m-cr", "m1-w", "m3ga",
"m50/", "mate", "maui", "maxo", "mc01", "mc21", "mcca", "medi", "merc",
"meri", "midp", "mio8", "mioa", "mits", "mmef", "mo01", "mo02", "mobi",
"mode", "modo", "mot ", "mot-", "moto", "motv", "mozz", "mt50", "mtp1",
"mtv ", "mwbp", "mywa", "n100", "n101", "n102", "n202", "n203", "n300",
"n302", "n500", "n502", "n505", "n700", "n701", "n710", "nec-", "nem-",
"neon", "netf", "newg", "newt", "nok6", "noki", "nzph", "o2 x", "o2-x",
"o2im", "opti", "opwv", "oran", "owg1", "p800", "palm", "pana", "pand",
"pant", "pdxg", "pg-1", "pg-2", "pg-3", "pg-6", "pg-8", "pg-c", "pg13",
"phil", "pire", "play", "pluc", "pn-2", "pock", "port", "pose", "prox",
"psio", "pt-g", "qa-a", "qc-2", "qc-3", "qc-5", "qc-7", "qc07", "qc12",
"qc21", "qc32", "qc60", "qci-", "qtek", "qwap", "r380", "r600", "raks",
"rim9", "rove", "rozo", "s55/", "sage", "sama", "samm", "sams", "sany",
"sava", "sc01", "sch-", "scoo", "scp-", "sdk/", "se47", "sec-", "sec0",
"sec1", "semc", "send", "seri", "sgh-", "shar", "sie-", "siem", "sk-0",
"sl45", "slid", "smal", "smar", "smb3", "smit", "smt5", "soft", "sony",
"sp01", "sph-", "spv ", "spv-", "sy01", "symb", "t-mo", "t218", "t250",
"t600", "t610", "t618", "tagt", "talk", "tcl-", "tdg-", "teli", "telm",
"tim-", "topl", "tosh", "treo", "ts70", "tsm-", "tsm3", "tsm5", "tx-9",
"up.b", "upg1", "upsi", "utst", "v400", "v750", "veri", "virg", "vite",
"vk-v", "vk40", "vk50", "vk52", "vk53", "vm40", "voda", "vulc", "vx52",
"vx53", "vx60", "vx61", "vx70", "vx80", "vx81", "vx83", "vx85", "vx98",
"w3c ", "w3c-", "wap-", "wapa", "wapi", "wapj", "wapm", "wapp", "wapr",
"waps", "wapt", "wapu", "wapv", "wapy", "webc", "whit", "wig ", "winc",
"winw", "wmlb", "wonu", "x700", "xda-", "xda2", "xdag", "yas-", "your",
"zeto", "zte-"))) {
// return 4; // Мобильный браузер обнаружен по сигнатуре User Agent
return true;
}

return false; // Мобильный браузер не обнаружен
}

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

SV
На сайте с 03.11.2008
Offline
1394
#29
postavkin:
Я говорю как раз про "исходный код страницы".

В таком случае вариантов больше - дестктопном юзеру можно и аяксом догружать что-то и сразу на сервере/php определять девайс.

Но такие мелочи как напр, текстовое меню допустимо и прятать на мобилах средствами css.

Кури в общем подход к проектированию Mobile first.

postavkin:
Десктопу с нормальным каналом оно удобно

Ты, как и многие другие, к сож. не понимают, что "десктоп" и "широкий канал" вещи совершено не зависимые.

Я напр. прямо сейчас сейчас на десткопе, но на моб интернете (ограниченном как скоростью, так и др лимитами). Но могу и на планшете использовать широкий канал с быстрым безлимитным интернетом.

Но к сож на сегодня достаточно трудно (стандартными средствами) определить именно "ширину" и скорость канала, поэтому используют подход определения устройства. Что я считаю в целом не всегда неправильным, но тк альтернатив особо нет, то.. то и десктопому юзеру не нужно грузить всякую срань без явного его заказа (напр, за видео в гифках отрывал бы руки.. по самые уши ;) )

webiumpro
На сайте с 20.03.2017
Offline
38
#30

Просто подключите mobiledetect и не парьтесь. Да, она работает не идеально, но в общих случаях отрабатывает нормально. Подключается и используется очень просто:


require_once 'Mobile_Detect.php';
$detect = new Mobile_Detect;

if ( !$detect->isMobile() ) {
//ваш код
}

А вот такую функцию можно использовать для определения бота:


function isBot(){
$bots = array(
'rambler','googlebot','aport','yahoo','msnbot','turtle','mail.ru','omsktele',
'yetibot','picsearch','sape.bot','sape_context','gigabot','snapbot','alexa.com',
'megadownload.net','askpeter.info','igde.ru','ask.com','qwartabot','yanga.co.uk',
'scoutjet','similarpages','oozbot','shrinktheweb.com','aboutusbot','followsite.com',
'dataparksearch','google-sitemaps','appEngine-google','feedfetcher-google',
'liveinternet.ru','xml-sitemaps.com','agama','metadatalabs.com','h1.hrn.ru',
'googlealert.com','seo-rus.com','yaDirectBot','yandeG','yandex',
'yandexSomething','Copyscape.com','AdsBot-Google','domaintools.com',
'Nigma.ru','bing.com','dotnetdotcom'
);
foreach($bots as $bot)
if(stripos($_SERVER['HTTP_USER_AGENT'], $bot) !== false){
return true;
}
return false;
}

Опять же, возможно, будут исключения, но в общих случаях ботов отличать будет.

И то, и другое использовал во многих проектах, полет нормальный.

1 234

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий