[1원짜리팁] 여분필드 쪼개쓰기 간편 방법 > 그누4 팁자료실

그누4 팁자료실

그누보드4와 관련된 팁을 여러분들과 함께 공유하세요.
나누면 즐거움이 커집니다.

[1원짜리팁] 여분필드 쪼개쓰기 간편 방법 정보

[1원짜리팁] 여분필드 쪼개쓰기 간편 방법

본문

쓰기폼에 체크박스 및 입력항목이 많아서 기존 여분필드 갯수가 부족한데
필드를 더 이상 추가하지않고 사용하기 위하여 아래와 같은 방법을 사용하는 것을 자주봅니다
input type=txt name=ex1 value='<?=$ex1?>'>
input type=txt name=ex2 value='<?=$ex2?>'>
input type=txt name=ex3 value='<?=$ex3?>'>
~
~

등록할 때
$wr_1=$ex1.'|'.$ex2.'|'.$ex3;
$wr_2=$ex4.'|'.$ex5.'|'.$ex6.'|'.$ex7;
~
~
사용할 때
$wr1 = explode("|",$write[wr_1]);
$ex1 = $wr1[0];
$ex2 = $wr1[1];
$ex3 = $wr1[2];

$wr2 = explode("|",$write[wr_2]);
$ex4 = $wr2[0];
$ex5 = $wr2[1];
$ex6 = $wr2[2];
$ex7 = $wr2[3];
~
~
------------------------------------------
필드를 성격에 맞게 여분필드마다 항목을 합치는 것이 여간 신경 쓰이는 일이 아닙니다
위처럼 일일이 합치고, 쪼개고 할 필요 없이 간단하게 사용하는 방법입니다
-- wr_1 필드에 쪼개서 쓰는 모든 항목을 ex1=값1|ex2=값2 처럼 저장합니다

write_update.head.skin.php

if(!$w){ //--입력 항목이 아주 많은 경우 wr_1 필드 사이즈 변경(필요없으면 삭제)
$qq=sql_fetch("SHOW COLUMNS FROM $write_table like 'wr_1' ");
if($qq[Type]=='varchar(255)')
sql_query(" ALTER TABLE $write_table CHANGE wr_1 wr_1 text NOT NULL default '' ");
}

$wr_1=$deli=''; //------ wr_1에 저장할 항목을 합침
foreach($_POST as $key=>$value){
if( strpos($key, 'ex')===false) continue;
$wr_1 .=$deli.$key.'='.$value; $deli='|';
}
--------------------------
write.skin.php, view.skin.php 상단에서

$tmp=explode("|",$write[wr_1]); //-- wr_1에 저장된 항목을 분리
foreach($tmp as $key=>$value){
list($key, $value2)= explode('=',$value);
$$key= $value2;
}
list.skin.php에서 사용시
for 문 다음 행에 추가

$tmp=explode("|",$list[$i][wr_1]); //-- wr_1에 저장된 항목을 분리
foreach($tmp as $key=>$value){
list($key, $value2)= explode('=',$value);
$$key= $value2;
}


이렇게 하면 아래 처럼 곧바로 사용할 수 있습니다
출력시
echo "$ex1 - $ex2 -$ex3";
수정시
input type='text' name='ex1' value='< ? = $ex1? >'> <-- 띄워쓰기 아님(붙여쓰면 코드가 나오지않네요)

요점은 저장할 항목 합침, 저장된 항목 분리를 필드항목에 따라 신경 쓸 것없이
무작정 합치고 잘라서 다른 설정없이 곧바로 입력한 항목 값으로 사용한다는 점입니다
추천
8

댓글 20개

스크립트단이나 write.update.skin.php 단에서 정규표현식으로 "|" 글자를 입력방지하는것도 추가하는게 좋을듯싶네요
입력 내용중에 수직바(|)가 들어갈 가능성이 있는 경우 구분문자로는
안쓰이는 특수문자를 사용 하세요
♬ <--이런 것...
균이님 좋은 팁 감사합니다.
사용해보니 너무 잘됩니다
본문에서 출력시 <? echo $ex1; ?>-<? echo $ex2; ?>-<? echo $ex3; ?> 이렇게 하니깐 잘 나옵니다만
리스트에서는 본문 출력시처럼 하니깐 안나오네요
리스트에서도 보여주고 싶을땐 어떻게 해야하는지 알려주시면 감사하겠습니다
균이님 좋은정보 감사를 드려요~^^*
기존 닉네임(좋은하루여) 화이팅여 입니다^^*

