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 파일 하나만 수정하면 된다.