제가 공개한 슬라이더들 문제예요.
같은 id를 사용하는 jQuery 슬라이더 위젯을 한 위젯페이지에서 여러개 사용하게 하기 위해
팁을 공유해 드린 적이 있는데요, (XE 컨퍼런스, XE 공개강좌 등...)
위젯 content.html 파일 상단에
<!--@if(!$global['csi'])-->{@ $__Context->global['csi'] = 1}<!--@endif-->{@ $__Context->global['csi']++}
이렇게 글로벌 변수를 선언해서 csi라는 변수가 이 위젯 전에 있었으면 +1 을 해줍니다.
그리고, id값으로 반영합니다.
<div id="bxslider{$global['csi']}" class="bxslider">
...
</div>
<script>
jQuery(function($){
$('#bxslider{$global["csi"]}').bxSlider();
});
이렇게 하면 한 위젯페이지에서 몇 개의 슬라이더라도 사용할 수가 있죠.
근데 같은 class명으로 하지 않는 이유가 서로 다르게 줘야 하는 기능 등이 있기 때문이죠.
어쨌든, 여기까지는 팁인데요,
중요한 건 한 위젯페이지에서 위 슬라이더들을 여러개 사용하고
각 슬라이더 위젯에 캐싱 시간을 주면
저 csi++가 작동을 안하고
모든 슬라이더가 같은 id값을 가지게 됩니다.
#bxslider1, #bxslider1, ... ㅠㅠ
이게 XE코어 문제인 듯한데,
혹시 해결할 방법이 없나요?
댓글 10
문제가 캐싱시간을 적용했을 때 그렇다는 건가요?
위젯 캐싱시간을 1이라도 주면 전역변수가 같아지더라구요.
위젯캐싱뿐만이 아니라 위젯페이지 자체 캐싱을 줘도 마찬가지로 전역변수가 모두 같아져요.
그렇게 되면 해당 변수값은 항상 없는 게 될테니...
위젯SRL! 세션! 한 번 적용해 봐야 겠네요!!
저도 이 문제 발견했는데, 해결에 실패했어요. 그나마 해결책이라고 할만한건, rand 를 사용해보는 거에요.(저는 찝찝해서 실제 사용해보진 않았습니다. 저는 jQuery 로 상대적인 위치를 잡는 식으로 해서 해결했어요.)
{@ $var = rand(1,999999); }
<!--@if(!$global['csi'])-->{@ $__Context->global['csi'] = 1}<!--@endif-->{@ $__Context->global['csi']++}
<div id="bxslider{$var}_{$global['csi']}" class="bxslider">
...
</div>
<script>
jQuery(function($){
$('#bxslider{$var}_{$global["csi"]}').bxSlider();
});
그렇다면... 같은 컨텐츠로 슬라이더를 붙일 일은 없을테니, 컨텐츠를 serialize 해버린다음.. md5로 뭉개어서.. 텍스트로 만드는 방법을 한번 써보시면 어떨까요?!?
{@ $var = md5(serialize($컨텐츠를 담고 있는 무언가 변수)); }
하늘희님 말씀대로 위젯에 srl이 부여된다면 그걸 사용해도 되겠네요!
2개 이상일 때는 번호로 매기니깐 당연히 다른 값의 아이디가 매겨지기 때문에 괜찮지 않을까 생각했었거든요..
이것도 캐싱적용하면 똑같이 지는지 테스트해봐야겠네요;