요즈음 여분필드 쪼개서 체크박스 형태로 만들어 쓸려고
노력하고 있었는데 좋은정보 감사합니다


한참전에 만들어주신 지도스킨에서

http://sir.co.kr/bbs/board.php?bo_table=g4_skin&wr_id=138891&sca=&sfl=wr_subject%7C%7Cwr_content&stx=%EB%A9%80%ED%8B%B0+%EB%A7%88%ED%81%AC

텍스트로 저장하고 . 보여주는것은 잘 되는데
 list에서 체크박스로 체크하여 부분적으로 검색부분을 만들어
 검색해봐도 조건 검색이 안나오고 모두가 다 나와버리네요 스킨 이용해서 추가해볼려고하니까 잘 안돼 끙 끙 그리고 있습니당~
에궁~~
좀 더~ 해보다가 안되면 한번 여쭤 보겠습니당~^^

그래도 균이님 만들어주신 스킨 활용해서 잘~ 사용하고 있습니다
항상감사 마음으로 잘~ 사용하고 있어요~ 감사합니다 균이님^^*
아주 좋은팁이네요... 필드를 확장해도 더 많이 필요한 경우가 있는데 기존 방법보다 아주 간단하고 편리하게 사용 할 수 있네요..
감사합니다.
view, write 에서는 정상적으로 동작이 되는데요.
list 에서는 오류가 납니다.
 
$tmp=explode("|",$list[$i][wr_1]);
foreach($tmp as $key=>$value){
list($key, $value2)= explode('=',$value);
$$key= $value2;
}
위의 소스를 list 스킨의 for 문 다음에 넣고
 
<?php if($ex1 == '테스트') { ?>
<?php echo $ex1; ?>
<?php } ?>
위의 소스를 list 스킨에 for 문 다음에 넣었습니다.
 
게시물이 10개 있다고 하자면 그 중 하나의 게시물이라도 $ex1 값이 "테스트" 이면
list 스킨에서 게시물 10개 모두 $ex1 값이 출력됩니다.
 
// 정상적인 결과
  제목        결과
게시물 1    테스트
게시물 2
게시물 3
게시물 4
게시물 5
...
 
// 비정상적 결과
  제목        결과
게시물 1    테스트
게시물 2    테스트
게시물 3    테스트​
게시물 4    테스트​
게시물 5    테스트​
...
 
이거 어떻게 해결을 해야 하는지요?
이 팁을 적용하기 전의 게시물에서는 wr_1에 값이 없기 때문에 그렇게 됩니다
출력할 때 아래처럼 하세요
<? if($list[$i][wr_1] && $ex1 ) echo $ex1; ?>
균이님 안녕하세요.
위 처럼 소스를 넣어도 해결되지 않습니다.


위의 스샷을 보시면 3번째 게시물은 급처분, 신상품, 미개봉에 대한 값이 없습니다.
이 상태에서는 1, 2, 3 게시물 모두 정상적으로 표시되고 있습니다.


두번째 스샷을 보시면 알겠지만 4번째 게시물에서 급처분, 신상품, 미개봉에 대해서 값을 줬습니다.
그런데 아까전에는 정상적이던 2번째, 3번째 게시물에도 급처분, 신상품, 미개봉 값이 표시되고 있습니다.

