Właśnie skończyłem prace nad jednym z modułów projektu, nad którym pracuję, a w którym to module ważna jest funkcja „wyłapywania” urządzeń mobilnych (głównie telefony, tablety z racji większego ekranu nie były już tak istotne). Operację taką w PHP można wykonać choćby za pomocą funkcji preg_match(), która może wyłapywać – po słowach kluczowych w nagłówku HTTP_USER_AGENT – przeglądarkę/system, i na bazie spróbować rozpoznać, czy mamy do czynienia z urządzeniem mobilnym. Jest to dość skuteczna metoda, tyle tylko, że wymaga ciągłego śledzenia „rynku przeglądarek mobilnych”, co w tym przypadku nie wchodzi(ło) w grę. Dlatego postanowiłem skorzystać z gotowca. A właściwie, to 2 gotowców…
Spis treści w artykule
Wykrywanie urządzeń mobilnych w PHP
Bibliotek pozwalających z poziomu PHP (spróbować) wykryć, czy mamy do czynienia z urządzeniem mobilnym jest przynajmniej kilka, ja zdecydowałem się na Mobile Detect (Serban Ghiţă), bo już kiedyś z niej korzystałem, i wiem, że sprawdza się całkiem nieźle, a do tego jest dość regularnie aktualizowana (co ważne, bo opiera się m.in. na funkcji preg_match()).
Wystarczy pobrać z GitHuba kod i dołączyć go do swojego projektu, dodając do pliku PHP taki kod:
require_once '/ścieżka-do-plików/mobile-detect/Mobile_Detect.php';
$detect = new Mobile_Detect;
W tym momencie możemy w prosty sposób sprawdzić, czy mamy do czynienia z urządzeniem mobilnym i wykonać (lub nie) odpowiedni kod:
if ( $detect->isMobile() ) {
// Kod do wykonania, gdy jest to urządzenie mobilne
} else {
// Kod do wykonania, gdy nie jest to urządzenie mobilne
}
Możemy też sprawdzać, czy mamy do czynienia z tabletem:
if ( $detect->isTablet() ) {
// Kod do wykonania, gdy jest to tablet
} else {
// Kod do wykonania, gdy nie jest to tablet
}
W przypadku, gdy chcemy nasze działania zawęzić tylko do telefonów, wykluczając tablety, musimy najpierw wykryć, czy mamy do czynienia z urządzeniem mobilnym, i jeśli tak, to czy nie jest to tablet (tak autor skryptu/biblioteki to sobie wymyślił):
if ( $detect->isMobile() && !$detect->isTablet() ) {
// Kod do wykonania, gdy jest to telefon
} else {
// Kod do wykonania, gdy nie jest to telefon
}
Można też wszystko połączyć np. w taki kod:
if ( $detect->isMobile() ) {
// Kod do wykonania, gdy jest to dowolne urządzenie mobilne
} elseif ( $detect->isTablet() ) {
// Kod do wykonania, gdy jest to tablet
} elseif ( $detect->isMobile() && !$detect->isTablet() ) {
// Kod do wykonania, gdy jest to telefon
} else {
// Kod do wykonania, gdy nie jest to urządzenie mobilne
}
Jak widać, korzystanie z biblioteki jest proste, i z doświadczenia wiem, że dość skuteczne, choć oczywiście może się zdarzyć, że jakieś bardziej egzotyczne urządzenie z jakąś egzotyczną przeglądarką (lub taką, co przesyła „niepoprawny” nagłówek) się prześliźnie. Biblioteka umożliwia też wykrywanie konkretnych urządzeń, przeglądarek, czy systemów operacyjnych, ale z tym odsyłam już do dokumentacji i podanych tam przykładów…
Wykrywanie urządzeń mobilnych w WordPressie
W otwierającym ten poradnik akapicie wspomniałem, że zdecydowałem się skorzystać z 2 gotowców. Pierwszym jest opisana powyżej biblioteka (klasa) Mobile Detect. Drugim gotowcem jest sam WordPress, który posiada wbudowaną funkcję wp_is_mobile(), dzięki której można (spróbować) wykryć, że mamy do czynienia z urządzeniem mobilnym (telefon lub tablet):
if ( wp_is_mobile() ) {
// Kod do wykonania, gdy jest to urządzenie mobilne
} else {
// Kod do wykonania, gdy nie jest to urządzenie mobilne
}
Nie jest to może rozwiązanie tak rozbudowane jak Mobile Detect, ale w wielu zastosowaniach powinno być wystarczające, i co najwazniejsze – wbudowane w WordPressa, a więc nie wymaga instalacji żadnych dodatkowych wtyczek (choć takowe oczywiście też są).
- Wakacje składkowe ZUS a zawieszenie działalności gospodarczej, czyli uważaj, bo być może nie będziesz mógł skorzystać (w 2024) - 1970-01-01
- Przykładowy kalkulator wyceny usługi druku 3D, czyli nie tylko materiał się liczy - 1970-01-01
- Home Assistant 2024.10, czyli nowa karta „nagłówek” i niedziałający TTS w ramach usługi Google Cloud - 1970-01-01