old

페이징 구현하기

조회 수 221 댓글 9

어제 글을 올렸었는데 비공개해야 할 부분이 노출되어 다시 질문드립니다.

네이버 검색 키워드광고처럼  처럼 업체리스트를 노출하고자 합니다.

 

참고페이지
    http://pumpia.com 들어가서 
    부스터펌프    부스터펌프시스템  들어가서 하단 페이징 부분 확인 하시면 됩니다.

     http://pumpia.com/?mid=company_list&keyword=부스터

 


구성형태
xe 메뉴 :  mid=company_list&keyword= '태그명'   ← xe의 2차메뉴 
                http://pumpia.com?mid=company_list&keyword=부스터
                http://pumpia.com?mid=company_list&keyword=스테인레스펌프
                .

                .
업체리스트 :  업체명/업체소개/홈페이지/전화번호/등등 /태그(tag)
                     입력받은 값이 company 라는 테이블로 저장됨.



제어방식
xe의 2차메뉴를 위처럼 url링크 형태로 태그값을 등록하여 메뉴를 생성
업체리스트 등록시 태그명이 xe 2차메뉴와  동일하면 출력 하도록 함.

 

출력형태
   핫포커스   배너

   포커스      배너

   사이트      업체리스트 항목  (막히는 부분)

 

==============================================================


문제점

현재 페이징 형태가지는 됩니다.  하지만 페이징에서 페이지 번호 링크가 잘 안되네요...
xe의 메뉴를 불러오는 변수처리를  어떻게 해야 하는 지 고수님들의 답변 부탁드립니다.

결과적으로   <a href='".$_SERVER[PHP_SELF]."?page="    요부분을 어떻게 처리해야 하는지 궁금합니다.

 

<div id="title">포커스</div>
<?

  $Sql="select * from xe_documents where  tags like '%$keyword%' and module_srl=1627 and category_srl=1634";

      $rResult = mysql_query($Sql);

while($R=mysql_fetch_array($rResult)) 
{
$data=@mysql_fetch_array(mysql_query("select * from xe_files where  upload_target_srl=$R[document_srl]"));
$data2=@mysql_fetch_array(mysql_query("select * from xe_document_extra_vars where   document_srl=$R[document_srl] and eid='url_link'"));    
    ?><a href="<?=$data2?>" target=_blank><img src="<?=$data[uploaded_filename]?>" id="focus" onmouseover="this.style.border='1px #191919 solid'" onmouseout="this.style.border='1px #dedede solid'" style="border:1px #dedede solid;"></a>
    <?
    
     } ?>


 <br><br>
 <hr />
 <br>
<div id="title">사이트</div>




<?

// 3.디비와 연결
    $connect = mysql_connect("localhost","메롱","메롱") or die(mysql_error());


// 4.데이터베이스 선택
mysql_select_db("메롱") or die(mysql_error());

// 여기서 부터 페이징 관련

// 5. 현재 페이지 변수정리

if($_GET[page] && $_GET[page] > 0){
    // 현재 페이지 값이 존재하고 0 보다 크면 그대로 사용
    $page = $_GET[page];
}else{
    // 그 외의 경우는 현재 페이지를 1로 설정
    $page = 1;
}

// 6.페이지 기본 설정
// 한 페이지에 보일 글 수
$page_row = 5;
// 한줄에 보여질 페이지 수
$page_scale = 5;


// 7. 전체 글 수 구하기
 $query_total="select count(*) as cnt from company where (company like '%$keyword%' or tag like '%$keyword%') and display='yes'";
$result_total = mysql_query($query_total, $connect);
$data_total = mysql_fetch_array($result_total);
$total_count = $data_total[cnt];

// 8. 전체 페이지 계산
$total_page  = ceil($total_count / $page_row);

// 9. 시작 열을 구함
$from_record = ($page - 1) * $page_row;

// 10. 페이징을 출력할 변수 초기화
$paging_str = "";



// 11. 처음 페이지 링크 만들기
if ($page > 1) {
    $paging_str .= "<a href='".$_SERVER[PHP_SELF]."?page=1'>처음</a>";
}

// 12. 페이징에 표시될 시작 페이지 구하기
$start_page = ( (ceil( $page / $page_scale ) - 1) * $page_scale ) + 1;

// 13. 페이징에 표시될 마지막 페이지 구하기
$end_page = $start_page + $page_scale - 1;
if ($end_page >= $total_page) $end_page = $total_page;

// 14. 이전 페이징 영역으로 가는 링크 만들기
if ($start_page > 1){
    $paging_str .= "  <a href='".$_SERVER[PHP_SELF]."?page=".($start_page - 1)."'>이전</a>";
}

// 15. 페이지들 출력 부분 링크 만들기
if ($total_page > 1) {
    for ($i=$start_page;$i<=$end_page;$i++) {
        // 현재 페이지가 아니면 링크 걸기
        if ($page != $i){
            $paging_str .= "  <a href='".$_SERVER[PHP_SELF]."?page=".$i."'><span>$i</span></a>";
        // 현재페이지면 굵게 표시하기
        }else{
            $paging_str .= "  <b>$i</b> ";
        }
    }
}

// 16. 다음 페이징 영역으로 가는 링크 만들기
if ($total_page > $end_page){
    $paging_str .= "  <a href='".$_SERVER[PHP_SELF]."?page=".($end_page + 1)."'>다음</a>";
}

// 17. 마지막 페이지 링크 만들기
if ($page < $total_page) {
    $paging_str .= "  <a href='".$_SERVER[PHP_SELF]."?page=".$total_page."'>맨끝</a>";
}
// 여기까지 페이징

