2

サイトが起動すると、サイトが高解像度のデバイスで表示されているかどうかを検出する単純な js スクリプトがあり、値が Cookie に保存されます。

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

Retina 値がサイトのどこかに {{ retina }} を出力するように設定されていることを確認します。コンピューターでは「false」、iPad では「true」が返されます。ここまでは順調ですね。

問題は、ブール値にアクセスしようとしたときです。

{% 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 に変更すると、あらゆる場所で Retina 画像が生成されます。{{ retina }} の値が false を返しているにもかかわらず、常に true を返しているかのようです。

ここで何が間違っているのかわかりません。{% if retina %} だけを試してみましたが、役に立ちませんでした。これを修正するすべての試行の間にキャッシュもクリアしました。

4

1 に答える 1

3

問題は、それretinaがブール値ではなく文字列であることです。Cookie は単なる文字列であり、型をサポートしていません。そして$nonEmtpyString == trueいつもtrueです。したがって、代わりに行うことができますretina == 'true'

ただし、テンプレートにブール値が必要な場合は、次のようにすることができます。

{% set retina = app.request.cookies.get('d_p_r') == 'true' ? true : false %}
于 2013-09-03T15:52:39.407 に答える