2013-09-03 5 views
1

내 사이트가 시작될 때 고해상도 기기에서 사이트를 볼 수 있는지 감지하는 간단한 js 스크립트가 있습니다. 그러면 값을 쿠키에 저장합니다.Twig의 쿠키에서 부울

{% if app.request.cookies.has('d_p_r') %} 
    {% set retina = app.request.cookies.get('d_p_r') %} 
{% else %} 
    {% set retina = false %} 
    <script> ... </script> 
{% endif %} 

이 내 망막 값이 출력 설정되어 있는지 확인 {{망막}} 어딘가에 내 사이트, 그리고 내 아이 패드에 내 컴퓨터에 '거짓'과 '진실'을 반환합니다. 여태까지는 그런대로 잘됐다.

부울 값에 액세스하려고하면 문제가 발생합니다.

{% if retina == true %} 
    <img alt="{{ alt }}" src="{{ ('img/' ~ img)|imagine_filter(filter) }}"> 
{% else %} 
    {% if big is defined %} 
    <img alt="{{ alt }}" src="{{ asset('img/' ~ img) }}"> 
    {% else %} 
    <img alt="{{ alt }}" src="{{ ('img/' ~ img)|imagine_filter(filter ~ '@2x') }}"> 
    {% endif %} 
{% endif %} 

{% if retina == true %}가 올바르게 작동하지 않습니다. 이를 == false로 변경하면 모든 곳에 망막 사진이 생성됩니다. false를 반환하는 {{retina}} 값에도 불구하고 항상 true를 반환하는 것처럼 보입니다.

나는 여기서 무엇을 잘못하고 있는지 전혀 모른다. 나는 {% if retina %}를 시도했지만 도움이되지 못했습니다. 이 문제를 해결하기위한 모든 시도 사이에서 캐시를 삭제했습니다.

+0

당신에게 확실 app.request.cookies.get ('d_p_r')'반환'의 부울 (true)를'? '{{덤프 (망막)}}'시도해 주시겠습니까? '%% retina is not empty %}'시도해 볼 수도 있습니다. – Touki

+0

true 또는 false를 반환하고, 내 사이트에서 값을 출력하며, 내 컴퓨터 또는 iPad에서 제대로 감지하고 있습니다. –

+0

여러분의 의견을 다시 읽으면서, 나는 덤프 (망막)를 시도했다. 그것은 string (5) "false"를 반환했다. –

답변

3

문제는 retina이 문자열이며 부울이 아닙니다. 쿠키는 문자열이며 형식을 지원하지 않습니다. $nonEmtpyString == true은 항상 true입니다. 그래서 대신 retina == 'true'을 할 수 있습니다.

그러나 당신이 당신의 템플릿에서 부울을 원한다면, 당신이 할 수 있습니다 :`

{% set retina = app.request.cookies.get('d_p_r') == 'true' ? true : false %} 
+0

어느 것이 더 빠르냐는 것이 너무 많을까요? 코드는 일부 사이트에서 여러 번 반복됩니다. 감사합니다. 너무나 분명했습니다. –

+1

이 경우 성능에 신경 써서는 안됩니다. 가장 명확한 방법으로 코드의 의미를 전달하는 솔루션으로 이동하십시오. 코드를 작성하면 코드에 많은 문제가되는 성능 문제가 발생할 것입니다. –