Tip & Tech/php
PHP HomePage Builder
변기환
2010. 7. 14. 09:44
이 강좌가 처음인 분은 이전 강좌를 먼저 참고하기 바란다.
PHP text file 핸들링
HP HomePage Builder - 홈페이지의 구조 알기
전체 디렉토리 구조는 아래와 같다. 아래 구조를 참고로 하여 디렉토리 및 파일을 생성하기 바란다.
- Config : 메뉴설정 파일 위치
- Content : 본문 파일 위치
- 0_1 : 해당 분류의 본문파일
-img : 본문에 필요한 이미지 위치
- 0_2 : 해당 분류의 본문파일
-img : 본문에 필요한 이미지 위치
- Main_img : 메인페이지의 이미지 위치
아래 이미지는 이전 강좌에서 설명한 웹사이트의 일반적인 사용되는 구조다. 먼저 PHP로 프로그램 가능한 부분들을 각각 구현해 보자
파일명 : menu.ini
PHP file 함수는 전체 파일을 읽어서 줄 단위로 반환한다고 했다. 그래서 반복문을 이용해서 각 줄마다 번호를 붙친다.
그 번호를 Top_menu 변수에 저장한다. 선택된 번호를 배열로 읽어서 <<,>> 기호를 기준으로 분리하면 첫번째 배열이 바로 대분류 메뉴가 된다.
그럼 직접 프로그램 해 보자. 위 소스에 몇가지를 추가 했기 때문에 위 소스와 비교하면 쉽게 알 수 있다.
인사말씀은 고유번호는 [0 1] 이 된다. 이를 기준으로 디렉토리를 만들고 해당 디렉토리에 인사말씀에 관련된 html을 디자인 후에 파일명을 0_1.php 로 저장하면 된다.
그럼 이제껏 프로그래밍한 소스를 약간 변형시켜보자.
각 소분류에 필요한 내용이 들어갈 파일명은 대분류코드 + _ + 소분류 코드가 된다. 즉 인사말씀의 코드는 0_1 이므로 0_1 디렉토리를 생성하고 0_1.php 파일에 인사말씀을 디자인하면 된다. 필요한 이미지 역시 다른 페이지들과 중복되지 않도록 0_1 디렉토리 아래 img 디렉토리에 저장하면 된다.
만약 분류들이 변경되더라도 전체 파일을 디자인 할 필요없이 menu.ini 파일 하나만 수정하면 된다.
PHP text file 핸들링
HP HomePage Builder - 홈페이지의 구조 알기
전체 디렉토리 구조는 아래와 같다. 아래 구조를 참고로 하여 디렉토리 및 파일을 생성하기 바란다.
- Config : 메뉴설정 파일 위치
- Content : 본문 파일 위치
- 0_1 : 해당 분류의 본문파일
-img : 본문에 필요한 이미지 위치
- 0_2 : 해당 분류의 본문파일
-img : 본문에 필요한 이미지 위치
- Main_img : 메인페이지의 이미지 위치
아래 이미지는 이전 강좌에서 설명한 웹사이트의 일반적인 사용되는 구조다. 먼저 PHP로 프로그램 가능한 부분들을 각각 구현해 보자
파일명 : menu.ini
회사소개,인사말씀,조직도,오시는길
제품소개,가전제품,주방제품,욕실제품
고객센터,A/S안내,불만접수,1:1게시판
커뮤니티,공지사항,자유게시판,이용후기
제품소개,가전제품,주방제품,욕실제품
고객센터,A/S안내,불만접수,1:1게시판
커뮤니티,공지사항,자유게시판,이용후기
위 메뉴파일을 이용하여 먼저 대분류 메뉴를 생성해 보자. 이전 강좌에서 "PHP file함수는 파일 전체를 읽어서 배열(줄 단위)로 반환한다." 라고 했다.
test.php 파일에 아래의 내용을 코딩 후 웹브라우저로 확인 해 보자
<table border='1' width='100%' align='center'>
<tr>
<td align='center' height='40' width='150'><a href='/'>Home</a></td>
<?
$File = file('./Config/menu.ini');
for($i = 0; $i < sizeof($File); $i++;
{
$Top_menu = split(',',$File[$i]);
?>
<td align='center'><?=$Top_menu[0]?></td>
<?
}
?>
</tr>
</table>
실행 결과PHP file 함수는 전체 파일을 읽어서 줄 단위로 반환한다고 했다. 그래서 반복문을 이용해서 각 줄마다 번호를 붙친다.
그 번호를 Top_menu 변수에 저장한다. 선택된 번호를 배열로 읽어서 <<,>> 기호를 기준으로 분리하면 첫번째 배열이 바로 대분류 메뉴가 된다.
그럼 직접 프로그램 해 보자. 위 소스에 몇가지를 추가 했기 때문에 위 소스와 비교하면 쉽게 알 수 있다.
<table border='1' width='100%' align='center'> <tr>실행 결과
<td align='center' height='40' width='150'><a href='/'>Home</a></td> <? $File = file('./Config/menu.ini'); for($i = 0; $i < sizeof($File); $i++) { $Top_menu = split(',',$File[$i]); ?> <td align='center'><a href='test.php?Top_menu=<?=$i?>'><?=$Top_menu[0]?></a></td> <? } ?> </tr> </table> <? for($i = 0; $i < sizeof($File); $i++) $Menu_item = split(',',$File[$_GET[Top_menu]]); ?> <table border='1' width='100%' align='center'> <tr> <td align='center' height='40' width='100'><?=$Menu_item[0]?></td> </tr> </table>
<table border='1' width='100%' align='center'>
<tr>
<td align='center' height='40' width='150'><a href='/'>Home</a></td>
<?
$File = file('./Config/menu.ini');
for($i = 0; $i < sizeof($File); $i++)
{
$Top_menu = split(',',$File[$i]);
?>
<td align='center'><a href='test.php?Top_menu=<?=$i?>'><?=$Top_menu[0]?></a></td>
<?
}
?>
</tr>
</table>
<?
for($i = 0; $i < sizeof($File); $i++)
$Menu_item = split(',',$File[$_GET[Top_menu]]);
?>
<table border='1' width='100%' align='center'>
<tr>
<td align='center' height='40' width='100'><?=$Menu_item[0]?></td>
</tr>
</table>
<table border='1' width='100%' align='center'>
<?
for($i = 0; $i < sizeof($File); $i++)
{
if($i > 0)
{
$Sub_menu = split(',',$File[$_GET[Top_menu]]);
?>
<tr>
<td align='center'><a href='?Top_menu=<?=$_GET[Top_menu]?>'><?=$Sub_menu[$i]?></a></td>
</tr>
<?
}
}
?>
</table>
실행 결과인사말씀은 고유번호는 [0 1] 이 된다. 이를 기준으로 디렉토리를 만들고 해당 디렉토리에 인사말씀에 관련된 html을 디자인 후에 파일명을 0_1.php 로 저장하면 된다.
그럼 이제껏 프로그래밍한 소스를 약간 변형시켜보자.
<table border='1' width='100%' align='center'>
<tr>
<td align='center' height='40' width='150'><a href='/'>Home</a></td>
<?
$File = file('./menu.ini');
for($i = 0; $i < sizeof($File); $i++)
{
$Top_menu = split(',',$File[$i]);
?>
<td align='center'><a href='test.php?Top_menu=<?=$i?>&Sub_menu=1'><?=$Top_menu[0]?></a></td>
<?
}
?>
</tr>
</table>
<?
for($i = 0; $i < sizeof($File); $i++)
$Menu_item = split(',',$File[$_GET[Top_menu]]);
?>
<table border='1' width='100%' align='center'>
<tr>
<td align='center' height='40' width='100'><?=$Menu_item[0]?></td>
</tr>
</table>
<table border='1' width='100%' align='center'>
<?
for($i = 0; $i < sizeof($File); $i++)
{
if($i > 0)
{
$Sub_menu = split(',',$File[$_GET[Top_menu]]);
?>
<tr>
<td align='center'><a href='?Top_menu=<?=$_GET[Top_menu]?>&Sub_menu=<?=$i?>'><?=$Sub_menu[$i]?></a></td>
</tr>
<?
}
}
?>
</table>
<br />
<table border='1' width='100%' align='center'>
<tr>
<td>다음 파일을 [[ ./Content/<?=$_GET[Top_menu]?>_<?=$_GET[Sub_menu]?>/<?=$_GET[Top_menu]?>_<?=$_GET[Sub_menu]?>.php]] Incude 합니다.
</td>
</tr>
</table>
실행 결과<?
$File = file('./Config/menu.ini');
// 대분류를 불러오는 함수
function Page_Header()
{
Global $File;
?>
<table border='1' width='100%' align='center'>
<tr>
<td align='center' height='40' width='150'><a href='/'>Home</a></td>
<?
for($i = 0; $i < sizeof($File); $i++)
{
$Top_menu = split(',',$File[$i]);
?>
<td align='center'><a href='test.php?Top_menu=<?=$i?>&Sub_menu=1'><?=$Top_menu[0]?></a></td>
<?
}
?>
</tr>
</table>
<?
}
// 선택 된 대분류를 출력하는 함수
function Menu_Item()
{
Global $File;
for($i = 0; $i < sizeof($File); $i++)
$Menu_item = split(',',$File[$_GET[Top_menu]]);
?>
<table border='1' width='100%' align='center'>
<tr>
<td align='center' height='40' width='100'><?=$Menu_item[0]?></td>
</tr>
</table>
<?
}
// 소분류를 출력하는 함수
function Sub_menu()
{
Global $File;
?>
<table border='1' width='100%' align='center'>
<?
for($i = 0; $i < sizeof($File); $i++)
{
if($i > 0)
{
$Sub_menu = split(',',$File[$_GET[Top_menu]]);
?>
<tr>
<td align='center'><a href='?Top_menu=<?=$_GET[Top_menu]?>&Sub_menu=<?=$i?>'><?=$Sub_menu[$i]?></a></td>
</tr>
<?
}
}
?>
</table>
<?
}
// 페이지 하단에 들어갈 내용
function Page_Footer()
{
// include ""; 혹은 내용을 직접 입력
}
?>
그리고 DocumentRoot에 index.php를 아래와 코딩 한다.
<?
include './Config/Lib.php';
?>
<table border='1' width='800'>
<tr>
<td colspan='2'><?Top_menu();?></td>
</tr>
<?
// 대분류가 있으면 메인페이지가 아니므로 선택된 대분류명과 소분류메뉴를 출력하고 소분류 파일을 불러온다.
if(($_GET[Top_menu] != '') || ($_GET[Top_menu]))
{
?>
<tr>
<td colspan='2' height='150'> </td>
</tr>
<tr height='380' valign='top'>
<td width='150'>
<!--- 대분류를 출력하고 --->
<?Menu_Item();?>
<!--- 소분류 메뉴를 출력한다. --->
<?Sub_menu();?>
</td>
<td width='650' valign='top'>
<?
// 대분류 번호와 소분류 번호를 조합하여 폴더명을 구하고 파일명을 구한다음 파일을 Include 한다.
if(is_file('./Content/'.$GET[Top_menu].'_'.$_GET[Sub_menu].'/'.$_GET[Top_menu].'_'.$_GET[Sub_menu].'.php'))
include './Content/'.$GET[Top_menu].'_'.$_GET[Sub_menu].'/'.$_GET[Top_menu].'_'.$_GET[Sub_menu].'/'.$_GET[Top_menu].'_'.$_GET[Sub_menu].'.php';
?>
</td>
</tr>
<?
}
else
{
// 대분류가 없으면 현재 페이지는 메인페이지다.
?>
<tr>
<td colspan='2' height='200'> </td>
</tr>
<tr>
<td height='330'> </td>
</tr>
<?
}
?>
<tr>
<td colspan='2'><?footer();?></td>
</tr>
</table>
디자인 변경은 index.php을 원하는 형태로 디자인 한다. index.php 디자인에 필요한 이미지파일은 Main_img 디렉토리에 두면된다.각 소분류에 필요한 내용이 들어갈 파일명은 대분류코드 + _ + 소분류 코드가 된다. 즉 인사말씀의 코드는 0_1 이므로 0_1 디렉토리를 생성하고 0_1.php 파일에 인사말씀을 디자인하면 된다. 필요한 이미지 역시 다른 페이지들과 중복되지 않도록 0_1 디렉토리 아래 img 디렉토리에 저장하면 된다.
만약 분류들이 변경되더라도 전체 파일을 디자인 할 필요없이 menu.ini 파일 하나만 수정하면 된다.