블럭 위치 및 검색결과 인덱스 관련 궁금증

미해결질문
suhr 프로필

안녕하세요..

간단한 궁금증이 생겨서 질문해 봅니다

1. 말씀하신 첫번째 블럭이 계산해보면 실제 숫자는 0번째 블럭부터 시작하는거 같은데..

제가 올바르게 이해한게 맞나요?

2.  검색결과를 보여주는 페이지의 경우에는 검색결과 만큼 페이지를 누를 수 있는게 아니라  현재 가지고있는 데이터 페이지 만큼 누를 수 있게 구현이 됬네요

예를들어 데어터가 50개, 한블록당 10개씩 보여주면 5페이지 까지 있을텐데 이 상태에서 검색을 해서 검색결과가 1개건 2개건 상관없이 5페이지 까지 조회가 가능하네요...

제 구현에 문제가 있는건지 원래 이렇게 설계된 건지 궁금합니다...

즐거운 크리스마스 보내세요 :)

남박사 프로필
남박사 6달 전

1. block_num 값은 시작이 0 이 맞습니다. 블럭의 사이즈 이하의 페이지에서는 모두 0이 나오고 블럭 사이즈 보다 큰 페이지로 넘어가야 1로 증가 하게 되어있습니다. 그러나 block_start 는 block_size * block_num 을 계산 후 +1 을 하기 때문에 1부터 시작하는게 맞습니다.

2. 강좌에서는 말씀하신데로 데이터가 50개, 한블럭다 10개씩 보여주면 5페이지가 있고 이 상태에서 검색해서 결과가 1개건 2개건 5페이지까지 조회가 되게 되어있습니다. 다만 뒤의 2~5페이지까지는 클릭이 되지 않게만 처리를 했습니다만 이렇게 페이징 처리를 하는건 전적으로 개발자의 마음입니다. 정해진 정답은 없는거라 그냥 모두 출력이 가능한 상태로 예제를 보여드린것 뿐이고 클릭되지 않는 부분의 코드를 제거해서 아예 출력이 안되게 결론적으로 검색시 1페이지만 나오게 변경하셔도 됩니다.

강좌의 예제는 만약 현재 페이지가 7 이고 블럭사이즈가 5 라면

6, 7, 8, 9, 10

이렇게 페이지가 출력 될텐데 어떤 사이트는 

5, 6, 7, 8, 9

이런식으로 현재 페이지가 무조건 가운데 오게 표기 되는 사이트도 있습니다.

    # 페이지 블럭을 10개씩 표기
    block_size = 10
    # 현재 블럭의 위치
    block_num = int((page - 1) / block_size)
    # 블럭의 시작 위치
    block_start = int((block_size * block_num) + 1)
    # 10의 중간은 5기 때문에 5보다 크면 현재 페이지를 중간으로 위치 시킬 수 있음
    # 좀 더 프로그래밍 스럽게 하려면 이렇게 5라는 상수를 사용하지 않고
    # if page > int(block_size / 2)
    # 이렇게 변수를 그대로 사용하는걸 좀 더 추천
    if page > 5:
        block_start = page - 5
    else:
        block_start = int((block_size * block_num) + 1)

    # 블럭의 끝 위치
    block_last = math.ceil(block_start + (block_size - 1))

위의 내용처럼 구현해서 html 로 넘기면 가운데 표기를 하실 수도 있습니다. 

어쨌든 결론적으로 정해진건 없습니다. 어떤 원리로 구동되는지 이해하셨다면 구현하고 싶은데로 구현하시는게 정답이고 사이트를 많이 보시면서 어떤 스타일로 구현 되었는지도 주의깊게 보시는 습관이 중요하리라 생각됩니다. 궁금하신 사항이 해결 되셨는지 모르겠습니다. 또 궁금한게 생기시면 또 질문주세요 ^^

지식공유자 되기
많은 사람들에게 배움의 기회를 주고,
경제적 보상을 받아보세요.
지식공유참여
기업 교육을 위한 인프런
“인프런 비즈니스” 를 통해 모든 팀원이 인프런의 강의들을
자유롭게 학습하는 환경을 제공하세요.
인프런 비즈니스