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

· 2024-08-30 (금) 18:49:21 · 3293 · 8

@매직크레용 님께서 수정 해주신 회원 목록 엑셀 다운로드(https://sir.kr/g5_tip/22583) 소스를 HOOK 기능을 이용해서

파일 하나로 만들어 봤습니다.

 

@미니님a님이 알려주신 adm/view.php 를 통해서도 공부할 겸 제작해 봤습니다.

 

[code] 

// extend/mb_excel_export.extend.php 파일 생성 후 입력 또는 첨부파일 업로드

 

<?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){
        header('Content-Type: application/vnd.ms-excel; charset=utf-8');
        header('Content-Disposition: attachment; filename="' . $filename . '.csv"'); // 확장자를 .csv로 변경
        header('Cache-Control: max-age=0');
        $out = fopen('php://output', 'w');
        fputs($out, "\xEF\xBB\xBF"); // UTF-8 with BOM
        fputcsv($out, array_keys($data[0]), ","); // 콤마 구분자 사용
        foreach ($data as $row) {
            fputcsv($out, $row, ","); // 콤마 구분자 사용
        }
        fclose($out);

    }
}
if (!function_exists('mb_excel_export_func')) {
    add_event('admin_request_handler_mb_excel_export', 'mb_excel_export_func', G5_HOOK_DEFAULT_PRIORITY, 2);
    function mb_excel_export_func($arr_query, $token)
    {
        global $g5, $member;
                
        $sql_common = " from {$g5['member_table']} ";
        
        $sql_search = " where (1) ";
        if ($stx) {
            $sql_search .= " and ( ";
            switch ($sfl) {
                case 'mb_point' :
                    $sql_search .= " ({$sfl} >= '{$stx}') ";
                    break;
                case 'mb_level' :
                    $sql_search .= " ({$sfl} = '{$stx}') ";
                    break;
                case 'mb_tel' :
                case 'mb_hp' :
                    $sql_search .= " ({$sfl} like '%{$stx}') ";
                    break;
                default :
                    $sql_search .= " ({$sfl} like '{$stx}%') ";
                    break;
            }
            $sql_search .= " ) ";
        }
        
        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 테이블 출력 대신 엑셀 파일로만 출력하도록 수정
        if (count($data) > 0) {
            array_to_excel($data, '회원리스트');        
        } else {
            alert('회원 목록 저장 중 오류가 발생했습니다.');    
        }        
        exit;
    }
}

[/code]

 

 

첨부파일

|

댓글 8개

2024-08-31 (토) 10:30:54

감사합니다 ^^

2024-09-01 (일) 20:01:39

@민트다이어리 답변 감사합니다.

hook은 아직 개념이 안잡혀서 감이 잘안오는데요 

유용해보입니다.

감사합니다.

2024-09-01 (일) 19:52:28

@김철용 저도 잘은 모르시만 include 의 다른 방식이라고 생각하시면 편하실꺼예요.^^

감사합니다

2024-09-03 (화) 10:19:40

감사합니다.

감사합니다.

2025-12-04 (목) 15:07:42

감사합니다

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

그누보드5 팁자료실

2,788건
+
제목 글쓴이 날짜 조회
24-08-30 조회 3,294
24-08-25 조회 3,055
24-08-22 조회 3,438
24-08-20 조회 2,683
24-08-20 조회 3,166
24-08-19 조회 3,276
24-08-19 조회 2,815
24-08-19 조회 2,659
24-08-19 조회 3,211
24-08-16 조회 3,275
24-08-16 조회 2,867
24-08-16 조회 3,168
24-08-15 조회 2,769
24-08-15 조회 4,059
24-08-12 조회 2,886
24-08-09 조회 2,885
24-08-06 조회 3,875
24-08-06 조회 2,779
24-08-05 조회 3,019
24-08-05 조회 2,705
24-08-03 조회 3,653
24-08-03 조회 6,634
24-07-31 조회 2,731
24-07-29 조회 3,594
24-07-28 조회 2,659
24-07-27 조회 3,291
24-07-26 조회 3,270
24-07-26 조회 3,066
24-07-24 조회 3,201
24-07-23 조회 2,652