다른 게시판 첨부파일 다운로드 및 노출기능 채택완료
안녕하세요. A게시판 wr_id=1 번인 view 페이지에 B게시판 wr_id = 1의 첨부파일을 노출하고 싶습니다.
테이블명은 g5_write_a 와 g5_write_b 입니다.
게시판 구조를 보니 $view에 file을 담아서 get_file_thumbnail 함수를 호출해서 다운로드 및 본문 노출을 하는것 같습니다.
B게시판의 첨부파일 노출을 위해 $view2를 만들고 아래와 같이 호출하려고 하나 $board에 담긴정보가 많아 단순히 'b'로 넣어서는 동작하지 않는것 같습니다. 어떻게 하면 B게시판의 첨부파일을 A게시판에 노출할 수 있는지 궁금합니다.
그럼 고수님들의 조언을 부탁드립니다.
</p>
<p> $view2 = get_view($write, 'b', $board_skin_path);</p>
<p> </p>
<p> </p>
<p>// common.lib.php 에 정의된 get_view(), get_list(), get_file() 함수</p>
<p> </p>
<p>function get_view($write_row, $board, $skin_url)</p>
<p>{</p>
<p> return get_list($write_row, $board, $skin_url, 255);</p>
<p>}</p>
<p> </p>
<p>// 게시물 정보($write_row)를 출력하기 위하여 $list로 가공된 정보를 복사 및 가공</p>
<p>function get_list($write_row, $board, $skin_url, $subject_len=40)</p>
<p>{</p>
<p> global $g5, $config, $g5_object;</p>
<p> global $qstr, $page;</p>
<p> </p>
<p> //$t = get_microtime();</p>
<p> </p>
<p> $g5_object->set('bbs', $write_row['wr_id'], $write_row, $board['bo_table']);</p>
<p> </p>
<p> // 배열전체를 복사</p>
<p> $list = $write_row;</p>
<p> unset($write_row);</p>
<p> </p>
<p> $board_notice = array_map('trim', explode(',', $board['bo_notice']));</p>
<p> $list['is_notice'] = in_array($list['wr_id'], $board_notice);</p>
<p> </p>
<p> if ($subject_len)</p>
<p> $list['subject'] = conv_subject($list['wr_subject'], $subject_len, '…');</p>
<p> else</p>
<p> $list['subject'] = conv_subject($list['wr_subject'], $board['bo_subject_len'], '…');</p>
<p> </p>
<p> if( ! (isset($list['wr_seo_title']) && $list['wr_seo_title']) && $list['wr_id'] ){</p>
<p> seo_title_update(get_write_table_name($board['bo_table']), $list['wr_id'], 'bbs');</p>
<p> }</p>
<p> </p>
<p> // 목록에서 내용 미리보기 사용한 게시판만 내용을 변환함 (속도 향상) : kkal3(커피)님께서 알려주셨습니다.</p>
<p> if ($board['bo_use_list_content'])</p>
<p> {</p>
<p> $html = 0;</p>
<p> if (strstr($list['wr_option'], 'html1'))</p>
<p> $html = 1;</p>
<p> else if (strstr($list['wr_option'], 'html2'))</p>
<p> $html = 2;</p>
<p> </p>
<p> $list['content'] = conv_content($list['wr_content'], $html);</p>
<p> }</p>
<p> </p>
<p> $list['comment_cnt'] = '';</p>
<p> if ($list['wr_comment'])</p>
<p> $list['comment_cnt'] = "<span class=\"cnt_cmt\">".$list['wr_comment']."</span>";</p>
<p> </p>
<p> // 당일인 경우 시간으로 표시함</p>
<p> $list['datetime'] = substr($list['wr_datetime'],0,10);</p>
<p> $list['datetime2'] = $list['wr_datetime'];</p>
<p> if ($list['datetime'] == G5_TIME_YMD)</p>
<p> $list['datetime2'] = substr($list['datetime2'],11,5);</p>
<p> else</p>
<p> $list['datetime2'] = substr($list['datetime2'],5,5);</p>
<p> // 4.1</p>
<p> $list['last'] = substr($list['wr_last'],0,10);</p>
<p> $list['last2'] = $list['wr_last'];</p>
<p> if ($list['last'] == G5_TIME_YMD)</p>
<p> $list['last2'] = substr($list['last2'],11,5);</p>
<p> else</p>
<p> $list['last2'] = substr($list['last2'],5,5);</p>
<p> </p>
<p> $list['wr_homepage'] = get_text($list['wr_homepage']);</p>
<p> </p>
<p> $tmp_name = get_text(cut_str($list['wr_name'], $config['cf_cut_name'])); // 설정된 자리수 만큼만 이름 출력</p>
<p> $tmp_name2 = cut_str($list['wr_name'], $config['cf_cut_name']); // 설정된 자리수 만큼만 이름 출력</p>
<p> if ($board['bo_use_sideview'])</p>
<p> $list['name'] = get_sideview($list['mb_id'], $tmp_name2, $list['wr_email'], $list['wr_homepage']);</p>
<p> else</p>
<p> $list['name'] = '<span class="'.($list['mb_id']?'sv_member':'sv_guest').'">'.$tmp_name.'</span>';</p>
<p> </p>
<p> $reply = $list['wr_reply'];</p>
<p> </p>
<p> $list['reply'] = strlen($reply)*20;</p>
<p> </p>
<p> $list['icon_reply'] = '';</p>
<p> if ($list['reply'])</p>
<p> $list['icon_reply'] = '<img src="'.$skin_url.'/img/icon_reply.gif" class="icon_reply" alt="답변글">';</p>
<p> </p>
<p> $list['icon_link'] = '';</p>
<p> if ($list['wr_link1'] || $list['wr_link2'])</p>
<p> $list['icon_link'] = '<i class="fa fa-link" aria-hidden="true"></i> ';</p>
<p> </p>
<p> // 분류명 링크</p>
<p> $list['ca_name_href'] = get_pretty_url($board['bo_table'], '', 'sca='.urlencode($list['ca_name']));</p>
<p> </p>
<p> // $list['href'] = get_pretty_url($board['bo_table'], $list['wr_id'], $qstr);</p>
<p> $list['href'] = get_pretty_url($board['bo_table'], $list['wr_id']);</p>
<p> $list['comment_href'] = $list['href'];</p>
<p> </p>
<p> $list['icon_new'] = '';</p>
<p> if ($board['bo_new'] && $list['wr_datetime'] >= date("Y-m-d H:i:s", G5_SERVER_TIME - ($board['bo_new'] * 3600)))</p>
<p> $list['icon_new'] = '<img src="'.$skin_url.'/img/icon_new.gif" class="title_icon" alt="새글"> ';</p>
<p> </p>
<p> $list['icon_hot'] = '';</p>
<p> if ($board['bo_hot'] && $list['wr_hit'] >= $board['bo_hot'])</p>
<p> $list['icon_hot'] = '<i class="fa fa-heart" aria-hidden="true"></i> ';</p>
<p> </p>
<p> $list['icon_secret'] = '';</p>
<p> if (strstr($list['wr_option'], 'secret'))</p>
<p> $list['icon_secret'] = '<i class="fa fa-lock" aria-hidden="true"></i> ';</p>
<p> </p>
<p> // 링크</p>
<p> for ($i=1; $i<=G5_LINK_COUNT; $i++) {</p>
<p> $list['link'][$i] = set_http(get_text($list["wr_link{$i}"]));</p>
<p> $list['link_href'][$i] = G5_BBS_URL.'/link.php?bo_table='.$board['bo_table'].'&wr_id='.$list['wr_id'].'&no='.$i.$qstr;</p>
<p> $list['link_hit'][$i] = (int)$list["wr_link{$i}_hit"];</p>
<p> }</p>
<p> </p>
<p> // 가변 파일</p>
<p> if ($board['bo_use_list_file'] || ($list['wr_file'] && $subject_len == 255) /* view 인 경우 */) {</p>
<p> $list['file'] = get_file($board['bo_table'], $list['wr_id']);</p>
<p> } else {</p>
<p> $list['file']['count'] = $list['wr_file'];</p>
<p> }</p>
<p> </p>
<p> if ($list['file']['count'])</p>
<p> $list['icon_file'] = '<i class="fa fa-download" aria-hidden="true"></i> ';</p>
<p> </p>
<p> return $list;</p>
<p>}</p>
<p> </p>
<p>// 게시글에 첨부된 파일을 얻는다. (배열로 반환)</p>
<p>function get_file($bo_table, $wr_id)</p>
<p>{</p>
<p> global $g5, $qstr, $board;</p>
<p> </p>
<p> $file['count'] = 0;</p>
<p> $sql = " select * from {$g5['board_file_table']} where bo_table = '$bo_table' and wr_id = '$wr_id' order by bf_no ";</p>
<p> $result = sql_query($sql);</p>
<p> $nonce = download_file_nonce_key($bo_table, $wr_id);</p>
<p> while ($row = sql_fetch_array($result))</p>
<p> {</p>
<p> $no = (int) $row['bf_no'];</p>
<p> $bf_content = $row['bf_content'] ? html_purifier($row['bf_content']) : '';</p>
<p> $file[$no]['href'] = G5_BBS_URL."/download.php?bo_table=$bo_table&wr_id=$wr_id&no=$no&nonce=$nonce" . $qstr;</p>
<p> $file[$no]['download'] = $row['bf_download'];</p>
<p> // 4.00.11 - 파일 path 추가</p>
<p> $file[$no]['path'] = G5_DATA_URL.'/file/'.$bo_table;</p>
<p> $file[$no]['size'] = get_filesize($row['bf_filesize']);</p>
<p> $file[$no]['datetime'] = $row['bf_datetime'];</p>
<p> $file[$no]['source'] = addslashes($row['bf_source']);</p>
<p> $file[$no]['bf_content'] = $bf_content;</p>
<p> $file[$no]['content'] = get_text($bf_content);</p>
<p> //$file[$no]['view'] = view_file_link($row['bf_file'], $file[$no]['content']);</p>
<p> $file[$no]['view'] = view_file_link($row['bf_file'], $row['bf_width'], $row['bf_height'], $file[$no]['content']);</p>
<p> $file[$no]['file'] = $row['bf_file'];</p>
<p> $file[$no]['image_width'] = $row['bf_width'] ? $row['bf_width'] : 640;</p>
<p> $file[$no]['image_height'] = $row['bf_height'] ? $row['bf_height'] : 480;</p>
<p> $file[$no]['image_type'] = $row['bf_type'];</p>
<p> $file[$no]['bf_fileurl'] = $row['bf_fileurl'];</p>
<p> $file[$no]['bf_thumburl'] = $row['bf_thumburl'];</p>
<p> $file[$no]['bf_storage'] = $row['bf_storage'];</p>
<p> $file['count']++;</p>
<p> }</p>
<p> </p>
<p> return run_replace('get_files', $file, $bo_table, $wr_id);</p>
<p>}</p>
<p> </p>
<p>
답변 3개
$view2를 만들게 아니라 파일만 가져오면 되겠습니다
view페이지 상단에서
$view['file'] = get_file('b', $wr_id);
$view['file']['count'] = $view['file']['wr_file'];
확인
print_r($view); or print_r($view['file']);
댓글을 작성하려면 로그인이 필요합니다.
※ get_file() 함수를 확장하여 게시판 데이터 통합하는 방법입니다.
get_file() 함수의 호출 시 두 게시판(A와 B)의 데이터를 다루도록 수정.
A 게시판에서 wr_id=1의 데이터를 B 게시판의 첨부파일과 함께 사용하기 위해
common.lib.php에 새로운 함수 또는 기존 함수를 확장하여 데이터 처리를 통합.
- get_view() 함수 확장: 현재 get_view() 함수는 게시판 정보를 단일 테이블로 가정.
이를 수정하여 추가적으로 다른 테이블의 데이터를 병합할 수 있도록 만듭니다.
- 별도 함수 작성: 새로운 get_merged_view() 함수를 작성하여, A와 B 게시판의 wr_id를 기반으로 데이터를 병합한 후 반환합니다.
- 파일 호출 및 통합: lib/common.lib.php 파일에 아래와 같이 코드를 추가합니다.
</p>
<p>function get_merged_view($a_wr_id, $b_wr_id, $a_table, $b_table, $board_skin_path) {
global $g5;</p>
<p> // A 게시판의 데이터 가져오기
$a_query = "SELECT * FROM {$g5['write_prefix']}{$a_table} WHERE wr_id = '{$a_wr_id}'";
$a_result = sql_fetch($a_query);</p>
<p> // B 게시판의 파일 정보 가져오기
$b_files = get_file($b_table, $b_wr_id);</p>
<p> // A 게시판 데이터를 B 게시판의 첨부파일 데이터와 병합
$a_result['merged_files'] = $b_files;</p>
<p> return get_view($a_result, $a_table, $board_skin_path);
}</p>
<p>
- 사용 방법: $view2 = get_merged_view(1, 1, 'a', 'b', $board_skin_path);
- 예시 파일 구조에서의 통합:
- lib/common.lib.php: 함수 정의
- bbs/view.php: $view2를 호출하여 출력 데이터 확장
♣ 이 접근 방식을 요약하자면,
데이터 통합을 위해 기존 함수(get_view와 get_file)를 활용하며,
두 게시판의 정보를 동시에 참조하도록 확장합니다.
이렇게 하면 $view의 데이터를 B 게시판 첨부파일과 병합하여 사용할 수 있습니다.
댓글을 작성하려면 로그인이 필요합니다.
댓글을 작성하려면 로그인이 필요합니다.
답변을 작성하려면 로그인이 필요합니다.
로그인