테스트 사이트 - 개발 중인 베타 버전입니다

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

coDribble 1년 전 조회 2,122

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

</p>

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

<p> </p>

<p>run_event('write_update_after', $board, $wr_id, $w, $qstr, $redirect_url);</p>

<p>

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

 

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

</p>

<p><?php

if( !defined('_GNUBOARD_') ) exit;</p>

<p> </p>

<p>$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);</p>

<p>

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

 

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

extend에 파일하나 생성해서

</p>

<p>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;</p>

<p>    $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);</p>

<p>    return $redirect_url;

}</p>

<p>

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

 

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

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

답변 5개

채택된 답변
+20 포인트
1년 전

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

 

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

 

원하는 주소로 변경하세요

 

</p>

<p>add_replace('write_update_move_url', 'charter_write_after', 10, 5);</p>

<p>function charter_write_after($board, $wr_id, $w, $qstr, $redirect_url) {</p>

<p>    $redirect_url = '<a href="https://www.naver.com';" target="_blank" rel="noopener noreferrer">https://www.naver.com';</a></p>

<p>    return $redirect_url;</p>

<p>}</p>

<p>

 

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

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

로그인 후 평가할 수 있습니다

답변에 대한 댓글 6개

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

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

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

완성본으로 답글 다시 달아드렸어요 ㅎㅎㅎ
c
coDribble
1년 전
알려주신 이 방법을 참고해서 제 방식대로 고쳐서 적용했습니다.
[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.'&amp;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 대로 뷰페이지로 보내게 처리했습니다! 감사합니다 :)
미니님a
1년 전
[code]
$redirect_url = short_url_clean(G5_HTTP_BBS_URL.'/board.php?bo_table='.$bo_table.($gr_id == 'charter' ? $qstr : '&amp;wr_id='.$wr_id.$qstr));
[/code]

이렇게 하심 if 문 생략 가능합니다.
c
coDribble
1년 전
삼항연산자로 한줄처리하는게 깔끔하겠네요! 마지막까지 감사합니다!

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

1년 전

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

 

</p>

<p><?php</p>

<p>if( !defined('_GNUBOARD_') ) exit;</p>

<p>add_event('write_update_after', 'charter_write_after', 10, 5);</p>

<p>function charter_write_after($board, $wr_id, $w, $qstr, $redirect_url) {</p>

<p>    global $config;</p>

<p>    $gr_id = $board['gr_id'];</p>

<p>    $bo_table = $board['bo_table'];</p>

<p> </p>

<p>    if($gr_id !== 'charter') {</p>

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

<p>    }</p>

<p>    goto_url($redirect_url);</p>

<p>}</p>

<p>

 

http://sir.kr/data/editor/2410/978180634_1728956990.3497.gif" width="100%" />

로그인 후 평가할 수 있습니다

답변에 대한 댓글 2개

c
coDribble
1년 전
답변감사드립니다!!

결국 훅을 이용해도 안에서 goto_url 로 처리해야되나보네요!
미니님a
1년 전
잘 되시면 채택은 꼭!!+ㅁ+

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

 

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

https://sir.kr/g5_tip/22896

로그인 후 평가할 수 있습니다

답변에 대한 댓글 2개

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

일단 훅으로 처리하는걸 목표로 하고 있습니다ㅠ 훅을 사용해본 적이 없어서 알아두면 여러모로 많이 사용할 수 있을 것 같아서요... 우선 미니님께서 알려주신 방법이 가장 원하는 방식이라... 훅으로 처리를 해보고 훅으로는 처리할 수 없는 방법이라면 말씀해주신 방법으로 적용해보겠습니다!
c
coDribble
1년 전
아 답변먼저 확인하느라 이제야 봤네요...!! 제 질문에 대한 답변을 팁에 올려주신거였네요!! 감사드립니다! :)

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

1년 전
if( $board['gr_id'] != 'charter' ) 를 
if( $board['gr_id'] == 'charter' ) 로 바꾸고 리턴 안하고 goto_url 함수를 이용해서 페이지 이동을 하시면 되시지 않나요?

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

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

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

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

1년 전

맨 마지막 코드에서 

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

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

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

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

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

로그인