다른 게시판 첨부파일 다운로드 및 노출기능

매출이 오르면 내리는 수수료! 지금 수수료센터에서 전자결제(PG)수수료 비교견적 신청해 보세요!
다른 게시판 첨부파일 다운로드 및 노출기능

QA

다른 게시판 첨부파일 다운로드 및 노출기능

답변 3

본문

안녕하세요. 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_viewget_file)를 활용하며,

두 게시판의 정보를 동시에 참조하도록 확장합니다.

이렇게 하면 $view의 데이터를 B 게시판 첨부파일과 병합하여 사용할 수 있습니다.

 

답변을 작성하시기 전에 로그인 해주세요.
QA 내용 검색
질문등록
전체 0
© SIRSOFT
현재 페이지 제일 처음으로