회원 목록 엑셀 다운로드 HOOK 기능 > 그누보드5 팁자료실

그누보드5 팁자료실

회원 목록 엑셀 다운로드 HOOK 기능 정보

회원 목록 엑셀 다운로드 HOOK 기능

본문

님이 만들어주신 훅 파일이 잘 작동하지 않아 수정 후 올립니다.


<?php 
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가

// 관리자 메뉴 hook
if (!function_exists('admim_menu_mb_excel_export')) {
    add_replace('admin_menu', 'admim_menu_mb_excel_export', G5_HOOK_DEFAULT_PRIORITY, 1);
    function admim_menu_mb_excel_export($menu)
    {
        $menu['menu200'][] = array('200110', '회원목록저장', G5_ADMIN_URL.'/view.php?call=mb_excel_export', 'mb_excel_export');
        return $menu;
    }
}
// 회원 목록 엑셀 저장
if (!function_exists('array_to_excel')) {
    function array_to_excel($data, $filename) {
        // 데이터 체크
        if (empty($data) || !is_array($data)) {
            return false;
        }
        try {
            // 파일명에 특수문자가 있다면 제거
            $filename = preg_replace('/[^A-Za-z0-9가-힣_\-]/', '', $filename);
            
            // 헤더 설정
            header('Content-Type: text/csv; charset=UTF-8');
            header('Content-Disposition: attachment; filename="' . $filename . '.csv"');
            header('Pragma: no-cache');
            header('Expires: 0');
            
            // 출력 버퍼 비우기
            ob_end_clean(); // 기존 출력 버퍼 제거
            
            // 파일 스트림 열기
            $out = fopen('php://output', 'w');
            if ($out === false) {
                return false;
            }
            
            // UTF-8 BOM 추가
            fprintf($out, chr(0xEF).chr(0xBB).chr(0xBF));
            
            // 첫 번째 행의 키들을 헤더로 사용
            if (!empty($data[0])) {
                $headers = array_keys($data[0]);
                fputcsv($out, $headers);
            }
            
            // 데이터 쓰기
            foreach ($data as $row) {
                // null 값을 빈 문자열로 변환
                $row = array_map(function($value) {
                    return is_null($value) ? '' : $value;
                }, $row);
                
                fputcsv($out, $row);
            }
            
            // 파일 스트림 닫기
            fclose($out);
            exit; // 추가 출력 방지
            
        } catch (Exception $e) {
            error_log('CSV 생성 중 오류 발생: ' . $e->getMessage());
            return false;
        }
    }
}
if (!function_exists('mb_excel_export_func')) {
    add_event('admin_get_page_mb_excel_export', 'mb_excel_export_func', G5_HOOK_DEFAULT_PRIORITY, 2);
    function mb_excel_export_func($arr_query, $token)
    {
        global $g5, $member, $is_admin;
                
        $sql_common = " from {$g5['member_table']} ";
        
        $sql_search = " where (1) ";
        
        if ($is_admin != 'super')
            $sql_search .= " and mb_level <= '{$member['mb_level']}' ";
        
        if (!$sst) {
            $sst = "mb_datetime";
            $sod = "desc";
        }
        
        $sql_order = " order by {$sst} {$sod} ";
        
        $sql = " select * {$sql_common} {$sql_search} {$sql_order} ";
        $result = sql_query($sql);
        
        $data = array(); // Initialize the data array
        $i = 0; // $i 변수를 여기서 초기화
        
        while ($row = sql_fetch_array($result)) {
            $i++; // 각 회원 데이터마다 번호 증가
            // 데이터 가공
            $mb_gender = '';
            if ($row['mb_gender'] == 'M') {
                $mb_gender = '남성';
            } else if ($row['mb_gender'] == 'F') {
                $mb_gender = '여성';
            }
        
            $data[] = array(
                '번호' => $i,
                '아이디' => $row['mb_id'],
                '이름' => $row['mb_name'],
                '닉네임' => $row['mb_nick'],
                'E-MAIL' => $row['mb_email'],
                '전화번호' => $row['mb_tel'],
                '휴대폰번호' => hyphen_hp_number($row['mb_hp']),
                '성별' => $mb_gender,
                '생년월일' => $row['mb_birth'],
                '가입일' => $row['mb_datetime'],
                '최종접속일' => $row['mb_today_login'],
                '권한' => $row['mb_level']
            );
        }
        // HTML 테이블 출력 대신 엑셀 파일로만 출력하도록 수정
        array_to_excel($data, '회원리스트');        
    }
}

추천
5
  • 복사

댓글 4개

© SIRSOFT
현재 페이지 제일 처음으로