질문/조언질답게시판

제가 공개한 슬라이더들 문제예요.

 

같은 id를 사용하는 jQuery 슬라이더 위젯을 한 위젯페이지에서 여러개 사용하게 하기 위해

팁을 공유해 드린 적이 있는데요, (XE 컨퍼런스, XE 공개강좌 등...)

 

위젯 content.html 파일 상단에

 

<[email protected](!$global['csi'])-->{@ $__Context->global['csi'] = 1}<[email protected]>{@ $__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코어 문제인 듯한데,

혹시 해결할 방법이 없나요?

  • profile
    서로 다르게 줘야하는 기능이 슬라이더.. 관련 기능들이라서 아이디값을 참조하기 때문에 각각 다른 아이디값을 부여하는 거군요..
    문제가 캐싱시간을 적용했을 때 그렇다는 건가요?
  • profile profile
    네 캐싱시간을 0으로 했을 때는 잘 작동하는데,
    위젯 캐싱시간을 1이라도 주면 전역변수가 같아지더라구요.
    위젯캐싱뿐만이 아니라 위젯페이지 자체 캐싱을 줘도 마찬가지로 전역변수가 모두 같아져요.
  • profile
    캐싱을 하게 되면 개별로 단독 실행되는 게 아닐까요?

    그렇게 되면 해당 변수값은 항상 없는 게 될테니...

    제 생각에는 위젯 srl이나 이런 걸로 아이디 처리하는 게 좋지 않을까 합니다.

    아니면 세션할당 하는 게...

    {@ 
    if (!$_SESSION ['csi']) $_SESSION ['csi'] = 1;
    else $_SESSION ['csi']++;
    }
  • profile profile

    위젯SRL! 세션! 한 번 적용해 봐야 겠네요!!

  • ?

    저도 이 문제 발견했는데, 해결에 실패했어요. 그나마 해결책이라고 할만한건, rand 를 사용해보는 거에요.(저는 찝찝해서 실제 사용해보진 않았습니다. 저는 jQuery 로 상대적인 위치를 잡는 식으로 해서 해결했어요.)

    {@ $var = rand(1,999999); }

    <[email protected](!$global['csi'])-->{@ $__Context->global['csi'] = 1}<[email protected]>{@ $__Context->global['csi']++}


    <div id="bxslider{$var}_{$global['csi']}" class="bxslider">

        ...

    </div>

     

    <script>

    jQuery(function($){

        $('#bxslider{$var}_{$global["csi"]}').bxSlider();

    });

  • ? profile
    rand도 그 rand된 값으로 통일 되더라구요. 모든 위젯이 같게;;
  • profile ?

    그렇다면... 같은 컨텐츠로 슬라이더를 붙일 일은 없을테니, 컨텐츠를 serialize 해버린다음.. md5로 뭉개어서.. 텍스트로 만드는 방법을 한번 써보시면 어떨까요?!?

     

    {@ $var = md5(serialize($컨텐츠를 담고 있는 무언가 변수)); }


    하늘희님 말씀대로 위젯에 srl이 부여된다면 그걸 사용해도 되겠네요!

  • profile
    저는 위 방법과 비슷한데요.. {$i=0} {$i++} 를 위젯 앞에 뒤에 각각 써주고,
    2개 이상일 때는 번호로 매기니깐 당연히 다른 값의 아이디가 매겨지기 때문에 괜찮지 않을까 생각했었거든요..
    이것도 캐싱적용하면 똑같이 지는지 테스트해봐야겠네요;
  • profile
    Treasurej님 슬라이더.. 어디에서 다운받아볼 수 있죠? 테스트 한번 해볼려는데;ㅁ;
  • profile
    궂이 글로벌 함수를 사용하는 이유는 무엇인가요?

서버에 요청 중입니다. 잠시만 기다려 주십시오...