6. PHP 홈페이지 만들기 프로그램 메뉴 2
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 이곳으로 들어가시면 먼저 확인하실 수 있어요~!
'Project' 카테고리의 다른 글
8. PHP 홈페이지 만들기 프로그램 글쓰기 1 (16) | 2014.07.19 |
---|---|
7. PHP 홈페이지 만들기 프로그램 메뉴 3 (1) | 2014.07.14 |
5. PHP 홈페이지 만들기 프로그램 메뉴 1 (6) | 2014.07.07 |
4. PHP 홈페이지 만들기 회원가입, 로그인 작성 (37) | 2014.07.04 |
3. PHP 홈페이지 만들기 사이드바 작성 (4) | 2014.07.02 |