// 18.쿼리문 작성
$query = "select * from company where (company like '%$keyword%' or tag like '%$keyword%') and display='yes' limit " .$from_record.", ".$page_row;

// 19.쿼리문 적용하여 $result 에 대입
$result = mysql_query($query, $connect);

// 20.데이터 갯수 체크를 위한 변수 설정
$i = 0;

// 21.데이터가 있을 동안 반복해서 값을 한 줄씩 읽기
while($R = mysql_fetch_array($result)){
?>

 

 

Atachment
첨부 1
  • profile
    비누남어 2016.06.29 14:35:11
    도움 주실분이 정년 없으신가요? ㅠㅠ
  • profile
    Double'U' 2016.06.29 15:02:14
    58줄의 쿼리문을 보면..
    $query_total="select count(*) as cnt from company where (company like '%$keyword%' or tag like '%$keyword%') and display='yes'";

    이렇게 되어있는데 company가 아닌 xe_documents이어야 하고, where절도 맨 위쪽과 동일하게 맞춰줘야 전체 글수가 제대로 나오겠죠..

    뭔가 안될때는 줄마다 결과값을 echo로 출력해서 보세요.
    예를 들어 61줄에
    echo $total_count;
    이렇게 확인해보면 전체 글수를 제대로 가져왔는지 알수 있겠죠.
  • profile
    비누남어 2016.06.29 15:17:22

    위코드로 현재 페이징까지는 구현이 됩니다.

    서브메뉴 링크주소가
    http://pumpia.com/index.php?mid=company_list&keyword=부스터

    페이지 넘버 클릭 시 

    http://pumpia.com/index.php?mid=company_list&keyword=부스터&page=1
    http://pumpia.com/index.php?mid=company_list&keyword=부스터&page=2
    http://pumpia.com/index.php?mid=company_list&keyword=부스터&page=3
    .
    .

    이렇게 링크가 걸려야 하는데 ... 서브메뉴 불러오는 방법을 모르겠습니다.
    76줄, 88줄 을 보면 <a href='".$_SERVER[PHP_SELF]."?page=1'> 이런식으로 나와있는데..
    index.php?mid=company_list&keyword= 를 어떻게 불러오는지 모르겠습니다.

  • profile
    Double'U' 2016.06.29 17:41:29
    댓글쓰다가 날라갔네요.. ㅠㅠ
    저는 메타테그에 현재 주소를 넣기 위해서 다음과 같이 사용합니다.
    <meta property="og:url" content="http://<?=$_SERVER['HTTP_HOST']?><?=$_SERVER['REQUEST_URI']?><?=$_SERVER['QUERY_STRING']?>">

    도메인부분은 필요없을테고, php내부에서 동작한다면
    .$_SERVER['REQUEST_URI'].$_SERVER['QUERY_STRING']."?page=".$i
    이렇게 하고 싶지만...
    $_SERVER['QUERY_STRING']이 ?로 시작하니
    if문으로 $_SERVER['QUERY_STRING']의 값을 가지고 분기시켜서 ?또는 &로 넣어주면 될듯 합니다.


    echo로 $_SERVER['QUERY_STRING'] 같은 값을 출력해서 확인해보시면서 해보세요.
  • profile
    윤삼 2016.06.29 16:52:36
    저도 잘은 모르는데, PHP_SELF로 하면 해당 php파일 경로 이후의 mid값과 keyword값이 다 날아가지 않나요?
    REQUEST_URI나 QUERY_STRING로 파라미터값을 보존하더라도 1페이지나 2페이지 들어간 다음엔 페이지네이션 링크가 중복될 것 같고...
    php.net에서 $_SERVER을 참조해보시죠.
  • profile
    비누남어 2016.06.29 17:19:46
    아니요 PHP_SELF , $_SERVER 모두 안 먹히더라구요....
  • profile
    GG 2016.06.29 17:29:37

    질문이 무엇이신지 잘 이해가 안됩니다만,
    지금 저 코드가 XE 외부페이지로 구현하시려고 하신 것인가요?
    아니면 그냥 PHP 개발만 생각하고 답변 드리면 되는건가요?
    만약 XE 내부로 들어가는 외부페이지 코드라면 Context 를 초기화 한 후 Context::get('mid') 하시면 주소창의 company_list 를 가져올 수 있구요.
    그냥 PHP 개발이라면 $_GET['mid'] 하면 company_list 를 가져올 수 있지 않을까요?
    도메인이나 기타 주소는 그냥 상대경로로 주셔도 될 것 같아요. 예) ./index.php?mid=company_list&keyword=부스터
    제가 질문을 잘 이해 못해서 헛소리 하는 것일수도 있습니다. 양해 바랍니다.

  • profile
    비누남어 2016.06.29 19:58:49

    네. 맞습니다. 외부문서로 구현됩니다. ex) company_search.php
    일반 db를 페이징하는거는 잘 되는데... xe 메뉴와 키워드 값이 일치하는 걸 뽑아 오는게 처리가 안되는 것 같습니다.

    서브메뉴(키워드) 클릭시 첫페이지는 잘 뿌려집니다. 하지만 뒤에 page=1 , page=2 이런식으로 되야하는데 붙지가 않습니다.
    링크부분에 $_SERVER['REQUEST_URI'] 를 넣으면 주소값을 잘 가지고 오지만 키워드 매칭이 안되는 것 같습니다.
    초짜라서 설명을 제대로 드렸는지도 모르겠네요.. ㅜㅜ

  • profile
    비누남어 2016.07.14 11:53:16
    ㅠㅠ 해결완료! 코드를 잘못 섰었네요...ㅠㅠ ?page(X) > &page (O) 간단한 것을... 이제까지 고생했네요

서버에 요청 중입니다. 잠시만 기다려 주십시오...