예전에 한번 질문을 드렸던 내용인데 한번 더 여쭈어 봅니다.

일단 해상도와 관련하여 레이아웃 형태를 조금 바꾸어 보려는데 자바스크립트에서 받은 값을 PHP에서 가져오지 못하는(제 개인역량이 부족하여 ajax로 처리하기 등등과 같은 것은 꿈도 못꾸는 상황이라 ㅡ,ㅡ) 것을 jQuery에서 css display 보여주고/감추기로 지금 사용중에 있습니다. 쉬는 며칠이 생겨서 아래와 같이 해 보려는데 불가한지 한번 봐 주십시오.

 

{@
$a = "<script>document.write(screen.width)</script>";
$b = (int)$a;
$c = 777;
문자로 받은 값을 숫자형으로 바로 전환은 절대 안되는 건가요?
}
출력시 {$b} 값이 0 으로 나옵니다.

 

위와 같이 {@ } 내부에 모니터 해상도 값을 구해왔습니다. 그냥 {$a} 출력해 보면 숫자 값이 나오는데

if문 내부에서는 그 숫자가 먹히지가 않습니다. 문자열로 인식해서 그런것인지 정확히는 잘 모르겠습니다.(초보수준이어서요)

 

<!--@if($a<1920)-->
해상도가 낮군요.
<!--@else-->
해상도 좋아요~
<!--@end-->

 

 

데이터형을 숫자형으로 바꾸면 가능할 까 싶어서 위와 같이 (int)를 사용하면 그냥 0으로 처리가 됩니다.

{@ } 내부에서 $c 와 같이 그냥 숫자를 입력한 저 변수를 가지고 if문을 걸면 적용이 되네요.

 

이렇게 여쭙는 이유는 제가 최근 게시물 위젯 같은 것으로 화면을 구성할 때 해상도 별로 글자 수를 다르게 적용하고 싶어서 그렇습니다. 설명이 참 거렁뱅이 같은데 찰떡같이 잘 이해해 주시리라 믿구요~  새해 복 많이 받으십시오~ 

  • profile

    문법 문제가 아닙니다. 자바스크립트에서 구한 값을 PHP에서 참조할 수 없다는 것은 과거로 되돌아갈 수 없다는 것만큼이나 근본적인 제한입니다. 코드를 저렇게 섞어 쓴다고 우회할 수 있는 것이 아닙니다.

     

    PHP가 실행되는 시점에 $a에는 숫자가 들어 있지 않습니다. <script>document.write 어쩌고 하는 문자열이 들어 있을 뿐입니다. PHP 실행이 모두 끝나고 페이지가 사용자에게 전송되어서 자바스크립트 실행이 시작된 후에야 그 문자열이 해석되어서 모니터 해상도가 나옵니다. 그 과정이 워낙 빨리 이루어지기 때문에 화면상에는 그냥 해상도가 나오는 것으로 보이겠지만, 저 코드가 해석되지 않은 채 남아 있는 타이밍이 분명히 있습니다. PHP뿐 아니라 서버단에서 실행되는 모든 언어가 마찬가지입니다. 세상의 다른 모든 언어가 실행을 마친 후에야 자바스크립트 실행이 시작됩니다.

     

    이 한계를 극복하기 위해 자바스크립트에서 다시 PHP를 호출하는 ajax 기법을 사용하는 것인데, 그것까지 쓰기에는 너무 복잡하고... 단지 화면 폭에 따라 다른 내용을 보여주거나 내용을 보여주는 형식을 조금 바꾸려는 것 뿐이라면 PHP도 자바스크립트도 아닌 CSS를 사용해 보시기 바랍니다. media query, overflow: hidden, text-overflow 등을 검색해 보세요.

  • profile profile
    아 그러네요.

    $b = (int)$a;

    이게 a에 그냥 자바스크립트문자열만 있네요

    전 저기가 다른 숫자로된 문자열이 있는줄알았네요.

    보통 저런식의 반응형을 위해서라면 css @media 관련 항목을 많이 쓰니까 그걸로 구현하는게 더 낫죠 ㅎㅎ
  • profile ?
    답변 감사드립니다. 덕분에 마음의 결정을 하게 되었습니다. 라이믹스 2.0 업데이트 하신다고 수고가 많으셨습니다.
  • profile ?
    옙. 감사합니다. XE타운 지킴이 분들께서 답을 주시니 늘 든든합니다. 타임라인모듈 호평이 들려 곧 구매하러 가겠습니다~