Въпрос за разпознаване на резолюция

StefanIvanov

New Member
Здравейте! Трябва да детектна резолюцията и да мога да правя промени в php. Ясно ми е, че с php това не може да стане и затова ползвам javascript, но нещо не се получава.

Опитвам с този код:

$width = "<script>document.write(window.outerWidth); </script>";
if ($width > 768 ){
$type = 'one';
}else{
$type = 'two';
}

Интересното е, че не иска да работи. Самият javascript си взима резолюцията на браузъра и работи много добре. Първоначално $width е string, но опитах да го направя на integer с функцията settype($width, "integer"). След това, при проверка на $width се вижда, че е integer, но не иска да работи и това е. Дори при опитите ми с echo $width+10 ми изписва само 10. Явно това width php не иска да го разпознае, въпреки, че уж го води integer. Много ми е странно това, вероятно става някакъв конфликт между js и php.

Знаете ли къде бъркам или ако въобще не става по този начин, как да го направя това нещо. Единствената ми цел е php да знае каква е резолюцията на браузъра в широчина.
 
От: Въпрос за разпознаване на резолюция

Сега видях къде ми е проблема. След конвертирането в int стойността става 0. Явно затова не ми сработва кода. Дали има начин да се запази стойността при конвертирането?
 
От: Въпрос за разпознаване на резолюция

Не разбирам почти нищо от javascript и css - от там идва проблема. Не виждам как с css да укажа на php, че резолюцията е еди колко си. В началото си помислих, че ще е нещо елементарно, а то се оказа страшно чудо, с което се мъча вече няколко часа.
 
От: Въпрос за разпознаване на резолюция

Не разбирам почти нищо от javascript и css - от там идва проблема. Не виждам как с css да укажа на php, че резолюцията е еди колко си. В началото си помислих, че ще е нещо елементарно, а то се оказа страшно чудо, с което се мъча вече няколко часа.

Това, че не си запознат с тези технологии си е само твой проблем.

Готови примери с бисквитки, GET и POST колкото щеш: http://lmgtfy.com/?q=how+to+detect+screen+resolution+using+php
 
От: Въпрос за разпознаване на резолюция

ОК, то е ясно че няма да мога да го направя, зарязах го, ще му мисля друг вариант. Интересно ми е чисто технологично, защо този string от javascript не може да се превърне в integer на PHP? Каква е причината за това?
 
От: Въпрос за разпознаване на резолюция

Причината е че JS се изпълнява на клиента, а PHP на сървъра. Общо взето твоя скрипт не изпълнява js-a в стринга, а стринга с JS скрипта се каства към int и за това ти връща 0 или 0 + 10.
 
От: Въпрос за разпознаване на резолюция

Причината е че JS се изпълнява на клиента, а PHP на сървъра. Общо взето твоя скрипт не изпълнява js-a в стринга, а стринга с JS скрипта се каства към int и за това ти връща 0 или 0 + 10.

Да, навярно е така. Иначе като дам с php echo и се изобразява стойността, но явно самото php не може да я разчете.
 
От: Въпрос за разпознаване на резолюция

Здравейте! Трябва да детектна резолюцията и да мога да правя промени в php. Ясно ми е, че с php това не може да стане и затова ползвам javascript, но нещо не се получава.

Опитвам с този код:

$width = "<script>document.write(window.outerWidth); </script>";
if ($width > 768 ){
$type = 'one';
}else{
$type = 'two';
}

Интересното е, че не иска да работи. Самият javascript си взима резолюцията на браузъра и работи много добре. Първоначално $width е string, но опитах да го направя на integer с функцията settype($width, "integer"). След това, при проверка на $width се вижда, че е integer, но не иска да работи и това е. Дори при опитите ми с echo $width+10 ми изписва само 10. Явно това width php не иска да го разпознае, въпреки, че уж го води integer. Много ми е странно това, вероятно става някакъв конфликт между js и php.

Знаете ли къде бъркам или ако въобще не става по този начин, как да го направя това нещо. Единствената ми цел е php да знае каква е резолюцията на браузъра в широчина.

$(document).ready(function(){
var printh = $(window).outerWidth();

if(printh > '768'){
alert('1');
} else {
alert('2');
}
});
 
От: Въпрос за разпознаване на резолюция

Да, навярно е така. Иначе като дам с php echo и се изобразява стойността, но явно самото php не може да я разчете.

Както вече казаха, JS се отнася за клиента, PHP работи на сървъра. JS и PHP са абсолютно различни неща и едното си работи вътре в браузъра, докато другото е на километри разстояние и е инсталирано на сървъра. Точно защото JS работи в браузъра, има и достъп до размери на елементи и т.н., докато PHP грам не се интересува от това какъв е браузъра.

Основната цел на PHP във всеки сайт е да генерира изходен HTML код. PHP не разбира още и от HTML, както и от CSS, просто това са други светове за които не е чувал. За PHP тия неща - HTML, JS, CSS са 100% текст и нищо повече. PHP ги генерира, изпраща ги на браузъра на който ги е поискал (през Apache) и забравя за случая.

Връзката между браузър и сървър става само през заявки като POST или GET, а има и други типове заявки (PUT, DELETE...). Най-общо, за да получи нещо от сървъра, браузъра трябва да изпрати заявка към него и да го попита какво точно иска. Към заявката може да са прикачени данни. Даже когато горе напишеш адрес на сайт в браузъра, това се превръща в съвсем натурална GET заявка. Другия вариант е заявките да се пращат зад кулисите по модела AJAX, тогава те пак са GET, POST и т.н, само че се случват "тайно" докато страницата е отворена.

Това дето се опитваш да четеш с PHP в първия пост си е 100% стринг за него, освен това в момента на "чете" въпросния стринг дори не е достигнал до браузъра. И пак да обобщи:

- Искаш да видиш сайт => ползваш браузър => браузъра изпраща GET заявка към сървър => Сървъра използва Apache и PHP за да разберат какво се иска от тях => PHP използва кода в .php файлове за да вземе данни от някъде и да сглоби изходен HTML/JS/CSS код (но за PHP остава чист текст без смисъл в него) => който код се връща към браузъра по мрежата => браузъра го разчита и визуализира
 
От: Въпрос за разпознаване на резолюция

Благодаря за изчерпателната информация. По принцип ги знаех тези неща, че JS се изпълнява в браузъра, а PHP работи на сървъра, но не знаех защо не сработва, понеже php го визуализира и си викам, защо не го превръща в integer, след като го знае колко е. Сега ми стана по-ясно.
 

Горе