채택완료

hook 을 이용해서 특정게시판에서만 글 작성 후 목록으로 이동

2024-10-14 (월) 18:35:30 2,833

제목 그대로 특정 게시판에서 글 작성 시 view 페이지가 아닌 list 페이지로 이동하게 할 수 있나요...??
/bbs/write_update.php

Copy
$redirect_url = run_replace('write_update_move_url', short_url_clean(G5_HTTP_BBS_URL.'/board.php?bo_table='.$bo_table.'&wr_id='.$wr_id.$qstr), $board, $wr_id, $w, $qstr, $file_upload_msg);

 

run_event('write_update_after', $board, $wr_id, $w, $qstr, $redirect_url);

하단 내용중 redirect_url 과 write_update_after 가 있길래, 혹시나 add_event 를 이용해서 해보려고 합니다...

다른 글들을 참고해서 스킨에 write_update.skin.tail.php 에

Copy
<?php
if( !defined('_GNUBOARD_') ) exit;

 

$redirect_url = run_replace('write_update_move_url', short_url_clean(G5_HTTP_BBS_URL.'/board.php?bo_table'.$bo_table.$qstr), $board, $wr_id, $w, $qstr, $file_upload_msg);

이렇게 추가를 해봤는데 이동이 안됩니다... write_update.tail.skin.php 에서는 goto_url 로만 넘길 수 있는 것 같아요;;

hook 으로 처리를 해보려고해서 위 파일 내용은 주석처리한 후에

extend에 파일하나 생성해서

Copy
add_event('write_update_after', 'charter_write_after', 10, 5);
function charter_write_after($board, $wr_id, $w, $qstr, $redirect_url) {
    if( $board['gr_id'] != 'charter' ) exit;

    $redirect_url = run_replace('write_update_move_url', short_url_clean(G5_HTTP_BBS_URL.'/board.php?bo_table='.$bo_table.$qstr), $board, $wr_id, $w, $qstr, $file_upload_msg);

    return $redirect_url;
}

이렇게 해봤는데 계속 view 페이지로 갑니다....;;

훅으로 글 작성 후 리스트로 가게할 수 있나요??

답변 5개 / 댓글 12개

채택된 답변
+20 포인트
2024-10-14 (월) 19:04:39

아 저 시간이 없어서 일단 그룹 까진 테스트 못했습니다.

아래 코드 쓰시면 네이버로 이동 되는 훅 사용 할 수 있습니다만, 그건 테스트이고

원하는 주소로 변경하세요

Copy
add_replace('write_update_move_url', 'charter_write_after', 10, 5);

function charter_write_after($board, $wr_id, $w, $qstr, $redirect_url) {

    $redirect_url = 'https://www.naver.com';

    return $redirect_url;

}

replace 이벤트이니 add_replace 이벤트 훅을 사용해야 합니다.

참고로 $board 하시면 원본 주소가 나올꺼에요 

답변에 대한 댓글 6개

답변 감사드립니다! 일단... event 를 replace 로 변경해서 사용하니 말씀해주신대로 $board 가 경로로 찍히네요;; replace 로는 우선 bo_table 과 gr_id 를 불러올 수 없는 것 같네요;;

두 값이 있어야... 그룹을 걸러내서 적용할 수 있을 것 같아요ㅠ

run_replace 에서 넘겨주는 $board, $wr_id, $w, $qstr, $file_upload_msg 이 5개 변수(?)만 사용가능한건가요...??
댓글 달고 보니 $wr_id 에 게시판 정보가 담겨져 있네요
gr_id, bo_table 다 담겨져있어서 가능할 것 같네요!
어제 술먹으러 간다고 ㅋㅋㅋㅋ 급하게 글 남겼는데..

완성본으로 답글 다시 달아드렸어요 ㅎㅎㅎ
알려주신 이 방법을 참고해서 제 방식대로 고쳐서 적용했습니다.
[code]
add_replace('write_update_move_url', 'charter_write_update_move_url', 10, 5);
function charter_write_update_move_url($redirect_url, $board, $wr_id, $w, $qstr) {
$bo_table = $board['bo_table'];
$gr_id = $board['gr_id'];

if( $gr_id == 'charter' )
$redirect_url = short_url_clean(G5_HTTP_BBS_URL.'/board.php?bo_table='.$bo_table.$qstr);
else
$redirect_url = short_url_clean(G5_HTTP_BBS_URL.'/board.php?bo_table='.$bo_table.'&wr_id='.$wr_id.$qstr);

return $redirect_url;
}
[/code]

