지금 이온디에서 어떤 주제의 글이 새로 올라왔는지 확인해보세요.
글 등록하기 | 내글 관리하기 | 연재글 | 보관함
이온디
첨부파일 https://imweb.eond.com/xe/469997

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

질문 :

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

 

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

 

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

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

 

 

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

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

 

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


답변 : 

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

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
코멘트 0
접기/펴기 | 댓글 새로고침
 
 
Total 22 articles in 1 / 2 pages
번호 제목 제목 날짜날짜 조회 수
22 스크랩 ec_imin 파일 2025/01/31 3
21 스크랩(threads) v1 수정 [1] 2025/01/31 2
20 새로고침 없는 좋아요 버튼 수정 [3] 2025/01/31 8
19 더보기 php 코드 2025/01/31 1
18 글추천 버튼 2025/01/31 9
17 글보기에서 바로 비밀글 변경하는 방법 [4] 2025/01/30 8
16 updateDocumentsSecret 2025/01/30 1
15 엘리스디지털배움폰트 2025/01/29 9
14 [Tips] 라이믹스 모든 글 최신글 가져오기 코드 2025/01/29 6
13 [Tips] 라이믹스 특정 게시판 글 가져오기 2025/01/29 9
12 레이아웃을 바꿔봤습니다. 2025/01/29 4
11 [구인] [모집] 💻 다국어지식나눔 조인어스월드 웹 IT 봉사단 동아리 6기를 모집합니다! (~ 2025.02.14) 파일 2025/01/28 47
10 밍구님의 따뜻한 한마디 2025/01/27 11
9 라이믹스 debugPrint 2025/01/24 8
현재글 라이믹스 게시판 스크랩 기능 2025/01/21 9
7 라이믹스 후하니 스티커 모듈 파일 2025/01/21 1
6 [미입금] 비밀글 새로운 사이트에 후하니님의 스티커 모듈 설치 의뢰 [1] 2025/01/21 2
5 [레거시코드] pointhistory 모듈 유지보수 방법 2025/01/16 9
4 [구인] <초기 창업팀 팀원모집(항공/기상 분야)> : Data Scientist (Part-Time) 2025/01/08 27
3 [대기] 비밀글 모듈 개발 추가 요청 2025/01/06 17

해시태그 디렉터리

지금 이순간

오늘의 핫게시물