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