이것은 무엇이 문제인지요?
균이님~
꼭 부탁드립니다 ㅠㅠ
정말 좋은 팁인데 list 만 정상적이면
활용할 방법이 무긍무진 하여서요.
정말 부탁드립니다.
균이님 안녕하세요.
지금 테스트를 해보니까 basic 스킨에서는 정상적으로 됩니다.
지금 아미나 스킨에서 문제가 발생을 하는데요.
<?php for ($i=0; $i < $list_num; $i++) {

//첫페이지만 공지사항 나오도록
if($list[$i]['is_notice'] && $page > 1) continue;

//링크 재설정
$href_target = $thumb_target = '';
if($set['list_href_blank']) {
$thumb_target = '_blank';
$href_target = ' target="_blank"';
} else {
$list[$i]['href'] = $list[$i]['href'].$frame_opt;
}

//xp 및 모바일 아이콘
$wr_post = amina_array_write($list[$i]['wr_10']);
$wr_icon = amina_array_icon($list[$i]['wr_5']);

//목록타입
$s_name = $icon_post = '';
if($set['list_qa'] && !$list[$i]['is_notice']) { //질답형
if($list[$i]['icon_secret']) {
$s_name = 's';
$list[$i]['icon_secret'] = '';
}
$icon_post = $list[$i]['icon_reply'] ? ' <img src="'.$list_skin_url.'/img/icon_'.$s_name.'a.gif" alt="" /> ' : ' <img src="'.$list_skin_url.'/img/icon_'.$s_name.'q.gif" alt="" /> ';
}

//블라인드
$is_blind = ($list[$i]['wr_9'] == "lock" || $list[$i]['wr_9'] == "shingo") ? true : false;

//글제목
$list[$i]['wr_subject'] = amina_get_html($list[$i]['wr_subject'],'char');
if($is_blind) {
$list[$i]['wr_subject'] = '블라인드 처리된 글입니다.';
$list[$i]['subject'] = '<span class="blind">'.amina_cut($list[$i]['wr_subject'], $list_subj_len).'</span>';
$icon_post = '<img src="'.$list_skin_url.'/img/icon_shingo.gif" alt="" />';
} else {
if(!$list[$i]['is_notice'] && $is_catesubj) $list[$i]['wr_subject'] = '['.$list[$i]['ca_name'].'] '.$list[$i]['wr_subject'];
$list[$i]['subject'] = amina_cut($list[$i]['wr_subject'], $list_subj_len);
if($wr_post['subj_s']) $list[$i]['subject'] = '<del>'.$list[$i]['subject'].'</del>';
if($wr_post['subj_b']) $list[$i]['subject'] = '<b>'.$list[$i]['subject'].'</b>';
if($wr_post['subj_i']) $list[$i]['subject'] = '<i>'.$list[$i]['subject'].'</i>';
if($wr_post['subj_color']) $list[$i]['subject'] = '<span style="color:'.$wr_post['subj_color'].';">'.$list[$i]['subject'].'</span>';
if(!$is_cmt && $list[$i]['comment_cnt']) $list[$i]['subject'] .= ' <span class="cmt-cnt">'.$list[$i]['comment_cnt'].'</span>';
}

if($list[$i]['is_notice']) { //공지글
if($is_category) {
$list[$i]['num'] = '*';
$list[$i]['ca_name'] = '<img src="'.$list_skin_url.'/img/icon_notice.gif" alt="알림" />';
} else {
$list[$i]['num'] = '<img src="'.$list_skin_url.'/img/icon_notice.gif" alt="알림" />';
}
$bg = ' class="notice"';
$list[$i]['subject'] = '<b>'.$list[$i]['subject'].'</b>';
} else {
$bg = ($set['shell_color'] && $n%2) ? ' class="list"' : '';

$n++;

if($list[$i]['wr_id'] == $wr_id) { //현재글
$bg = ' class="now"';
$list[$i]['subject'] = '<span class="now-post">'.$list[$i]['subject'].'</span>';
$list[$i]['num'] = '<span class="now-post">'.$list[$i]['num'].'</span>';
}
}

//이름
$list[$i]['name'] = $is_sideview ? amina_sideview($list[$i]['mb_id'], $list[$i]['wr_name'], $list[$i]['wr_email'], $list[$i]['wr_homepage']) : $list[$i]['name'];

?>

아미나는 for 문이 이렇게 되어 있습니다.
어떻게 처리를 해야 하는지요?
echo 문을 어떻게 만들어 넣고 있는지를 보아야 알 수 있겠네요
위 소스에서는 특별히 다를게 없어보입니다
혹시 아미나스킨에서 wr_1에 필드 합친 내용아닌 어떤 값을 기본으로 저장하고 잇는 것은 아닌가요?
for문 밖에서 print_r($list) 해서 wr_1에 무엇이 들어가는지 확인부터 해보세요
균이님 답변 감사합니다.
먼저 아미나스킨에서 wr_1 에는 다른값는 들어가지 않고 있습니다.

http://man9565.dothome.co.kr/source.txt

위 주소가 지금 echo 문이 포함되어 있는 list 스킨의 모든 소스입니다.
전체 0 |RSS
그누4 팁자료실 내용 검색
  • 개별 목록 구성 번호 제목 작성자 작성일 추천 조회
  • 게시물이 없습니다.

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT