6. PHP 홈페이지 만들기 프로그램 메뉴 2

2014.07.10 16:44
저자 : Kurien


5. PHP 홈페이지 만들기 프로그램 메뉴 1에서 나눠 적는다고 해놓고 깜빡해서 이제야 올리네요.

아래의 코드에서 초록색 부분을 제외한 부분은 모두 설명을 했습니다.

오늘은 초록색으로 된 부분을 설명해드리겠습니다.


/programs/index.php


<?php

require_once '../layout.inc';

require_once '../db.php';


$base = new Layout;

$base->link = '../style.css';


$tn=$_GET['tn'];

$onepage=3;


if($_GET['p']==false)

{

$_GET['p']=1;

}


$db = new DBC;

$db->DBI();


if($tn=='') //programs 메인

{

$base->style='

div.left {padding:1%; width:48%;}

div.right { padding:1%; width:48%;}

div.wrap {margin:3% 0; box-sizing:border-box; border:1px solid #ddd; min-height:150px;padding:4%; min-width:300px; width100%;}

div.wrap div {text-align:center;padding:1% 0;}

div.content{margin-top:20px;}

div.paging{text-align:center;}

div.image > div {text-align:center;}

div.image > div  img {min-witdth:300px;width:100%; max-width:100%;}

div.header > h1 {font-size:2em;margin:2% 1%;}

';

$base->content = "<div class='header'><h1>인기 프로그램</h1></div>";

$left = $left."<div class='left' style='float:left'>";

$right = $right."<div class='right' style='float:right'>";

while (list($key, $value) = each($base->pmenu))

{

$db->query = "select no, date, category, title, os, image, licence from programs where category='".$value."' order by no desc limit 0, 1";/* no으로 정렬을 인기순으로 */

$db->DBQ();

$data=$db->result->fetch_row();

switch($data[6])

{

case 1:

$licence='페이웨어';

break;

case 2:

$licence='부분적 프리웨어';

break;

case 3:

$licence='프리웨어';

break;

case 4:

$licence='쉐어웨어';

break;

case 5:

$licence='부분적 쉐어웨어';

break;

default:

$licence='페이지 오류입니다.';

break;

}


if($data!='')

{

if($num==0)

{

$num=1;

$left = $left."

<div class='wrap'>

<div class='image'><div><a href='./view.php?v=".$data[0]."'><img src='.".$data[5]."'/></a></div></div>

<div class='header'><a href='./view?v=".$data[0]."'>".$data[3]."</a></div>

<div class='category'>카테고리 : <a href='./?tn=".$data[2]."'>".$key."</a></div>

<div class='date'>".$data[1]."</div>

<div class='os'>OS : ".$data[4]."</div>

<div class='licence'>라이센스 : ".$licence."</div>

</div>";

} else

{

$num=0;

$right = $right."

<div class='wrap'>

<div class='image'><div><a href='./view.php?v=".$data[0]."'><img src='.".$data[5]."'/></a></div></div>

<div class='header'><a href='./view?v=".$data[0]."'>".$data[3]."</a></div>

<div class='category'>카테고리 : <a href='./?tn=".$data[2]."'>".$key."</a></div>

<div class='date'>".$data[1]."</div>

<div class='os'>OS : ".$data[4]."</div>

<div class='licence'>라이센스 : ".$licence."</div>

</div>";

}

}

}

$left = $left."</div>";

$right = $right."</div>";


$base->content=$base->content.$left.$right."<div style='clear:both'></div>";

} else if($tn=='latest') //latest 부분

{

$db->query = "select count(*) from programs";

$db->DBQ();

$quantity = $db->result->fetch_row();


$limit=$onepage*$_GET['p']-$onepage;


$db->query = "select no, id, date, time, category, title, content, link, os, korean, image, licence from programs order by no desc limit ".$limit.", ".$onepage;

} else

{ $db->query = "select count(*) from programs where category='".$tn."'";

$db->DBQ();

$quantity = $db->result->fetch_row();


$limit=$onepage*$_GET['p']-$onepage;


$db->query = "select no, id, date, time, category, title, content, link, os, korean, image, licence from programs where category='".$tn."' order by no desc limit ".$limit.", ".$onepage;

}


if($tn!='')

{

$base->style='

div.wrap {margin-bottom:10px;border:1px solid #ddd;min-height:400px;padding:8px;}

div.wrap div {padding:8px;}

div.left {float:left;width:50%;}

div.right {float:right;width:40%;width:43%;}

div.header{border-top:3px solid #aaa;border-bottom:3px solid #aaa;}

div.header > h2{margin:0;}

div.content{border:1px solid #ddd;margin-top:10px;min-height:170px;}

div.image {text-align:center;min-height:316px;}

img{max-height:330px;}

div#paging{text-align:center;}

div#paging > a{padding:2px 5px 2px 5px;border:1px solid transparent;}

div#paging > b{padding:2px 5px 2px 5px;border:1px solid transparent;}

div#paging > a:hover{border:1px solid #ddd;}

';


$db->DBQ();

while($data = $db->result->fetch_row())

{

while (list($key, $value) = each($base->pmenu))

{

if($data[4] == $value)

{

$cate = $key;

}

}


$base->content = $base->content."

<div class='wrap'>

<div class='header'><h2><a href='./view.php?v=".$data[0]."'>".$data[5]."</a></h2></div>

<div class='left'>

<div class='name'><b>".$data[1]."</b></div>

<div class='date'>".$data[2]."</div>

<div class='category'>카테고리 : <a href='./?tn=".$data[4]."'>".$cate."</a></div>

<div class='link'>다운로드 페이지 : <a href='".$data[7]."' target='_blank'>연결하기</a></div>

<div class='content'>".nl2br($data[6])."</div>

</div>

<div class='right'>

<div class='image'><a href='./view.php?v=".$data[0]."'><img class='maxwidth' src='.".$data[10]."'/></a></div>

</div>

</div>";

}

$thispage = $_GET['p']; //현재 페이지

$totalpage=(int)ceil ($quantity[0]/$onepage); //전체 페이지

$oneblock = 10; //페이지 블록 한 페이지에 몇개 보일지.

if($thispage>$totalpage)

{

echo "<script>alert('존재하지 않는 페이지입니다.');location.replace('./');</script>";

}



$thisblock = (int)(ceil($thispage/$oneblock)-1);

$lastblock = (int)(ceil($totalpage/$oneblock)-1);

$startnum = (int)($thisblock*$oneblock+1);

$endnum = (int)($thisblock*$oneblock+$oneblock+1);


if($thispage!=1) $paging = $paging."<a href='".$_SERVER['PHP_SELF']."?tn=".$tn."&p=1'><< </a>";

if($thisblock!=0) $paging = $paging."<a href='".$_SERVER['PHP_SELF']."?tn=".$tn."&p=".($thisblock*$lastblock)."'>< </a>";

for($i=$startnum; $i<$endnum; ++$i)

{

if($i>$totalpage) break;

if($i==$thispage) $paging = $paging."<b>".$i."</b>";

else $paging = $paging."<a href='".$_SERVER['PHP_SELF']."?tn=".$tn."&p=".$i."'>".$i."</a>";

}

if($thisblock!=$lastblock) $paging = $paging."<a href='".$_SERVER['PHP_SELF']."?tn=".$tn."&p=".$endnum."'> ></a>";

if($thispage!=$totalpage) $paging = $paging."<a href='".$_SERVER['PHP_SELF']."?tn=".$tn."&p=".$totalpage."'> >></a>";


$base->content = $base->content."<div id='paging'>".$paging."</div>";

}


$base->LayoutMain();

?>


초록색 부분에서는 $tn이 공백이 아닐 때만 실행이 됩니다.

그러므로 $tn이 latest이거나, 카테고리가 존재할 때만 실행이 되는거죠.

먼저 $base->style로 스타일을 지정한 뒤 바로 $db->DBQ();가 나옵니다.


위에 있는 파란색으로 된 부분과 보라색으로 된 부분의 마지막 줄의 $db->query를 DBQ로 전송해주는 역할이죠.


그 다음 while을 이용해서 변수 $date에 $db->result->fetch_row()가 존재하지 않을 때까지 반복합니다.

그리고 while이 하나 더 나오는데, layout.inc 코드에 있는 $pmenu를 $base->pmenu로 출력하고, $key 부분을 $cate에 넣어줍니다.

이렇게 하는 이유는 카테고리에 있는 값이 최신의 경우 latest로 출력되는데 이 while을 거치면 최신으로 출력되는거죠.


그리고 $base->content로 각각의 데이터를 자리잡아줍니다.

이 부분도 while 내부에 있어서 여러번 반복 되므로 $base->content=$base->content.내용으로 합쳐지게끔 했습니다.


그리고 $db->result->fetch_row()로 돌아가던 while 문은 끝나게 되구요.


마지막으로 그 밑부분은 글의 최하단에 존재하는 paging 부분인데, 페이지를 나타내줍니다.


$thispage는 현재 페이지, $totalpage는 전체, 총 페이지

$oneblock은 몇개가 한 블록인지 설정하는건데, 블록이란건 10을 설정했을 때 1~10까지가 한 블록입니다.


다음에 나오는 if문은 현재 페이지가 전체 페이지를 오버했을 경우 존재하지 않는 페이지라는 경고창을 출력합니다.


그리고 $thisblock은 현재 블록이 몇 번 블록인지, $lastblock은 마지막 블록이 몇 번인지,

$startnum은 현재 블록의 첫번째 페이지가 몇번인지(1, 11, 21, 31 같은 번호), $endnum은 마지막 번호가 몇번인지를 나타냅니다.


그렇게 if문과 for문을 이용해서 << < 1 2 3 4 5 6 7 8 9 10 > >>과 같은 페이지를 만들어줍니다.

여기까지가 페이징이고 페이징을 끝으로 초록색으로 된 부분이 끝납니다.


마지막으로 $base->LayoutMain();으로 지금까지 작성된 코드를 화면에 뿌려줍니다.


제가 봐도 엄청 복잡해보이네요 ㅋㅋㅋ


솔직히 이 이상으로 설명을 어떻게 해야할지 모르겠네요;

보시는 분들이 PHP에 대한 지식이 많길 빕니다...


제가 하루에도 몇십번씩 블로그 확인하니 댓글 남겨주시면 그 부분에 대해서 자세히 설명해드릴께요!

모르는 부분은 댓글에 남겨주세요!


다음 포스팅 부분은 /programs/view.php 부분입니다!



http://kurien.speeds.kr 이곳으로 들어가시면 먼저 확인하실 수 있어요~!