공지가 있을때까지 구매요청/제휴/견적요청을 받지 않습니다.

특강. [그누보드를 알자3] 그누보드 스킨(board-write.skin.php) > PHP 강좌

본문 바로가기
사이트 내 전체검색

HOT - 펜션예약솔루션 - 그누보드5

HOT - 중고차매매솔루션 - 그누보드5

HOT - 중고차매매솔루션 - 그누보드4

HOT - 펜션예약솔루션 - 그누보드4

NEW - 인터넷뉴스 솔루션 - 그누보드5

계좌정보

  • 국민 : 028201-01-019932
  • 대구 : 068-07-021683-8
  •  
  • 예금주 : 림소프트/김상림
  •  

파트너쉽

PHP 강좌

특강. [그누보드를 알자3] 그누보드 스킨(board-write.skin.php)

페이지 정보

작성자 rimsoft 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 작성일12-03-21 00:58 조회22,249회 댓글2건

본문

오늘의 게시판 스킨파일에 대해 알아보겠습니다.

skin/board/basic/

1. _common.php - 루트의 common.php 파일 찾는 파일
2. ajax.filter.php - 제목과 내용에서 기본환경 설정에서 cf_filter 에 입력된 단어를 필터링
3. list.skin.php - 글 목록
4. view.skin.php - 글 내용 보기
5. view_comment.skin.php - 코멘트(댓글) 파일
6. write.skin.php - 글 작성 파일


스킨제작과 실질적으로 관련되는 3,4,5,6 번 파일에 대해서만 살펴보도록 하겠습니다.

먼저, 기본적인 html을 숙지하고 있다는 가정하게 진행이 되므로, 아닌경우 이해에 어려움이 있을수 있습니다.


write.skin.php

소스를 열어 보면

//상단생략
....
<form name="fwrite" method="post" onsubmit="return fwrite_submit(this);" enctype="multipart/form-data" style="margin:0px;">
<input type=hidden name=null> 
<input type=hidden name=w        value="<?=$w?>">
<input type=hidden name=bo_table value="<?=$bo_table?>">
<input type=hidden name=wr_id    value="<?=$wr_id?>">
<input type=hidden name=sca      value="<?=$sca?>">
<input type=hidden name=sfl      value="<?=$sfl?>">
<input type=hidden name=stx      value="<?=$stx?>">
<input type=hidden name=spt      value="<?=$spt?>">
<input type=hidden name=sst      value="<?=$sst?>">
<input type=hidden name=sod      value="<?=$sod?>">
<input type=hidden name=page     value="<?=$page?>">
....

<? if ($is_name) { ?>....
...
...
생략
....
<? } ?>

</table>

<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
    <td width="100%" align="center" valign="top" style="padding-top:30px;">
        <input type=image id="btn_submit" src="<?=$board_skin_path?>/img/btn_write.gif" border=0 accesskey='s'>&nbsp;
        <a href="./board.php?bo_table=<?=$bo_table?>"><img id="btn_list" src="<?=$board_skin_path?>/img/btn_list.gif" border=0></a></td>
</tr>
</table>

</td></tr></table>
</form>
...
...
생략
....

