제목 : 스크랩 삭제 잘못된 요청 문의
질문 :
이미 스크랩된 게시글의 스크랩 버튼을 스크랩 삭제로 제공해주려고 하는데 잘못된 요청이 반환이 됩니다.
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
제목 | 날짜 | ||
---|---|---|---|
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 |