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

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, 시절 활용되던 쿼리문 이었군요

코멘트 4
접기/펴기 | 댓글 새로고침
  • 이온디

    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
    오후 10:33
    댓글
  • 이온디
    @이온디

    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
    오후 10:37
    댓글
  • 이온디
    @이온디

    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));
        });
    });
    오후 10:37
    댓글
  • 이온디
    @이온디

    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>
    오전 05:21
    댓글