asp 목록보기 정보
HTML asp 목록보기
본문


이제 글도 저장하고 했으니.. 목록을 만들어 보도록 하죠..
일단.. DB 에 저장된 정보를 불러와야 해요.. ADO 를 사용해서 불러올겁니 다.
우선.. 들어가기에 앞서..
사용자들에게 보여질 화면구성을 HTML로 제작한 다음에, ASP 를 코딩하는것 이 좋을거라고 생각이 됩니다.
그럼.. 여러분이 보기좋게 list 페이지를 구성합니다. 다 하셨다면.. 이제 목록페이지를 만들어보도록하겠습니다.
<%
table = request("table")
'Get 방식으로 넘어온 table값을 변수 table 에 저장 합니다.
if table <> "" then
'table 변수에 저장된 값이 없지 않다면.. 쉽게.. 저 장된 값이 있으면..
session("table")= table
'table 변수에 저장된 값을 Session 변수에 넣어줍니다.
end if
if session("table")="" then
'Session변수에 저장된 값이 없을 때..
response.redirect "board.asp"
'board.asp 파일로 이동시킵니다.
end if
%>
INNO BOARD 는 다중게시판입니다. 첨에 목록페이지를 불러올때 GET방식으로 넘어온 테이블 값을 받습니다. 이 값이 변경됨에 따라 서로 한 소스로 여러 게시판을 운영할 수 있는거죠.
Session 변수로 각 테이블을 기억하구요.. 그 변수가 해제되었을경우, 다시 Session 을 설정해 주기위해 board.asp 파일로 이동시키는거죠.
만약, Session 변수가 해제 되었음에도 불구하고, 계속 사용한다면.. Error 가 발생하겠죠? 그걸 막아주기위해 board.asp로 가는겁니다. 조금은 이해가 되셨는지요?
<%
block = request("block")
page = Request("page")
if block = "" then
block=0
end if
if (page = "") then
page = 1
end if
%>
위의 소스 부분은 나중에 유용하게 쓰입니다. 어디에 쓰이느냐...
궁금하시죠??? 아시는 분은 다 아실거라 생각합니다.
바로 페이지셋에 관한 부분입니다.
[이전 10개] [1 2 3 4] [다음 10개]
바로.. 이부분을 위한 것이지요..
이부분은 나중에 페이지셋을 할때 다시 나오니까..
그때 다시 보도록하고.. 넘어가도록 하겠습니다.
<%
Set db = Server.CreateObject("ADODB.Connection")
db.Open dbname
SQL = "SELECT * FROM " & session("table") & " order by re desc, reid asc"
Set rs = Server.CreateObject("ADODB.Recordset")
rs.PageSize = "" & pagesize & ""
rs.Open SQL,db,1
%>
이번엔 DB 연결 부분입니다. 이 부분은 앞 강좌(글저장하기)에서 나왔었죠?
그런데 달라진 점이 있다면, 위의 소스중에..
SQL = "SELECT * FROM ... order by re desc, reid asc"
진하게 표시된 부분입니다.
저부분은 목록을 정리하기 위한 겁니다. 지금부터 알면 좀 복잡해지겠죠?
나중에 다시 알아보도록하고.. 이부분도 넘어갑니다.
<script language="javascript">
<!--
function login(){
window.open ('login.asp','inno','width=330,height=160,toolbar=no,scrollbars=no');
}
function OpenWindow(url,intWidth,intHeight) {
window.open (url, "inno", "width="+intWidth+",height="+intHeight+",resizable=1,scrollbars=1") ;
}
function submit()
{
if (document.inno.search.value == "") {
alert("검색어를 입력해 주세요.");
document.inno.search.focus();
return;
}
document.inno.submit();
}
//-->
</script>
이 부분은 나중에 글읽기에서 새창을 띄워서 볼것이기때문에요.. 새창을 띄 우는 자바스크립트를 소스를 적어줍니다.
그리고 검색를 할때 input 입력란에 검색어를 적었는지 안적었는지.. 확인하 는 스크립트도 있죠? 이 스크립트는 앞에 글쓰기 폼에서 배웠습니다.
그 다음은 글이 저장이 되어 있지 않을때 에러를 발생하는걸 막기 위한 부분 입니다.
데이터가 아무것도 없을때 아래의 소스가 있지 않다면.. 분명히 list.asp 를 불러왔을때 에러를 발생시킬겁니다.
그래서 if 문을 사용하여 에러를 막아줍니다. 어떻게 막아주느냐..
아래의 소스를 보도록 하죠..
<% if rs.BOF or rs.EOF then %>
저장된 데이터가 없습니다.
<% else %>
.. 게시판 목록출력 부분이 들어가는 곳이죠 ..
<% end if %>
rs는 우리가 쿼리한 결과 데이터를 가지고 있는 레코드셋입니다. 레 코드셋 개체의 메소드 중에는 EOF(End Of File)와 BOF(Begin Of File) 가 있습 니다. 레코드의 끝과 처음이라는 의미죠.
즉, 위 문장의 의미는 현재의 레코드셋의 위치가 '레코드의 시작 위치이거 나 레코드셋의 마지막 위치라면' 라는 의미로, 아무 레코드가 없다면 이라는 말고 같은 말이 죠.. 만일 레코드가 없다면 '저장된 데이터가 없습니다.' 라는 문장을 출력해주고 있음을 알 수가 있습니다.
자세한건... list.asp 파일의 소스를 보시면 알 수 있겠죠??
이제 본격적으로 리스트 페이지를 만들어 보도록 하겠습니다.
좀 헤갈리는 분들은 list.asp 파일의 전체 소스를 보시면서 하시면 그나마 이해하시는데 좋을 듯 싶네요..^^
<%
else
rs.Move rs.PageSize * (page-1)
'레코드의 커서를 지정한 페이지의 제일 상단으로 옮 깁니다.
record = rs.RecordCount
'현재 저장되어 있는 레코드 수를 record 변수에 저 장합니다.
pagecount = rs.pagecount
'Pagesize에 맞춰 나누어진 레코드의 총 페이지수를 pagecount에 저장합니다.
rs.AbsolutePage = page
'pagecount 페이지수 중에 현재 보고 있는 페이지를 page 변수에 저장합니다.
%>
위의 소스와 아래의 소스 중간 부분에는 목록의 HTML 화면구성부분이 들어가 죠..
<%
i = 1
Do until rs.EOF Or i > rs.PageSize
name = rs("name")
title = rs("title")
writeday = left(rs("writeday"),8)
tag = rs("tag")
'불러온 데이터를 각각의 변수에 저장합니 다.
if left(now,2) = "20" then
nowday = mid(now,3)
else
nowday = now
end if
if tag = "ok" then
'글저장시 HTML 적용시
title = CheckWord(title)
If Len(title) > 30 Then
title = Mid(title,1,31) & ".."
End If
'제목이 길어질 경우 30자 넘으면 그 이후의 글자 는 ',,'으로 대신합니다.
else
title = replace(title,""","'")
If Len(title) > 20 Then
title = Mid(title,1,21) & ".."
End If
'위에서 설명했으니 아시겠죠?
end if
If Len(name) > 4 Then
name = Mid(name,1,5) & ".."
End If
'이것두 위에서 설명했으니 아시겠죠?
%>



소스에 나와있긴하지만.. Tip 이긴 Tip 이니까.. 하하.. ^^
<% if DateDiff("d",rs("writeday"),nowday) < 2 then %>
바로 이부분인데요..
이 부분은 새로운 글이 올라왔을때 새글이라고 표시할때 쓰입니다.
DateDiff 는 두 시간을 비교하는 함수 입니다.
DateDiff("모드",비교1,비교2)
모 드 | 설 명 | 모 드 | 설 명 |
yyyy | 년 | w | 요일 |
q | 분기 | ww | 주(일년기준) |
m | 월 | h | 시 |
y | 일(일년기준) | n | 분 |
d | 일 | s | 초 |
그래서 위의 소스를 보면..
rs("writeday") 와 현재의 시간인 nowday 를 비교해서 그 사이의 일 (day).. 날짜가 2일전이라면 최근의 글이라는걸 나타내고, 2일이 지났다면 최근의 글이 아니라 는것을 나타냅니다.

<%
rs.Movenext
i = i + 1
Loop
%>
이 부분은 조금 위에서 사용한 do until 문을 만족시켜줄때까지 반복시켜주 는 소스입니다.
이제 여기까지만 하면 목록을 보여지는데에는 아무 문제가 없습니다.
이제 남은건 페이지셋처리입니다.
<%
total_block = int(pagecount / pageset)
if (pagecount mod pageset) > 0 then
total_block = total_block + 1
end if
total_block = total_block - 1
%>
<% if pagecount > 0 then %>
[
<% if block > 0 then %>
<a href="list.asp?page=<%=(pageset*(block-1)+1)%>&block=<%= (block-1)%>">
<% end if%>
이전 <%=pageset%>개
<% if block >0 then %>
</a>
<%end if%>
]
<% if Cint(total_block) <> Cint(block) then %>
[
<% for Gopage = 1 to pageset %>
<% if int(block*pageset) + Gopage = Cint(page) then %>
<font color=silver><%=(int(block*pageset) + Gopage)% ></font>
<%else%>
<a href="list.asp?block=<%=block%>&page=<%=(int (block*pageset) + Gopage)%>">
<%=(int(block*pageset) + Gopage)%>
</a>
<% end if%>
<% next %>
]
<% else %>
<%
if (pagecount mod pageset) = 0 then
lastpage= pageset
else
lastpage = pagecount mod pageset
end if
%>
[
<% for Gopage = 1 to lastpage %>
<% if int(block*pageset) + Gopage = Cint(page) then %>
<font color=silver><%=(int(block*pageset) + Gopage)% ></font>
<%else%>
<a href="list.asp?block=<%=block%>&page=<%=(int(block*pageset) + Gopage)%>">
<%=(int(block*pageset) + Gopage)%>
</a>
<% end if %>
<% next %>
]
<% end if %>
[
<% if (Cint(total_block) > 0) and (Cint(block) < Cint (total_block)) then %>
<a href="list.asp?block=<%=block+1%>&page=<%=(pageset* (block+1)+1)%>">
<%end if%>
다음 <%=pageset%> 개
<% if (Cint(total_block) > 0) and (Cint(block) < Cint (total_block)) then %>
</a>
<%end if%>
]
<% end if %>
이 부분은 초보 여러분들은 힘이 들거라 생각합니다.
약간 복잡하다는 생각이 들긴하지만.. 계속 보다가 보면.. 어떻게 되는건지 알 수 있을겁니다.
이걸 다 설명할려니.. 좀 복잡해서요.. 이해해 주세요.. ^^
나중에 시간이 되면.. Tip&Tech 코너에 올려놓도록하겠습니다.
위처럼 코딩을 하면.. [이전 10개] [1 2 3 4 5] [다음 10개] 부분은 끝이납니다.
이제 마지막 부분인 [맨끝 글보기] [이전글보기] [글쓰기] [다음글보기] [맨끝 글보기] 의 버튼만 만들어서 링크만 시켜주시면 되겠죠??
이걸로써.. 목록보기의 강좌를 마칩니다.
[이 게시물은 관리자님에 의해 2011-10-31 16:46:12 기타에서 이동 됨]
추천
0
0
댓글 0개