run_replace 에 담긴 변수는 url, board, wr_id... 이 순서로 되는데 실제로는 하나씩 밀려서 $board 에 url 이 담겨있고, $wr_id 에 board 정보가 들어있고... 보기 불편해서 charter_writer_update_move_url 함수에 매개변수명을 알아보기 쉽게 변경해서 적용했습니다!

덕분에 훅으로 처리가 가능했네요! 그룹아이디가 charter 면 목록으로, 그 외는 기존 url 대로 뷰페이지로 보내게 처리했습니다! 감사합니다 :)
[code]
$redirect_url = short_url_clean(G5_HTTP_BBS_URL.'/board.php?bo_table='.$bo_table.($gr_id == 'charter' ? $qstr : '&wr_id='.$wr_id.$qstr));
[/code]

이렇게 하심 if 문 생략 가능합니다.
삼항연산자로 한줄처리하는게 깔끔하겠네요! 마지막까지 감사합니다!
2024-10-15 (화) 10:49:39

아래 코드로 변경 하시면 정상 동작 되실꺼에요

Copy
<?php

if( !defined('_GNUBOARD_') ) exit;

add_event('write_update_after', 'charter_write_after', 10, 5);

function charter_write_after($board, $wr_id, $w, $qstr, $redirect_url) {

    global $config;

    $gr_id = $board['gr_id'];

    $bo_table = $board['bo_table'];

 

    if($gr_id !== 'charter') {

        $redirect_url = G5_HTTP_BBS_URL.'/board.php?bo_table='.$bo_table;

    }

    goto_url($redirect_url);

}

978180634_1728956990.3497.gif

답변에 대한 댓글 2개

답변감사드립니다!!

결국 훅을 이용해도 안에서 goto_url 로 처리해야되나보네요!
잘 되시면 채택은 꼭!!+ㅁ+
2024-10-14 (월) 21:54:33

hook 보다는 이 방법이 더 편해 보이네요.

https://sir.kr/g5_tip/22896

답변에 대한 댓글 2개

답변 감사드립니다! "글작성후 목록으로" 라고 검색을 했었는데... 왜 이 팁을 못봤을까요...;;

일단 훅으로 처리하는걸 목표로 하고 있습니다ㅠ 훅을 사용해본 적이 없어서 알아두면 여러모로 많이 사용할 수 있을 것 같아서요... 우선 미니님께서 알려주신 방법이 가장 원하는 방식이라... 훅으로 처리를 해보고 훅으로는 처리할 수 없는 방법이라면 말씀해주신 방법으로 적용해보겠습니다!
아 답변먼저 확인하느라 이제야 봤네요...!! 제 질문에 대한 답변을 팁에 올려주신거였네요!! 감사드립니다! :)
2024-10-14 (월) 21:30:24
if( $board['gr_id'] != 'charter' ) 를 
if( $board['gr_id'] == 'charter' ) 로 바꾸고 리턴 안하고 goto_url 함수를 이용해서 페이지 이동을 하시면 되시지 않나요?

어떤 부분이 안되시는걸까요? 해당 함수롤 사용 안하시는 이유가 있으신가요?

답변에 대한 댓글 1개

답변 감사드립니다! 일단 훅으로 처리하는걸 목표로 하고 있습니다ㅠ 훅을 사용해본 적이 없어서 알아두면 여러모로 많이 사용할 수 있을 것 같아서요... 우선 미니님께서 알려주신 방법이 가장 원하는 방식이라... 훅으로 처리를 해보고 훅으로는 처리할 수 없는 방법이라면 말씀해주신 방법으로 적용해보겠습니다!
2024-10-14 (월) 18:54:08

맨 마지막 코드에서 

return $redirect_url; 을 하지마시고 
Header('Location:'.$redirect_url);
이런식으로 해보세요`~

답변에 대한 댓글 1개

답변 감사드립니다! 일단 훅으로 처리하는걸 목표로 하고 있습니다ㅠ 미니님께서 알려주신 방법이 가장 원하는 방식이라... 우선 훅으로 처리를 해보고 훅으로는 처리할 수 없는 방법이라면 말씀해주신 방법으로 적용해보겠습니다!

답변을 작성하려면 로그인이 필요합니다.