Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Mobiili: Sivun "Täysversio" kekseillä

Sivun loppuun

tiituus [26.10.2013 10:45:39]

#

Moro!!
Olisko kenelläkään valmista skriptiä/neuvoja suomeksi, kuinka tehdä ns. Full site nappi mobiilisivuille, käytän mobiledetect.nettiä

Quirzo [26.10.2013 12:02:30]

#

Onko kyseessä siis tämä? En tunne sitä mutta ilmeisesti tarkistat jollain isMobile() -funktiolle että ohjataanko mobiilisivulle?

Jos näin on, niin voithan tehdä keksin vaikka nimeltä "naytaKokoSivu" joka asetetaan kun painaa Full site -nappia ja tarkistaa isMobilen kanssa että onko keksi olemassa.

<?php
//Kokoversion näyttäminen: tämäsivu.php?fullsite=1
require_once 'Mobile_Detect.php';

$detect = new Mobile_Detect;
$isMobile = $detect->isMobile();

//Full site nappia painettu?
if($_GET['fullsite'] == "1"){
	setcookie("naytaKokoSivu", "true", time()+3600);
}

if($isMobile == true && isset($_COOKIE['naytaKokoSivu']) == false){
	//Mobiilisivulle
}else{
	//Täysiversio
}
?>

Metabolix [26.10.2013 12:24:54]

#

Quirzon esimerkissä on virhe: setcookie ei aseta evästettä saman sivunlatauksen $_COOKIE-taulukkoon, joten tuossa ensimmäisellä klikkauksella mennään edelleen mobiiliversioon. Ehkä muutenkin kannattaisi tehdä täysversionapille erillinen käsittelysivu, josta olisi uudelleenohjaus takaisin oikeaan kohtaan sivustolla, ettei selaimen osoitteeseen jää turhaan tuota parametria ?fullsite=1.

Quirzo [26.10.2013 12:42:15]

#

Jees aivan, eipä tullut tuo mieleen kun sessioiden kanssa lähinnä touhunnut. Elikkä ehkä hyvä ratkaisu olisi joku "taysiversioon.php" jossa keksi asetetaan ja sitten ohjataan takaisin tuolle sivulle.

tiituus [26.10.2013 22:24:04]

#

Tein pienen keksin, joka disabloi mobiledetectin tunniksi, ja sen jalkeen taas enablettaa, Eli simppelein koodi ikina.

Minh Truong [14.11.2013 17:40:47]

#

<?php
if( isset($_GET['mobiili']) || isset($_COOKIE['mobiili']) ){
//Mobiilisivulle, jos eväste löytyy
setcookie("mobiili", "true", time()+3600);
include 'mobile.php';
} else {
//Jos ei löytynyt evästeistä, kysy javascriptinä "Haluatko siirtyä mobiilisivulle?"
echo("
<script>
window.mobilecheck = function(){
var check = false;
(function(a){if(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i.test(a)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(a.substr(0,4)))check = true})(navigator.userAgent||navigator.vendor||window.opera);
return check;
}
function getCookie(c_name){
var c_value = document.cookie;
var c_start = c_value.indexOf(\" \" + c_name + \"=\");
if (c_start == -1){
c_start = c_value.indexOf(c_name + \"=\");
}
if (c_start == -1){
c_value = null;
} else {
c_start = c_value.indexOf(\"=\", c_start) + 1;
var c_end = c_value.indexOf(\";\", c_start);
if (c_end == -1){
c_end = c_value.length;
}
c_value = unescape(c_value.substring(c_start,c_end));
}
return c_value;
}
if( window.mobilecheck() && getCookie(\"mobiili\") == null ){
if( confirm(\"Käytät mobiililaitetta. Haluatko siirtyä mobiili sivulle?\") ){
window.location.assign(\"http://palvelin.fi/index.php?mobiili\");
}
}
</script>
</head>");
//Jos ei mobiililaite (ei tunnistettu scriptinä tai evästeistä
include 'home.php';
}
?>

Toiminta:

Jos PHP scripti löytää "mobiili" evästeen, ohjaa mobile.php tiedostoon. Muuten Javascript tarkistaa onko mobiililaite tai selain, jos on, näyttää viestin "Käytät mobiililaitetta. Haluatko siirtyä mobiiliversioon?". Jos ei evästettä tai ei ole mobiiliselain, näyttää home.php tiedoston.

include 'mobile.php'; ja 'home.php'; voi korvata myös header () funktiolla (uudelleenohjaus).

Mobiilisivun "Täysversio" painike tehdään Javascriptinä tuhoa eväste. Kun eväste tuhottu, sivusto kysyy uudelleen.

The Alchemist [14.11.2013 20:23:19]

#

Oletko sinä koskaan kuullut koodin sisentämisestä? Plaintextin echottelu on muutenkin todella huono käytäntö. Näkeehän tuosta väristäkin: punainen tarkoittaa virhettä.

Minh Truong [14.11.2013 21:28:21]

#

Pahoittelen etten ole sisentänyt koodia... Toimivuudessa ei ongelmia, mutta ymmärrän virheet, joita koodissa on.

Metabolix [14.11.2013 21:52:16]

#

Sisennyksen ja pitkän echon lisäksi koodissa on ainakin kaksi aivan konkreettista ongelmaa: HTML-koodista ei tule millään validia, ja tuollainen include on kaikin puolin huono tapa ”vaihtaa” sivua.

Minh Truong kirjoitti:

Toimivuudessa ei ongelmia, mutta ymmärrän virheet, joita koodissa on.

Mielestäni olisi silloin viisainta joko korjata virheet tai jättää koodi lähettämättä.

The Alchemist [14.11.2013 22:30:09]

#

Tuossa esimerkissä palvelinpäässä tehtävä tarkistus on muutenkin aivan turhaa purkkaa. Mikä hyöty siitä on, kun kuitenkin tarkistus tehdään myös selaimessa? Esimerkiksi Maikkarin sivuilla käyttäjältä ei kysytä mitään vaan hänet ohjataan suoraan mobiilipuolelle, joten sellaisessa ratkaisussa voidaan taas käyttää pelkästään palvelimen puolella tehtävää tarkistusta.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta