최근생일자 출력방법(음력-양력전환 가능) 정보
그누호환 최근생일자 출력방법(음력-양력전환 가능)첨부파일
본문
최근 생일을 맞으신 회원을 출력하는 기능을 만들어 보았습니다.
예컨데, 보여질 페이지 안에
<? 함수명(오늘~앞으로100일) ?> 하면 그 위치에,
회원 중 오늘에서 부터 앞으로100일 사이의 생일자가 쫘악 나오도록 하면 좋겠죠.
일단 먼저, 필요한 조건은
1. 회원가입시 생일을 입력할 수 있도록 할 것.
2. 음력, 양력을 구분해야 하기에 회원가입시 음력/양력 여부를 입력받을 수 있도록 할 것.
3. 음력<->양력을 변화하도록 도와주는 디비를 갖고 있을 것.
이에 대한 해결책은
1-> 회원가입폼의 생일 란을 활성화시키면 되겠죠(관리자툴의 환경설정에서).
2-> 음력/양력은 별도의 필드를 이용해도 좋겠지만, 소스를 수정하면 업데이트 때 번거로울 것 같으니까, 잘 사용 안하는 성별을 이용하면 좋을 것 같습니다. 관리자툴의 환경설정에서 성별사용을 체크하고 가입스킨(mbform.skin.php)에서 여자, 남자를 음력, 양력으로 바꾸면 되겠죠. 편의상 남자->양력으로 여자->음력으로 하겠습니다.
3-> 음력,양력 전환 문제는 함수 단계에서 구현이 가능하다고도 하는데 아마도 조금은 힘든가 봅니다. 그러니 그냥 쉽게 구할 수 있는 음력<->양력 디비를 구해서 이용하면 될 것 같습니다. (이건 디비 파일을 첨부해 두었습니다. 사용법은 디비 관리툴에서 첨부한 파일을 실행시켜주면 테이블이 생성될 것입니다.)
이제 본격적으로 구현해 본다면 이렇습니다.
먼저 방향을 이렇게 잡아 보았습니다.
1. 함수 차원으로 구현
2. 오늘을 기준으로 며칠 전 생일자부터 며칠 후 생일자까지 화면에 출력한다.(예컨데, 생일이 3일이 지난 사람부터 30일 이내 닥치는 사람까지)
3. 며칠 전을 몇 일로 할 것인지, 또 며칠 후를 몇 일으로 할 것인지는 함수를 이용하는 이용자가 지정할 수 있도록 함.
4. 자체 스킨을 구현함.
그래서 만든 게 아래의 졸작입니다. (사실 전 프로그래머와는 전혀 관계가 없습니다. 미숙해도 이해해 주세요.)
######## 이하는 저 같은 경우 파일명 jhoon_latest_member.php 로 저장하여 디렉토리 ./bbs/skin/latest/jhoon_latest_member/ 를 만들어 안에 넣었습니다. 따라서 이를 기준으로 하겠습니다. 적당히 수정하여 사용하세요.
<?
global $REQUEST_URI, $sort, $con;
function jhoon_latest_member($title, $kind, $skin, $next_term, $prev_term) {
/*
함수의 이름은 " jhoon_latest_member "
사용법은 그누보드 사용시
"~/index.php?doc=어쩌구.php" 이런 식으로 페이지를 불러내잖아요.
이때 어쩌구.php 파일을 에디터를 여시고(즉, 한마디로 나타낼 페이지를 열어서) 적당 위치에
<? include "./bbs/skin/latest/jhoon_latest_member/jhoon_latest_member.php"; ?>
를 먼저 적어 주시고(한 번만 적되 아래 것 보다 앞선다면 문서 어디든 상관 없겠습니다. )
생일자가 들어 갈 정확한 위치에
<? jhoon_latest_member("타이틀", 타입, "스킨명", 며칠후, 며칠전) ?> 예) <? jhoon_latest_member("최근 생일자", 0, "latebirthday", 31, 7) ?>
를 적어 주세요.(이건 필요한 곳 마다 사용하면 됩니다)
●'타이틀'이란 그냥 아무거나 식별할 수 있도록 적어주세요.
●'타입'이란 제가 이걸 만든 후 '최근 가입자' 역시 출력하도록 응용하면 좋을 듯 싶어서 타입 0 은 최근 생일자를 출력하는데, 타입 1 은 최근 가입 회원을 출력하는데 각각 사용하도록 구별해 놓았습니다. 따라서 생일을 이용한다면 0.
●'스킨명'이란 최종 출력될 형태를 스킨식으로 활용코자 해놓은 부분인데 ./bbs/skin/latest/jhoon_latest_member/ 의 하위에 스킨 디렉토리를 만들어 그 이름을 적습니다.
즉, jhoon_latest_member 아래 latebirthday 디렉토리를 만들고 그 안에 skin.php 를 스킨으로 이용할 경우 스킨명에 latebirthday을 적습니다.
스킨은 아래 다시 설명해 놓았습니다.
●'며칠후'란 앞으로 몇 일 이내에 다가올 생일자를 표시한다고 했을 때 그 몇 일에 해당되는 숫자입니다. 이것을 통해서 검색 종료일이 정해집니다.
●'며칠전'이란 몇 일 생일이 지난 사람도 표시해 주자는 의미로 그 몇 일을 숫자로 적어 줍니다. 이것을 통해서 검색 시작일이 정해집니다.
*/
global $REQUEST_URI, $sort, $con;
$path = "./bbs/skin/latest/jhoon_latest_member"; // 끝에'/'는 넣지 마세요.
if ($kind == 0) { //생일자 검색 타입일 경우
$begin_date = date("Ymd", time() - 24 * $prev_term * 3600); // 검색 시작 일
$begin_year = date("Y", time() - 24 * $prev_term * 3600); // 검색 시작 일이 속한 년도
$end_date = date("Ymd", time() + 24 * $next_term * 3600); //검색 종료 일
$order = "solar_date";
if ($sort) $order = $sort;
$condition = $con;
/*
가장 핵심적 부분이 될 것 같습니다.
아래 select문 설명 :
회원의 생일이
①양력이면서 '검색시작일 <= 회원의'올해'생일 < 검색종료일'
②음력이면서 '검색시작일 <= 회원의'올해'양력생일 < 검색종료일'
③양력이면서 '검색시작일 <= 회원의'내년'생일 < 검색종료일'
④음력이면서 '검색시작일 <= 회원의'내년'양력생일 < 검색종료일'
위의 네 경우 중 어느 한 경우에도 해당되는 것이 있다면 그 회원은 $result 에 담는다.(즉 출력됨)
참고 : 아래 보시면 mb_open = '1' 이라는 부분은 정보 공개에 동의 한 회원에 한 함을 의미합니다.
그리고 앞서 말씀드렸던 음력<->양력 변환 디비 테이블을 여기서 활용하게됩니다.
*/
$sql = "
select mb_name, mb_birth, mb_sex, solar_date, to_days(solar_date) - to_days(curdate()+0) from gb_member, LunarToSolar where
(mb_open = '1' and
mb_sex = 'M' and
insert(mb_birth, 1, 4, $begin_year) = replace(solar_date, '-', '') and
$begin_date <= insert(mb_birth, 1, 4, $begin_year) and
insert(mb_birth, 1, 4, $begin_year) < $end_date) or
(mb_open = '1' and
mb_sex = 'F' and
insert(mb_birth, 1, 4, $begin_year) = replace(lunar_date, '-', '') and
$begin_date <= replace(solar_date, '-', '') and
replace(solar_date, '-', '') < $end_date) or
(mb_open = '1' and
mb_sex = 'M' and
insert(mb_birth, 1, 4, $begin_year+1) = replace(solar_date, '-', '') and
$begin_date <= insert(mb_birth, 1, 4, $begin_year+1) and
insert(mb_birth, 1, 4, $begin_year+1) < $end_date) or
(mb_open = '1' and
mb_sex = 'F' and
insert(mb_birth, 1, 4, $begin_year+1) = replace(lunar_date, '-', '') and
$begin_date <= replace(solar_date, '-', '') and
replace(solar_date, '-', '') < $end_date)
order by $order $condition
";
if ($con == "DESC") $condition = "ASC"; //스킨 차원에서 항목별 소팅을 지원키 위해
else $condition = "DESC";
$REQUEST_URI = str_replace(strchr($REQUEST_URI, "&sort"), "", $REQUEST_URI); //스킨 차원에서 항목별 소팅을 할 경우 주소가 지저분해 지는 것을 막기 위해 이런 어설픈 꽁수를..
}
elseif ($kind == 1) { //최근 회원 검색 타입
$to_date = date("Ymd", time()); //오늘
$begin_date = date("Ymd", time() - 24 * ($prev_term + 1) * 3600);
$sql = "
select count(*)
from gb_member
where mb_open = '1' and
'$begin_date' < date_format(mb_datetime, '%Y%m%d') and
date_format(mb_datetime, '%Y%m%d') <= '$to_date'
order by mb_datetime DESC
";
$result=mysql_query($sql) or die(mysql_error());
$data=mysql_fetch_array($result);
$recentcount = $data[0];
$sql = " select count(*) from gb_member ";
$result=mysql_query($sql) or die(mysql_error());
$data=mysql_fetch_array($result);
$totalcount = $data[0];
$sql = "
select mb_name, mb_datetime, to_days(curdate()+0) - to_days(right(left(mb_datetime, 10), 8))
from gb_member
where mb_open = '1' and
'$begin_date' < date_format(mb_datetime, '%Y%m%d') and
date_format(mb_datetime, '%Y%m%d') <= '$to_date'
order by mb_datetime DESC
";
}
$result=mysql_query($sql) or die(mysql_error());
include "$path/$skin/skin.php"; //스킨을 로딩 합니다.
}
?>
여기 까지 입니다. 아, 그리고
스킨은 이렇게 활용합니다.
먼저 여기서 말하는 스킨은 그누 보드의 스킨과는 전혀 무관합니다. 그냥 여기 만의 스킨일 뿐입니다.
스킨의 위치는 본 함수파일(jhoon_latest_member.php)이 들어 있는 디렉토리의 하위에 있어야 하고요.
스킨의 이름은 디렉토리 이름과 같습니다.
그리고 디렉토리 안에 skin.php 파일만 로딩합니다. 다른 이름으로 바꾸시기를 원하시면 함수 안의 해당 부분도 수정해 주세요.
스킨은 괜히 했나 싶기도 합니다. 너무 복잡해 진 감도 있네요.
<첨부 파일 설명>
(1) 첫번째 파일의 압축을 푸시면 나오는 디렉토리(이 디렉토리를 통채로 ./bbs/skin/latest/ 안에 카피해주세요) 안에 파일 한개와 서브 디렉토리 3개가 나옵니다.
그 파일 한개는 위의 소스가 담긴 파일이고요, 서브 디렉토리는 스킨입니다. 3가지가 있는데요,
먼저 latebirthday 는 최근 생일자 들이 아래에서 위로 스크롤 되면서 올라가는 스킨이구요.
저는 생일자 명단이 들어갈 위치에 <? jhoon_latest_member("최근 생일자", 0, "latebirthday", 31, 7) ?> 식으로 사용했습니다.
위로 스크롤 되는 부분은 자바스크립트입니다. 소스는 daum.net 에 보시면 뉴스 나오는 부분의 소스를 그대로 옮긴 것입니다. 원 제작자에게 먼저 양해를 구합니다. 그런데 왜 이것을 편리한 마퀴 태그를 버리고 자바스크립트 소스를 찾았는가 하면요, 마퀴태그가 넷스케이프에서 작동을 안하는 이유도 있겠지만 마퀴 태그와 플래시로 만든 버튼이 같은 페이지에 있을 경우 충돌이 난다는 것을 이 번에 처음 알았습니다. 버튼 위로 가면 마우스 커서가 손모양 변해야 하는데 그 손모양의 마우스 커서가 제대로 보여지지 않습니다(마구 떨린다든지, 손모양 아닌 일반화살표모양커서가 나온다든지). 참고하시구요. 해결책은 도저히 찾을 수 없었습니다. 아시는 분 계시면 알려주세요. 그래서 할 수 없이 자바스크립트를 이용했습니다.
다음 birthdayview 는 최근 생일자 들이 표로 정리되어 화면에 나타나 지도록 했는데요.
<? jhoon_latest_member("최근 생일자", 0, "birthdayview", 365, 31) ?> 이런 식으로 호출해서 썼습니다. 보시면 아시겠지만 생일이 31일 지난 사람부터 앞으로 365일이내 생일이 닥치는 회원님을 나타내므로 거의 모든 회원의 생일이 화면에 나타나도록 했습니다.(거의 모든 회원이라고 말씀 드린 이유는 음력 생일인 경우에 앞으로 1년 동안 생일이 한 번도 없거나 두번인 경우가 종종 발생합니다) 그런데 회원이 한 10만명 쯤 되면 끔찍한 일이 벌어지겠지요. 이럴 경우를 대비해 페이지로 나누는 방법을 연구해야 겠는데, 아직 거기까지는 이르지 못했습니다.
그리고 이름, 오는생일, 남을일수 등의 항목을 클릭하면 소팅이 됩니다. 게시판 처럼 말이죠.
그 다음 latemember는 최근 회원 가입자를 화면에 출력하는 데 사용하려고 만든 스킨인데요.
<? jhoon_latest_member("최근 회원 가입자", 1, "latemember", 0, 5) ?> 식으로 호출해 썼습니다. 즉 타입 1 이고 가입한 지 5일된 회원 부터 오늘 가입한 회원까지 출력되겠지요.
(2) 두번째 파일의 압축을 푸시면 파일이 2개 나오는데
하나는 음력<->양력 디비 원본입니다.(어느 분이 만드셨는지 정말로 감사드립니다)
또 하나는 같은 파일인데 필요한 부분만 발췌한 것입니다. 즉 2003년인가 부터 2015년까지만 살리고 나머지는 삭제한 수정 디비입니다. 앞으로 10년 분량인데 그 때면 또 웹 환경이 많이 변해 있겠죠? 가급적 이것을 올리세요. 웹호스팅에 따라 디비 용량 제한있는 곳도 많을 테니까 말이죠.
여기까지입니다.
제로 보드 쪽에 가봐도 최근 생일자 출력 스킨이 있긴 한데, 음력 양력 전환을 복잡하게 구현했더군요.
차라리 이와같이 sql 의 select 차원에서 해결 하는 것이 더 낫지 않을까 하는 생각이 듭니다.
미진한 부분은 수정하여 사용하시면 더 좋을 것 같습니다.
조금이라도 도움이 되셨으면 좋겠습니다.
오자도 많을 텐데, 끝까지 읽어 주셔서 감사합니다.
예컨데, 보여질 페이지 안에
<? 함수명(오늘~앞으로100일) ?> 하면 그 위치에,
회원 중 오늘에서 부터 앞으로100일 사이의 생일자가 쫘악 나오도록 하면 좋겠죠.
일단 먼저, 필요한 조건은
1. 회원가입시 생일을 입력할 수 있도록 할 것.
2. 음력, 양력을 구분해야 하기에 회원가입시 음력/양력 여부를 입력받을 수 있도록 할 것.
3. 음력<->양력을 변화하도록 도와주는 디비를 갖고 있을 것.
이에 대한 해결책은
1-> 회원가입폼의 생일 란을 활성화시키면 되겠죠(관리자툴의 환경설정에서).
2-> 음력/양력은 별도의 필드를 이용해도 좋겠지만, 소스를 수정하면 업데이트 때 번거로울 것 같으니까, 잘 사용 안하는 성별을 이용하면 좋을 것 같습니다. 관리자툴의 환경설정에서 성별사용을 체크하고 가입스킨(mbform.skin.php)에서 여자, 남자를 음력, 양력으로 바꾸면 되겠죠. 편의상 남자->양력으로 여자->음력으로 하겠습니다.
3-> 음력,양력 전환 문제는 함수 단계에서 구현이 가능하다고도 하는데 아마도 조금은 힘든가 봅니다. 그러니 그냥 쉽게 구할 수 있는 음력<->양력 디비를 구해서 이용하면 될 것 같습니다. (이건 디비 파일을 첨부해 두었습니다. 사용법은 디비 관리툴에서 첨부한 파일을 실행시켜주면 테이블이 생성될 것입니다.)
이제 본격적으로 구현해 본다면 이렇습니다.
먼저 방향을 이렇게 잡아 보았습니다.
1. 함수 차원으로 구현
2. 오늘을 기준으로 며칠 전 생일자부터 며칠 후 생일자까지 화면에 출력한다.(예컨데, 생일이 3일이 지난 사람부터 30일 이내 닥치는 사람까지)
3. 며칠 전을 몇 일로 할 것인지, 또 며칠 후를 몇 일으로 할 것인지는 함수를 이용하는 이용자가 지정할 수 있도록 함.
4. 자체 스킨을 구현함.
그래서 만든 게 아래의 졸작입니다. (사실 전 프로그래머와는 전혀 관계가 없습니다. 미숙해도 이해해 주세요.)
######## 이하는 저 같은 경우 파일명 jhoon_latest_member.php 로 저장하여 디렉토리 ./bbs/skin/latest/jhoon_latest_member/ 를 만들어 안에 넣었습니다. 따라서 이를 기준으로 하겠습니다. 적당히 수정하여 사용하세요.
<?
global $REQUEST_URI, $sort, $con;
function jhoon_latest_member($title, $kind, $skin, $next_term, $prev_term) {
/*
함수의 이름은 " jhoon_latest_member "
사용법은 그누보드 사용시
"~/index.php?doc=어쩌구.php" 이런 식으로 페이지를 불러내잖아요.
이때 어쩌구.php 파일을 에디터를 여시고(즉, 한마디로 나타낼 페이지를 열어서) 적당 위치에
<? include "./bbs/skin/latest/jhoon_latest_member/jhoon_latest_member.php"; ?>
를 먼저 적어 주시고(한 번만 적되 아래 것 보다 앞선다면 문서 어디든 상관 없겠습니다. )
생일자가 들어 갈 정확한 위치에
<? jhoon_latest_member("타이틀", 타입, "스킨명", 며칠후, 며칠전) ?> 예) <? jhoon_latest_member("최근 생일자", 0, "latebirthday", 31, 7) ?>
를 적어 주세요.(이건 필요한 곳 마다 사용하면 됩니다)
●'타이틀'이란 그냥 아무거나 식별할 수 있도록 적어주세요.
●'타입'이란 제가 이걸 만든 후 '최근 가입자' 역시 출력하도록 응용하면 좋을 듯 싶어서 타입 0 은 최근 생일자를 출력하는데, 타입 1 은 최근 가입 회원을 출력하는데 각각 사용하도록 구별해 놓았습니다. 따라서 생일을 이용한다면 0.
●'스킨명'이란 최종 출력될 형태를 스킨식으로 활용코자 해놓은 부분인데 ./bbs/skin/latest/jhoon_latest_member/ 의 하위에 스킨 디렉토리를 만들어 그 이름을 적습니다.
즉, jhoon_latest_member 아래 latebirthday 디렉토리를 만들고 그 안에 skin.php 를 스킨으로 이용할 경우 스킨명에 latebirthday을 적습니다.
스킨은 아래 다시 설명해 놓았습니다.
●'며칠후'란 앞으로 몇 일 이내에 다가올 생일자를 표시한다고 했을 때 그 몇 일에 해당되는 숫자입니다. 이것을 통해서 검색 종료일이 정해집니다.
●'며칠전'이란 몇 일 생일이 지난 사람도 표시해 주자는 의미로 그 몇 일을 숫자로 적어 줍니다. 이것을 통해서 검색 시작일이 정해집니다.
*/
global $REQUEST_URI, $sort, $con;
$path = "./bbs/skin/latest/jhoon_latest_member"; // 끝에'/'는 넣지 마세요.
if ($kind == 0) { //생일자 검색 타입일 경우
$begin_date = date("Ymd", time() - 24 * $prev_term * 3600); // 검색 시작 일
$begin_year = date("Y", time() - 24 * $prev_term * 3600); // 검색 시작 일이 속한 년도
$end_date = date("Ymd", time() + 24 * $next_term * 3600); //검색 종료 일
$order = "solar_date";
if ($sort) $order = $sort;
$condition = $con;
/*
가장 핵심적 부분이 될 것 같습니다.
아래 select문 설명 :
회원의 생일이
①양력이면서 '검색시작일 <= 회원의'올해'생일 < 검색종료일'
②음력이면서 '검색시작일 <= 회원의'올해'양력생일 < 검색종료일'
③양력이면서 '검색시작일 <= 회원의'내년'생일 < 검색종료일'
④음력이면서 '검색시작일 <= 회원의'내년'양력생일 < 검색종료일'
위의 네 경우 중 어느 한 경우에도 해당되는 것이 있다면 그 회원은 $result 에 담는다.(즉 출력됨)
참고 : 아래 보시면 mb_open = '1' 이라는 부분은 정보 공개에 동의 한 회원에 한 함을 의미합니다.
그리고 앞서 말씀드렸던 음력<->양력 변환 디비 테이블을 여기서 활용하게됩니다.
*/
$sql = "
select mb_name, mb_birth, mb_sex, solar_date, to_days(solar_date) - to_days(curdate()+0) from gb_member, LunarToSolar where
(mb_open = '1' and
mb_sex = 'M' and
insert(mb_birth, 1, 4, $begin_year) = replace(solar_date, '-', '') and
$begin_date <= insert(mb_birth, 1, 4, $begin_year) and
insert(mb_birth, 1, 4, $begin_year) < $end_date) or
(mb_open = '1' and
mb_sex = 'F' and
insert(mb_birth, 1, 4, $begin_year) = replace(lunar_date, '-', '') and
$begin_date <= replace(solar_date, '-', '') and
replace(solar_date, '-', '') < $end_date) or
(mb_open = '1' and
mb_sex = 'M' and
insert(mb_birth, 1, 4, $begin_year+1) = replace(solar_date, '-', '') and
$begin_date <= insert(mb_birth, 1, 4, $begin_year+1) and
insert(mb_birth, 1, 4, $begin_year+1) < $end_date) or
(mb_open = '1' and
mb_sex = 'F' and
insert(mb_birth, 1, 4, $begin_year+1) = replace(lunar_date, '-', '') and
$begin_date <= replace(solar_date, '-', '') and
replace(solar_date, '-', '') < $end_date)
order by $order $condition
";
if ($con == "DESC") $condition = "ASC"; //스킨 차원에서 항목별 소팅을 지원키 위해
else $condition = "DESC";
$REQUEST_URI = str_replace(strchr($REQUEST_URI, "&sort"), "", $REQUEST_URI); //스킨 차원에서 항목별 소팅을 할 경우 주소가 지저분해 지는 것을 막기 위해 이런 어설픈 꽁수를..
}
elseif ($kind == 1) { //최근 회원 검색 타입
$to_date = date("Ymd", time()); //오늘
$begin_date = date("Ymd", time() - 24 * ($prev_term + 1) * 3600);
$sql = "
select count(*)
from gb_member
where mb_open = '1' and
'$begin_date' < date_format(mb_datetime, '%Y%m%d') and
date_format(mb_datetime, '%Y%m%d') <= '$to_date'
order by mb_datetime DESC
";
$result=mysql_query($sql) or die(mysql_error());
$data=mysql_fetch_array($result);
$recentcount = $data[0];
$sql = " select count(*) from gb_member ";
$result=mysql_query($sql) or die(mysql_error());
$data=mysql_fetch_array($result);
$totalcount = $data[0];
$sql = "
select mb_name, mb_datetime, to_days(curdate()+0) - to_days(right(left(mb_datetime, 10), 8))
from gb_member
where mb_open = '1' and
'$begin_date' < date_format(mb_datetime, '%Y%m%d') and
date_format(mb_datetime, '%Y%m%d') <= '$to_date'
order by mb_datetime DESC
";
}
$result=mysql_query($sql) or die(mysql_error());
include "$path/$skin/skin.php"; //스킨을 로딩 합니다.
}
?>
여기 까지 입니다. 아, 그리고
스킨은 이렇게 활용합니다.
먼저 여기서 말하는 스킨은 그누 보드의 스킨과는 전혀 무관합니다. 그냥 여기 만의 스킨일 뿐입니다.
스킨의 위치는 본 함수파일(jhoon_latest_member.php)이 들어 있는 디렉토리의 하위에 있어야 하고요.
스킨의 이름은 디렉토리 이름과 같습니다.
그리고 디렉토리 안에 skin.php 파일만 로딩합니다. 다른 이름으로 바꾸시기를 원하시면 함수 안의 해당 부분도 수정해 주세요.
스킨은 괜히 했나 싶기도 합니다. 너무 복잡해 진 감도 있네요.
<첨부 파일 설명>
(1) 첫번째 파일의 압축을 푸시면 나오는 디렉토리(이 디렉토리를 통채로 ./bbs/skin/latest/ 안에 카피해주세요) 안에 파일 한개와 서브 디렉토리 3개가 나옵니다.
그 파일 한개는 위의 소스가 담긴 파일이고요, 서브 디렉토리는 스킨입니다. 3가지가 있는데요,
먼저 latebirthday 는 최근 생일자 들이 아래에서 위로 스크롤 되면서 올라가는 스킨이구요.
저는 생일자 명단이 들어갈 위치에 <? jhoon_latest_member("최근 생일자", 0, "latebirthday", 31, 7) ?> 식으로 사용했습니다.
위로 스크롤 되는 부분은 자바스크립트입니다. 소스는 daum.net 에 보시면 뉴스 나오는 부분의 소스를 그대로 옮긴 것입니다. 원 제작자에게 먼저 양해를 구합니다. 그런데 왜 이것을 편리한 마퀴 태그를 버리고 자바스크립트 소스를 찾았는가 하면요, 마퀴태그가 넷스케이프에서 작동을 안하는 이유도 있겠지만 마퀴 태그와 플래시로 만든 버튼이 같은 페이지에 있을 경우 충돌이 난다는 것을 이 번에 처음 알았습니다. 버튼 위로 가면 마우스 커서가 손모양 변해야 하는데 그 손모양의 마우스 커서가 제대로 보여지지 않습니다(마구 떨린다든지, 손모양 아닌 일반화살표모양커서가 나온다든지). 참고하시구요. 해결책은 도저히 찾을 수 없었습니다. 아시는 분 계시면 알려주세요. 그래서 할 수 없이 자바스크립트를 이용했습니다.
다음 birthdayview 는 최근 생일자 들이 표로 정리되어 화면에 나타나 지도록 했는데요.
<? jhoon_latest_member("최근 생일자", 0, "birthdayview", 365, 31) ?> 이런 식으로 호출해서 썼습니다. 보시면 아시겠지만 생일이 31일 지난 사람부터 앞으로 365일이내 생일이 닥치는 회원님을 나타내므로 거의 모든 회원의 생일이 화면에 나타나도록 했습니다.(거의 모든 회원이라고 말씀 드린 이유는 음력 생일인 경우에 앞으로 1년 동안 생일이 한 번도 없거나 두번인 경우가 종종 발생합니다) 그런데 회원이 한 10만명 쯤 되면 끔찍한 일이 벌어지겠지요. 이럴 경우를 대비해 페이지로 나누는 방법을 연구해야 겠는데, 아직 거기까지는 이르지 못했습니다.
그리고 이름, 오는생일, 남을일수 등의 항목을 클릭하면 소팅이 됩니다. 게시판 처럼 말이죠.
그 다음 latemember는 최근 회원 가입자를 화면에 출력하는 데 사용하려고 만든 스킨인데요.
<? jhoon_latest_member("최근 회원 가입자", 1, "latemember", 0, 5) ?> 식으로 호출해 썼습니다. 즉 타입 1 이고 가입한 지 5일된 회원 부터 오늘 가입한 회원까지 출력되겠지요.
(2) 두번째 파일의 압축을 푸시면 파일이 2개 나오는데
하나는 음력<->양력 디비 원본입니다.(어느 분이 만드셨는지 정말로 감사드립니다)
또 하나는 같은 파일인데 필요한 부분만 발췌한 것입니다. 즉 2003년인가 부터 2015년까지만 살리고 나머지는 삭제한 수정 디비입니다. 앞으로 10년 분량인데 그 때면 또 웹 환경이 많이 변해 있겠죠? 가급적 이것을 올리세요. 웹호스팅에 따라 디비 용량 제한있는 곳도 많을 테니까 말이죠.
여기까지입니다.
제로 보드 쪽에 가봐도 최근 생일자 출력 스킨이 있긴 한데, 음력 양력 전환을 복잡하게 구현했더군요.
차라리 이와같이 sql 의 select 차원에서 해결 하는 것이 더 낫지 않을까 하는 생각이 듭니다.
미진한 부분은 수정하여 사용하시면 더 좋을 것 같습니다.
조금이라도 도움이 되셨으면 좋겠습니다.
오자도 많을 텐데, 끝까지 읽어 주셔서 감사합니다.
추천
0
0
댓글 전체
좋네요~ 많이 수고 하셨어요~~
감사합니다.