function fwrite_submit(f) 
{
...
생략
....
document.getElementById('btn_submit').disabled = true;
    document.getElementById('btn_list').disabled = true;

    <?
    if ($g4[https_url])
        echo "f.action = '$g4[https_url]/$g4[bbs]/write_update.php';";
    else
        echo "f.action = './write_update.php';";
    ?>
    
    return true;

...
생략
....



form 부분과 입력박스 부분 그리고 글작성 완료 후 submit 되기까지 소스를 잘라 놓았습니다.

method는 앞서 강좌에 이야기했으므로 생략하겠습니다.


form 부분에서 hidden 속성은 보이지 않지만, value 값을 전송합니다. hidden이 아니면 기본적으로 text 로 보여지게 됩니다.
첫번째 hidden인 $w 변수는, 빈값이면 새글작성, 글수정시에는 u (update) 값이 넘어옵니다.

bo_table(게시판아이디), wr_id(글번호) 그리고 이하 카테고리와 검색관련, 페이징 변수들이 있습니다.

이들은 기본적으로 넘어오는 값으로 손을 댈 필요가 없습니다.

만약에, 예를들어 제목없이 내용만 작성해서 글을 작성하고 싶다면 wr_subject 입력부분을 제거하고 hidden 타입에 value로 적당히 임의로 입력해놓으면 되겠습니다.

<? if ($is_name) { ?>


is_name 값이 있으면 어떤값인지 저도 찍어보지 않아 알수없지만 짐작으로 회원이면 이름을 입력할 필요가 없으므로 보일필요가 없을테니 그와 관련된 적당한 값이 넘어온다정도로 이해하시면 될겁니다.

이와 다르게 option 이나 is_category 등은, 사용비사용등에 의해 제어되어 그에 맞는 값을 가지고 있습니다. 게시판 설정 배열변수은 $board 에 의해 적당히 요리되어 정의되어 있을겁니다.

여기까지는 대략적으로 그렇구나정도로 이해하시면 됩니다.

이렇게 입력된 값들은

<input type=image id="btn_submit" src="<?=$board_skin_path?>/img/btn_write.gif" border=0 accesskey='s'>


위 글작성 이미지버튼에 의해 글작성이 됩니다.

input type=image 은 submit 버튼을 이미지로 대체할 경우 사용되고 input type=submit 버튼과 같습니다.

submit 한다는 것은 <form></form>태그 내 input,select,textarea등 의 값들을 지정된 action 파일로 전송하겠다는 의미입니다.

여기서 살펴볼 부분은 action될경우 필수항목이나, 기타 자바스크립트를 통해 submit 되기전에 웹페이지상에서 체크를 할수 있습니다.

<form name="fwrite" method="post" onsubmit="return fwrite_submit(this);" enctype="multipart/form-data" style="margin:0px;">


여기서 onsubmit="return fwrite_submit(this);" 이부분에 해당하고, onsubmit 이벤트를 통해 하단부에 정의된 fwrite_submit()함수를 실행한후 submit 하라는 뜻이됩니다.


그리고 return fwrite_submit(this) 에서 return 은, fwrite_submit 함수내에서 실행될 때 return 되는 값을 받겠다는 의미로 이해하시면 됩니다. 즉, 자바스크립트 함수내에서 아무리 return 으로 값을 넘겨도 onsubmit="fwrite_submit(this);" 이렇게 해놓으면 return 값을 못받아 별 의미가 없게 됩니다. 그리고 onsubmit 이벤트는 form 태그내에서만 사용됩니다.

그리고 this 부분은 form 태그에서 this를 인자로 하게되면 현재의 form name을 넘기겠다는 의미로 됩니다.
만약, form 태그가 아닌 일반 input type=submit 같은 곳에서 form이름을 넘긴다면 this.form 으로 하면 되고, this라는 놈은 반드시 form 과 관련된 태그 내에서만 사용이 가능하고(input,select,textarea)등 아래와 같이 비슷하게 사용가능합니다.

<input type="submit" onclick="return fwrite_submit(this.form);">

<img src="..." onclick="return fwrite_submit(document.formname);">


this와 다르게 .form 더 붙었습니다. 그리고 이미지 태그에 붙였을 경우 입니다. 같은 기능을 합니다.


여기까지 이해를 하셨다면 이제 자바 스크립트 함수(fwrite_submit())를 살펴봐야겠지요?

이 함수는 필수항목이나, 기타 글작성된 것이 올바르게 된것인지등 여러가지를 체크하도록 되어있습니다.

이렇게 submit 되기전에 웹페이지에서 자바스크립트를 통해 체크(걸러내는)하는 것을 1차 필터링이라 이야기합니다.

만약, 자바스크립트에서 에러가 나면 wr_id 변수를 사용할수 없습니다?라는 문구가 뜨므로, 잘 체크가 되어야겠지요.

스크립트 함수의 상단부는 일반적 필터링이 나오고 action경로등 submit 관련되는 것은 하단부에 나옵니다.

스크립트의 가장 하단에 return true; 부분이 읽혀지면 true를 리턴하게되어 정해진 파일경로로 submit 됩니다.

이로서, wirte.skin.php 파일에서 역할로 필요한 부분들만 살펴봤습니다. form에서 submit 되기까지 이해하기 위한 파일로 설명을 드릴려고 했습니다만, 도움이 되셨는지요?


부가적으로

만약, 새로운 입력값을 받아 전송하고자 한다면 어떻게 할까요?

<form></form> 태그내에서 적당한 곳에 아래와 같이 줄수 있겠습니다.

<input type=text name=wr_1 size=12 value="<?=$wr[wr_1]?>">


wr_1~10 필드값은 그누보드 게시판 생성시 기본적으로 주어지는 비어진 필드들로 별도 추가필드 없이 사용이 가능합니다.

만약, 새로운 필드명으로 생성후 사용하고자 할때에는 스킨내에 트랙백이 실행되기전이라면 write_update.skin.php 파일 이후라면 write_update.tail.skin.php 파일을 만들어 사용할수 있습니다.

만약, wr_area 라는 필드를 새로 생성하여 위 예제와 같이 사용하였다면, 아래와 같이 주어 write_update.skin.php 이름으로 저장하면 됩니다.

$sql = " update $write_table set wr_area = '$wr_area' where wr_id = '$wr_id' ";
sql_query($sql);

alert("신청해 주셔서 감사합니다.",$g4[path]);//alert 문구 처리후 루트로 이동


앞서 강좌에 이야기가 있었습니다만, update 는 해당테이블에 글 수정할 경우 사용이 되는 mysql 명령어이고, where 이하 조건절로 wr_id 는 글작성되고 난후 실행이 되므로, 작성된 글번호가 저장되어 넘어옵니다.

....
$wr_id = mysql_insert_id();//327 line
....


즉, 만든 write_update.skin.php 파일은 form에서 submit 되면 bbs/write_update.php 파일에서 insert 글작성되어(DB에 저장) 넘어오기 때문에 작성됐던 글번호(wr_id)로 다시 글수정을 한다는 의미가 됩니다.

그런후 write_update.skin.php 파일에서 alert() 함수를 통해 신청글이 작성됐습니다라는 문구를 삽입하게 되면 신청게시판이 만들어 지는 것입니다.

그러나, 위 예제는 단순히 사용하는 경우이고, 특별히 생성하여 넘겨지거나 submit 되어 insert되기전이나 후에 원하는 로직으로 프로그램하여 만들어 저장하면 write_update.php 파일수정없이 커스터마이징이 가능하게 되겠습니다.

개인적으로 객체 지향적인 class로 된 솔루션을 커스터마이징 하면서 느낀 부분이 가장 불편한 것이 이런부분과 같이 커스터마이징에 문제였습니다. 그누보드는 1번 손이 간다면 여러번 이상 손이 가야하는 불편함이 있었습니다.

물론, 장단점이 있겠지만 그누보드로도 그 어떤것을 구현하는데, 전혀 불편함없이 스킨만으로도 덩치큰 놈을 만들수 있다라는 부분에 가장 매리트가 있다고 할수 있겠습니다.

다음 강좌에는 submit 되는 액션파일인 bbs/write_update.php insert 부분을 잠시 살펴 본후, view.skin.php 파일을 한번 보도록 하겠습니다.

[팁] form 태그에서 enctype="multipart/form-data" 부분은 form에서 파일을 첨부할 경우 반드시 포함해야 하는 타입설정부분입니다.

댓글목록

INBEST님의 댓글

INBEST 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물

배움에 망서리는 그 순간, 당신은 평생3류인생 >> 나
즐거운 마음으로 CSS3와 함께하는 스킨 깨부수기 ... ㅎㅎㅎ ^^;

Total 18건 1 페이지
PHP 강좌 목록
번호 제목 글쓴이 날짜 조회
공지 강좌 들어가기전에.. 댓글6 인기글 rimsoft 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 02-11 3162
17 php 초급에서 반드시 짜 보아야 할 것들 댓글1 인기글 rimsoft 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 07-09 3680
16 알고리즘과 경우의 수 인기글 rimsoft 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 06-02 3379
15 그누보드 게시판 테이블 그리고 댓글 댓글2 인기글 rimsoft 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 05-02 6814
14 웹표준? 댓글2 인기글 rimsoft 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 04-13 2940
13 특강. [그누보드를 알자4] 그누보드 스킨(board-list.skin.php) 댓글2 인기글 rimsoft 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 04-07 6085
열람중 특강. [그누보드를 알자3] 그누보드 스킨(board-write.skin.php) 댓글2 인기글 rimsoft 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 03-21 22250
11 특강. [그누보드를 알자2] 그누보드 스킨 댓글3 인기글 rimsoft 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 03-14 8515
10 특강. [그누보드를 알자1] 그누보드 루트파일들 댓글3 인기글 rimsoft 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 03-08 7529
9 7강. 썸네일 댓글5 인기글 rimsoft 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 03-07 3273
8 6강. 중간 마무리 댓글2 인기글 rimsoft 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 03-03 2310
7 5강. html에서 form 개념과 php, mysql 연관성 댓글3 인기글 rimsoft 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 02-27 4555
6 4강. [문법] 반복문 for, while 댓글7 인기글 rimsoft 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 02-25 3250
5 [그누보드관련] 쉬는 타임 댓글3 인기글 rimsoft 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 02-21 3368
4 3강. [문법] 조건문 if, else, elseif, switch 인기글 rimsoft 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 02-18 10938
게시물 검색

접속자집계

오늘
17
어제
82
최대
425
전체
358,799
그누보드5

림소프트 / 515-08-36933 / 제2014-경북경산-00079 / 양명주 / ifnelse@gmail.com
© Copyright rimsoft.co.kr . All Rights Reserved.

댓글이 달렸습니다.

모바일 버전으로 보기