• 티스토리 홈
  • 프로필사진
    TheStorybook
  • 방명록
  • 공지사항
  • 태그
  • 블로그 관리
  • 글 작성
TheStorybook
  • 프로필사진
    TheStorybook
    • 분류 전체보기 (223)
      • 시놀로지(Nas) (11)
      • XE(Rhymix) (131)
        • 레이아웃, 스킨 관련 (15)
        • 변수 응용 (109)
        • 문제 해결 (3)
        • 기타 메뉴얼 (1)
        • 기타 자료 (0)
      • 그누보드 (7)
      • 작업 소스들 (53)
      • 기타 (6)
      • 추천 사이트 (7)
  • 방문자 수
    • 전체:
    • 오늘:
    • 어제:
  • 최근 댓글
      등록된 댓글이 없습니다.
    • 최근 공지
      • 개인 자료 보관 blog
      등록된 공지가 없습니다.
    # Home
    # 공지사항
    #
    # 태그
    # 검색결과
    # 방명록
    • 라이믹스 게시판 스크랩 기능
      2025년 02월 03일
      • TheStorybook
      • 작성자
      • 2025.02.03.:33

      Q

      스크랩 삭제 잘못된 요청 문의

      질문 :

      이미 스크랩된 게시글의 스크랩 버튼을 스크랩 삭제로 제공해주려고 하는데 잘못된 요청이 반환이 됩니다.

       

      javascript:doCallModuleAction('member','procMemberDeleteScrap',{$document_srl})

       

      위와 같이 스크랩 할때와 비슷하지만 act만 procMemberDeleteScrap 으로 했는데 이건 모듈에서 허용을 하지 않나요?

      스크랩은 허용을 하고 삭제를 안한건지 .....  아니면 제가 잘못사용하거나 부족한 인수가 있는건지..

       

       

      <action name="procMemberScrapDocument" type="controller" permission="member" />

      <action name="procMemberDeleteScrap" type="controller" permission="member" />

       

      모듈에는 이렇게 등록되어 있어 사용 가능해 보이긴 합니다.

       

      답변 : 

      #L722-L732" target="_blank" rel="noopener">https://github.com/rhymix/rhymix/blob/98bbe021548304d7e86994a5c34e0d481ac92801/common/js/common.js#L722-L732
      doCallModuleAction은 기본적으로 대상이 되는 srl을 target_srl로 넘겨줍니다.

      #L131-L135" target="_blank" rel="noopener">https://github.com/rhymix/rhymix/blob/a6ace52c9e25047f966eb83253526215936029b1/modules/member/skins/default/js/member.js#L131-L135
      하지만 스크랩 취소 액션은 document_srl 값으로 srl이 넘기도록 되어 있으므로 동작하지 않습니다. 위 코드는 멤버 스킨의 스크랩 취소 액션이니 참고하셔서 추가하시면 될것 같습니다.

      p.s.) doCallModuleAction이라고 되어 있으니 모든 act에 사용 가능해 보이지만 실제로는 exec_xml을 특정 형태로 하는 것에 불과합니다. 라이믹스는 이마저 내부적으로는 json으로 하므로 왠만한 동작은 exec_json을 직접 사용하시는게 나으실겁니다.

       


       

      1. 스크랩하기

      <a href="#" onclick="doCallModuleAction('member','procMemberScrapDocument','{$document->document_srl}'); return false; "><span>저장</span><span class="cnt">{$scrapped_count}</span></a>

       

       

      2. 스크랩 취소하기

      1번에서와 같이 하면 안됨.

      1) 잘못된 스크랩 취소하기의 예

      <a href="#" onclick="doCallModuleAction('member','procMemberDeleteScrap','{$document->document_srl}'); return false; ">저장취소</a>

       

       

      2) 올바르게 동작되는 스크랩 취소하기의 예

      <script>
          function doDeleteScrap(document_srl) {
             var params = new Array();
             params['document_srl'] = document_srl;
             exec_json('member.procMemberDeleteScrap', params, function() { location.reload(); });
          }
      </script>
      <a href="#" onclick="doDeleteScrap('{$document->document_srl}'); return false; ">저장취소 json</a>

       

       

      3. 예전에 사용한 스크랩/취소하기 코드 (새로고침을 해야 적용된 것을 확인 가능하다)

      <div class="btn btn-scrap" onclick="unscrap({$document->document_srl});"><i class="folder-full"></i> 저장취소</div>
      
      
      <div class="btn btn-scrap" onclick="scrap({$document->document_srl});"><i class="folder-line"></i> 저장</div>
      
      
      @if($is_logged)
      <script>
          function scrap(document_srl){
             var params = new Array();
             params['document_srl'] = document_srl;
             exec_json('member.procMemberScrapDocument', params);
             $.ajax({
                success : function(data) {
                   var icon = $('i.folder-line');
                   icon.attr("class","folder-full");
                   var btn = $(".btn-scrap");
                   btn.attr("onclick","unscrap({$document_srl})");
                }
             });
          }
          function unscrap(document_srl){
             var params = new Array();
             params['document_srl'] = document_srl;
             exec_json('member.procMemberDeleteScrap', params);
             $.ajax({
                success : function(){
                   var icon = $("i.folder-full");
                   icon.attr("class","folder-line");
                   var btn = $(".btn-scrap");
                   btn.attr("onclick","scrap({$document_srl})");
                }
             })
          }
      </script>
      @endif

       

       

      4. 2번을 정리

      function doDeleteScrap(document_srl) {
          var params = new Array();
          params['document_srl'] = document_srl;
          exec_json('member.procMemberDeleteScrap', params, function() { location.reload(); });
      }
      function doScrap(document_srl)
      {
          var params = [];
          params.document_srl = document_srl;
          exec_json('member.procMemberScrapDocument', params, function() { location.reload(); });
      }

       

      @php
      $oDB = DB::getInstance();
      
      // 스크랩 카운트를 가져오는 쿼리 실행 => $scrap_count
      $query = 'SELECT count(*) AS count FROM member_scrap WHERE document_srl = ?';
      $stmt = $oDB->query($query, $document->document_srl);
      $result = $stmt->fetchAll();
      $scrapped_count = $result[0]->count;
      
      // 스크랩 회원 리스트를 가져오는 쿼리 실행 => $scrap_member_list
      $member_columns = preg_filter('/^/', 'member.', ['member_srl', 'user_id', 'email_address', 'phone_number', 'user_name', 'nick_name', 'extra_vars']);
      $query = 'SELECT '. implode(',', $member_columns) .' FROM member_scrap LEFT JOIN member ON member_scrap.member_srl = member.member_srl WHERE member_scrap.document_srl = ?';
      $stmt = $oDB->query($query, $document->document_srl);
      $result = $stmt->fetchAll();
      $scrap_member_list = $result;
      @endphp
      @if($scrapped_count > 0)
          <a href="#" onclick="doDeleteScrap('{$document->document_srl}'); return false; ">저장취소</a>
      @else
          <a href="#" onclick="doScrap('{$document->document_srl}'); return false; ">저장</a>
      @endif

       

      저작자표시 (새창열림)
      다음글
      다음 글이 없습니다.
      이전글
      이전 글이 없습니다.
      댓글
    조회된 결과가 없습니다.
    스킨 업데이트 안내
    현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
    ("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)
    목차
    표시할 목차가 없습니다.
      • 안녕하세요
      • 감사해요
      • 잘있어요

      티스토리툴바