• 티스토리 홈
  • 프로필사진
    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.:18

      document 모듈에 이런 쿼리문이 있더군요.

      modules/document/queries/updateDocumentsSecret.xml

      <query id="updateDocumentsSecret" action="update"> <tables> <table name="documents" /> </tables> <columns> <column name="is_secret" var="is_secret" notnull="notnull" /> </columns> <conditions> <condition operation="in" column="document_srl" var="document_srl" filter="number" notnull="notnull" /> </conditions> </query>

       

      이런 쿼리문이 있길래, 이걸 게시판 글보기에서 바로 실행할 수 있는 방법 없나요?

       

      글보기 스킨에서 이렇게 하면 

      <form action="/" method="post" onsubmit="return procFilter(this, window.update)"> <input type="hidden" name="module" value="document" /> <input type="hidden" name="act" value="updateDocumentsSecret" /> <input type="hidden" name="document_srl" value="{$document_srl}" /> <button class="btn" type="submit">비밀글로 업데이트</button> </form>

       

      실행해보면...

       

      잘못된 요청입니다.

      ERR_ACT_NOT_FOUND

      classes/module/ModuleHandler.class.php:491

      이렇게 나오네요.

       

      updateDocumentsSecret 검색해보니 쿼리문만 있고 실제 콘트롤러나 뷰 등에서 사용되는 건 없는거 같군요..

      컬럼명도 is_secret인걸 보니 예전 xe, 시절 활용되던 쿼리문 이었군요

       

       

       

      view.blade.php

      @if($oDocument->isEditable())
          <form action="./" method="post" onsubmit="return procFilter(this, window.update)" id="status">
             <input type="hidden" name="document_srl" value="{$document_srl}" />
             @if(!$oDocument->isSecret())
                <input type="hidden" name="status" value="SECRET">
                <button type="submit">스레드 잠금 <i class="lock"></i></button>
             @else
                <input type="hidden" name="status" value="PUBLIC">
                <button type="submit">잠금 해제하기 <i class="unlock"></i></button>
             @endif
          </form>
          @php
             // 비밀글 전환 처리
             if ($_POST['status'] == 'SECRET' && isset($_POST['document_srl'])) {
                $obj = new stdClass();
                $obj->document_srl = $_POST['document_srl'];
                $obj->secret = 'SECRET'; // status를 'SECRET'으로 설정
                $query_path = $module_info->module."/skins/".$module_info->skin; // 쿼리 경로
                $output = executeQuery($query_path.'.updateDocumentsSecret', $obj); // 쿼리 실행
             }
      
             // 공개글 전환 처리
             if ($_POST['status'] == 'PUBLIC' && isset($_POST['document_srl'])) {
                $obj = new stdClass();
                $obj->document_srl = $_POST['document_srl'];
                $obj->secret = 'PUBLIC'; // status를 'PUBLIC'으로 설정
                $query_path = $module_info->module."/skins/".$module_info->skin; // 쿼리 경로
                $output = executeQuery($query_path.'.updateDocumentsSecret', $obj); // 쿼리 실행
                // 페이지 리다이렉트 (새로고침 효과)
             }
      
          @endphp
          <script>
             // 폼 제출 후 페이지 새로 고침
             document.querySelector('form#status').addEventListener('submit', function(e) {
                e.preventDefault(); // 기본 폼 제출 방지
      
                var form = this;
      
                // 폼을 AJAX로 제출 (또는 정상 제출 후 페이지 새로 고침)
                fetch(form.action, {
                   method: 'POST',
                   body: new FormData(form)
                }).then(function(response) {
                   // 성공적으로 제출되면 페이지 새로 고침
                   window.location.reload();
                }).catch(function(error) {
                   console.error('Error:', error);
                });
             });
          </script>
      @endif

       

       

      list.blade.php

      @if($document->isEditable())
          <form action="./" method="post" class="toggle-secret-form" data-documentsrl="{$document->document_srl}">
             <input type="hidden" name="document_srl" value="{$document->document_srl}" />
             @if(!$document->isSecret())
                <input type="hidden" name="status" value="SECRET">
                <button type="submit">스레드 잠금 <i class="lock"></i></button>
             @else
                <input type="hidden" name="status" value="PUBLIC">
                <button type="submit">잠금 해제하기 <i class="unlock"></i></button>
             @endif
             <input type="hidden" name="xe_validator_id" value="/modules/board/skins/eb_threads/1">
          </form>
          @php
             // 비밀글 전환 처리
             if ($_POST['status'] == 'SECRET' && isset($_POST['document_srl'])) {
                $obj = new stdClass();
                $obj->document_srl = $_POST['document_srl'];
                $obj->secret = 'SECRET'; // status를 'SECRET'으로 설정
                $query_path = $module_info->module."/skins/".$module_info->skin; // 쿼리 경로
                $output = executeQuery($query_path.'.updateDocumentsSecret', $obj); // 쿼리 실행
             }
      
             // 공개글 전환 처리
             if ($_POST['status'] == 'PUBLIC' && isset($_POST['document_srl'])) {
                $obj = new stdClass();
                $obj->document_srl = $_POST['document_srl'];
                $obj->secret = 'PUBLIC'; // status를 'PUBLIC'으로 설정
                $query_path = $module_info->module."/skins/".$module_info->skin; // 쿼리 경로
                $output = executeQuery($query_path.'.updateDocumentsSecret', $obj); // 쿼리 실행
                // 페이지 리다이렉트 (새로고침 효과)
             }
      
          @endphp
      
      @endif

       

       

      script.js

      document.querySelectorAll(".toggle-secret-form").forEach(function(form) {
          console.log('폼 감지됨');  // ✅ 폼이 감지되었는지 확인
      
          form.addEventListener("submit", function(e) {
             console.log('비밀글 처리 이벤트 발생'); // ✅ 이벤트 바인딩 확인
             e.preventDefault(); // 기본 폼 제출 방지
      
             let formData = new FormData(this);
             let documentSrl = this.dataset.documentsrl;
             // CSRF 토큰 추가 (필요하면 설정)
             // meta 태그에서 CSRF 토큰을 가져옴
             const csrfToken = document.querySelector('meta[name="csrf-token"]').getAttribute('content');
      
          // CSRF 토큰이 있을 때만 실행
             if (csrfToken) {
                // 이후 fetch 요청 시 CSRF 토큰을 포함
                formData.append("xe_validator_id", csrfToken);
                console.error(csrfToken);
             } else {
                console.error("CSRF 토큰이 없습니다.");
             }
             fetch(form.action, {
                method: "POST",
                body: formData,
                credentials: "include" // 인증 쿠키 포함 (중요)
      
             })
                .then(function(response) {  // ✅ 올바른 문법
                   window.location.reload(); // 페이지 새로고침
                })
                .catch(error => console.error("Error:", error));
          });
      });

       

       

      xml

      <query id="updateDocumentsSecret" action="update">
          <tables>
             <table name="documents" />
          </tables>
          <columns>
             <column name="status" var="secret" notnull="notnull" /> <!-- status 컬럼을 SECRET으로 설정 -->
          </columns>
          <conditions>
             <condition operation="in" column="document_srl" var="document_srl" filter="number" notnull="notnull" />
          </conditions>
      </query>
      저작자표시 (새창열림)

      'XE(Rhymix) > 변수 응용' 카테고리의 다른 글

      라이믹스 특정 게시판 글 가져오기  (0) 2025.02.03
      라이믹스 모든 글 최신글 가져오기 코드  (0) 2025.02.03
      새로고침 없는 좋아요 버튼  (0) 2025.02.03
      글추천 버튼 (새로고침 됨)  (0) 2025.02.03
      스크랩(threads) v1  (0) 2025.02.03
      다음글
      다음 글이 없습니다.
      이전글
      이전 글이 없습니다.
      댓글
    조회된 결과가 없습니다.
    스킨 업데이트 안내
    현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
    ("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)
    목차
    표시할 목차가 없습니다.
      • 안녕하세요
      • 감사해요
      • 잘있어요

      티스토리툴바