회원 목록 엑셀 다운로드 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개

감사합니다 ^^

최고 이십니다
감사합니다^^

이런 좋은 자료를 공개하신 분께 감사드립니다. 추천 꾹~~
감사합니다!