테스트 사이트 - 개발 중인 베타 버전입니다

asp 목록보기

· 16년 전 · 1604
글 목 록보기

 
  이제 글도 저장하고 했으니.. 목록을 만들어 보도록 하죠..
  일단.. 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 이긴 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 기타에서 이동 됨]

댓글 작성

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

로그인하기

게시글 목록

번호 제목
13454
29442
13451
13448
13446
13445
13442
13439
13437
13434
13429
13425
13423
13418
13410
13408
13407
13406
29441
13405
13404
13401
13400
13399
13395
13391
29435
13389
13386
13381
13377
13370
13367
13366
13364
13362
29432
29428
13361
13360
13358
13354
13351
29427
13346
13340
13337
13334
13328
13326
13325
13324
13323
29426
13322
13321
13315
29424
13312
29422
25114
13308
13307
13305
13304
25111
29421
13301
13299
13296
13292
13291
13290
13289
13288
13287
13286
13285
13284
29420
13283
13277
13274
13266
13265
13262
13261
13259
13254
13250
29419
13242
13241
13236
13235
29418
29417
13234
13233
13231