[천상재회의파워팁03]스크랩에도 검색기능을 적용(파이널) > 그누4 팁자료실

그누4 팁자료실

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

[천상재회의파워팁03]스크랩에도 검색기능을 적용(파이널) 정보

[천상재회의파워팁03]스크랩에도 검색기능을 적용(파이널)

본문

이전에 공개한 팁의 업그레이드판으로 천상재회는 더 이상 업그레이드를 하지 않기에

파이널이란 글자를 씁니다.

이전버전에 필드가 하나 더 추가되어 스크랩시 스크랩하는 사람의 메모 타이틀을 필수 입력하도록

했으며 스크랩 목록에서 원글제목 또는 메모타이틀에서 검색 가능하도록 수정됨.

검색후 마우스 오버시 원글검색일경우는 메모타이틀이 메모타이틀 검색일경우 원글제목이 타이틀로 표시됩니다.(첨부이미지 참조)

이전버전을 적용하신분은 wr_subject 필드 다음에 memo varchar(255) not null 필드를

하나 더 추가해주시기 바랍니다.

신규 적용하시려면 wr_id 필드 다음에

wr_subject varchar(255) not null

memo varchar(255) not null 등 2개의 필드를 추가하셔야 합니다. 이전 소스를 공개했기에

크게 틀린점은 없습니다. 소스 나갑니다.

============================================================================
*** bbs/scrap.php 입니다.

<?
include_once("./_common.php");

if (!$member[mb_id])
    alert_close("회원만 조회하실 수 있습니다.");

$g4[title] = $member[mb_nick] . "님의 스크랩";
include_once("$g4[path]/head.sub.php");

//$list = array();

$sql_common = " from $g4[scrap_table] where mb_id = '$member[mb_id]' ";

//스크랩에서 검색기능추가(천상재회 http://www.triplecubic.om 2006/12/08)
if ($stx)
{
    //$stx = trim($stx);
    $stx = preg_replace("/\//", "\/", trim($stx));
    $sop = strtolower($sop);
    //if (!$sop || !($sop == "and" || $sop == "or")) $sop = "and"; // 연산자 and , or   

    $search_query = "sfl=".urlencode($sfl)."&stx=".urlencode($stx)."&sop=$sop";
    $text_stx = get_text(stripslashes($stx));

    $op1 = "";

    // 검색어를 구분자로 나눈다. 여기서는 공백
    $s = explode(" ", $stx);

    // 검색필드를 구분자로 나눈다. 여기서는 +
    $field = trim($sfl);
    $str = " and ";
    $str .= "(";
    for ($i=0; $i<count($s); $i++)
    {
        //$search_str = strtolower($s[$i]);
        $search_str = $s[$i];
        $str .= $op1;
        $str .= "(";       
        $op2 = "";       
        $str .= $op2;           
            if (preg_match("/[a-zA-Z]/", $search_str))
        $str .= "INSTR(LOWER($field), LOWER('$search_str'))";
            else
        $str .= "INSTR($field, '$search_str')";           
           
            $op2 = " or ";
       
        $str .= ")";

        $op1 = " $sop ";

       
    }
    $str .= ")";

    //$sql_search = $str . " and wr_option not like '%secret%' "; // 비밀글은 제외
    $sql_common .= $str;

}
//스크랩에서 검색기능추가 끝

$sql_order = " order by ms_id desc ";

$sql = " select count(*) as cnt $sql_common ";
$row = sql_fetch($sql);
$total_count = $row[cnt];

$rows = $config[cf_page_rows];
$total_page  = ceil($total_count / $rows);  // 전체 페이지 계산
if (!$page) $page = 1; // 페이지가 없으면 첫 페이지 (1 페이지)
$from_record = ($page - 1) * $rows; // 시작 열을 구함

$list = array();

$sql = " select *
          $sql_common
          $sql_order
          limit $from_record, $rows ";
$result = sql_query($sql);



for ($i=0; $row=sql_fetch_array($result); $i++)
{
    $list[$i] = $row;

    // 순차적인 번호 (순번)
    $num = $total_count - ($page - 1) * $rows - $i;

    // 게시판 제목
    $sql2 = " select bo_subject from $g4[board_table] where bo_table = '$row[bo_table]' ";
    $row2 = sql_fetch($sql2);
    if (!$row2[bo_subject]) $row2[bo_subject] = "[게시판 없음]";

    // 게시물 제목
    $tmp_write_table = $g4[write_prefix] . $row[bo_table];
    $sql3 = " select wr_subject from $tmp_write_table where wr_id = '$row[wr_id]' ";
    $row3 = sql_fetch($sql3, FALSE);
    $subject = get_text(cut_str($row3[wr_subject], 100));
    if (!$row3[wr_subject])
        $row3[wr_subject] = "[글 없음]";

//스크랩에서 첫번째 이미지를 뽑자(천상재회 http://www.triplecubic.com 2006/11/29)
    $sql4 = " select * from $g4[board_file_table] where bo_table = '$row[bo_table]' and wr_id = '$row[wr_id]' and bf_no = '0' ";
    $result4 = sql_query($sql4);
    $row4 = sql_fetch_array($result4);
    $list[$i][bf_file] = $row4['bf_file'];
    $list[$i][bf_source] = $row4['bf_source'];
    $list[$i][bo_table] = $row4['bo_table'];
$list[$i][memo] = $list[$i][memo2] = $row[memo];
$list[$i][subject2] = get_text($row[wr_subject]);

    //스크랩에서 첫번째 이미지를 뽑자 끝

    $list[$i][num] = $num;
    $list[$i][opener_href] = "./board.php?bo_table=$row[bo_table]";
    $list[$i][opener_href_wr_id] = "./board.php?bo_table=$row[bo_table]&wr_id=$row[wr_id]";
    $list[$i][bo_subject] = $row2[bo_subject];
    $list[$i][subject] = $subject;
    $list[$i][del_href] = "./scrap_delete.php?ms_id=$row[ms_id]&page=$page";

}

$member_skin_path = "$g4[path]/skin/member/$config[cf_member_skin]";
include_once("$member_skin_path/scrap.skin.php");

include_once("$g4[path]/tail.sub.php");
?>


============================================================================
*** bbs/scrap_popin_update.php 입니다.

<?
include_once("./_common.php");

include_once("$g4[path]/head.sub.php");

if (!$member[mb_id])
{
    $href = "./login.php?$qstr&url=".urlencode("./board.php?bo_table=$bo_table&wr_id=$wr_id");
    echo "<script language='JavaScript'> alert('회원만 접근 가능합니다.'); top.location.href = '$href'; </script>";
    exit;
}

$sql = " select count(*) as cnt from $g4[scrap_table]
          where mb_id = '$member[mb_id]'
            and bo_table = '$bo_table'
            and wr_id = '$wr_id' ";
$row = sql_fetch($sql);
if ($row[cnt])
{
    echo "
    <script language='JavaScript'>
    if (confirm('이미 스크랩하신 글 입니다.\\n\\n지금 스크랩을 확인하시겠습니까?'))
        document.location.href = './scrap.php';
    else
        window.close();
    </script>";
    exit;
}

// 덧글이 넘어오고 코멘트를 쓸 권한이 있다면
if ($wr_content && ($member[mb_level] >= $board[bo_comment_level]))
{
    $wr = get_write($write_table, $wr_id);
    // 원글이 존재한다면
    if ($wr[wr_id])
    {
        $mb_id = $member[mb_id];
        $wr_name = $member[mb_nick];
        $wr_password = $member[mb_password];
        $wr_email = $member[mb_email];
        $wr_homepage = $member[mb_homepage];

        $sql = " select max(wr_comment) as max_comment from $write_table
                  where wr_parent = '$wr_id' and wr_is_comment = 1 ";
        $row = sql_fetch($sql);
        $row[max_comment] += 1;

        $sql = " insert into $write_table
                    set ca_name = '$wr[ca_name]',
                        wr_option = '',
                        wr_num = '$wr[wr_num]',
                        wr_reply = '',
                        wr_parent = '$wr_id',
                        wr_is_comment = '1',
                        wr_comment = '$row[max_comment]',
                        wr_content = '$wr_content',
                        mb_id = '$mb_id',
                        wr_password = '$wr_password',
                        wr_name = '$wr_name',
                        wr_email = '$wr_email',
                        wr_homepage = '$wr_homepage',
                        wr_datetime = '$g4[time_ymdhis]',
                        wr_ip = '$_SERVER[REMOTE_ADDR]' ";
        sql_query($sql);

        $comment_id = mysql_insert_id();

        // 원글에 코멘트수 증가
        sql_query(" update $write_table set wr_comment = wr_comment + 1 where wr_id = '$wr_id' ");

        // 새글 INSERT
        //sql_query(" insert into $g4[board_new_table] ( bo_table, wr_id, wr_parent, bn_datetime ) values ( '$bo_table', '$comment_id', '$wr_id', '$g4[time_ymdhis]' ) ");
        sql_query(" insert into $g4[board_new_table] ( bo_table, wr_id, wr_parent, bn_datetime, mb_id ) values ( '$bo_table', '$comment_id', '$wr_id', '$g4[time_ymdhis]', '$member[mb_id]' ) ");

        // 코멘트 1 증가
        sql_query(" update $g4[board_table] set bo_count_comment = bo_count_comment + 1 where bo_table = '$bo_table' ");

        // 포인트 부여
        insert_point($member[mb_id], $board[bo_comment_point], "$board[bo_subject] {$wr_id}-{$comment_id} 코멘트쓰기", $bo_table, $comment_id, '코멘트');
    }
}

/*
$sql = " insert into $g4[scrap_table] ( mb_id, bo_table, wr_id, ms_datetime )
        values ( '$member[mb_id]', '$bo_table', '$wr_id', '$g4[time_ymdhis]' ) ";
sql_query($sql);
*/
//스크랩에서 검색을 위한 제목/메모 입력부추가(천상재회 http://www.triplecubic.com 2006/12/08)
$sql = " insert into $g4[scrap_table] ( mb_id, bo_table, wr_id, wr_subject, memo, ms_datetime )
        values ( '$member[mb_id]', '$bo_table', '$wr_id', '$wr_subject', '$memo', '$g4[time_ymdhis]' ) ";
sql_query($sql);
//스크랩에서 검색을 위한 제목 입력부추가 끝

echo <<<HEREDOC
<script language="JavaScript">
    if (confirm("이 글을 스크랩 하였습니다.\\n\\n지금 스크랩을 확인하시겠습니까?"))
        document.location.href = "./scrap.php";
    else
        window.close();
</script>
HEREDOC;
?>


============================================================================
*** 멤버스킨의 scrap_popin.skin.php입니다.

<?
if (!defined("_GNUBOARD_")) exit; // 개별 페이지 접근 불가
?>

<table width="600" height="50" border="0" cellpadding="0" cellspacing="0">
<tr>
    <td align="center" valign="middle" bgcolor="#EBEBEB">
        <table width="590" height="40" border="0" cellspacing="0" cellpadding="0">
        <tr>
            <td width="25" align="center" bgcolor="#FFFFFF" ><img src="<?=$member_skin_path?>/img/icon_01.gif" width="5" height="5"></td>
            <td width="75" align="left" bgcolor="#FFFFFF" ><font color="#666666"><b>스크랩하기</b></font></td>
            <td width="490" bgcolor="#FFFFFF" ></td>
        </tr>
        </table></td>
</tr>
</table>

<table width="600" border="0" cellspacing="0" cellpadding="0">
<form name=f_scrap_popin method=post action="./scrap_popin_update.php">
<input type="hidden" name="bo_table" value="<?=$bo_table?>">
<input type="hidden" name="wr_id"    value="<?=$wr_id?>">
<input type="hidden" name="wr_subject"    value="<?=get_text(cut_str($write[wr_subject], 255))?>">
<tr>
    <td height="200" align="center" valign="top"><table width="540" border="0" cellspacing="0" cellpadding="0">
            <tr>
                <td height="20"></td>
            </tr>
            <tr>
                <td height="2" bgcolor="#808080"></td>
            </tr>
            <tr>
                <td width="540" height="2" align="center" valign="top" bgcolor="#FFFFFF"><table width="540" border="0" cellspacing="0" cellpadding="0">
        <tr>
                            <td width="80" height="27" align="center"><b>스크랩제목</b></td>
                            <td width="10" valign="bottom"><img src="<?=$member_skin_path?>/img/l.gif" width="1" height="8"></td>
                            <td width="450" style='word-break:break-all;'>
<input type="text" name="memo"  id=memo class='ed' style='width:95%;' required></td>
                        </tr>
<tr>
                            <td colspan='2'></td><td colspan="3">* <font color=red>스크랩 목록의 메모 제목으로 저장됩니다.(필수입력) - 스크랩검색시 효과적임</font></td>
                        </tr>
<tr>
                            <td height="1" colspan="3" bgcolor="#E9E9E9"></td>
                        </tr>
                        <tr>
                            <td width="80" height="27" align="center"><b>원글제목</b></td>
                            <td width="10" valign="bottom"><img src="<?=$member_skin_path?>/img/l.gif" width="1" height="8"></td>
                            <td width="450" style='word-break:break-all;'><?=get_text(cut_str($write[wr_subject], 255))?></td>
                        </tr>

                        <tr>
                            <td height="1" colspan="3" bgcolor="#E9E9E9"></td>
                        </tr>
                        <tr>
                            <td width="80" align="center"><b>코멘트</b></td>
                            <td width="10" valign="bottom"><img src="<?=$member_skin_path?>/img/l.gif" width="1" height="8"></td>
                            <td width="450"><textarea name="wr_content" rows="10" style="width:90%;"></textarea></td>
                        </tr>
<tr>
                            <td colspan='2'></td><td colspan="3">* <font color=red>원글의 댓글로 등록됩니다.(선택입력)</font></td>
                        </tr>
                        <tr>
                            <td height="1" colspan="3" bgcolor="#E9E9E9"></td>
                        </tr>

                    </table></td>
            </tr>
        </table></td>
</tr>
<tr>
    <td height="2" align="center" valign="top" bgcolor="#D5D5D5"></td>
</tr>
<tr>
    <td height="2" align="center" valign="top" bgcolor="#E6E6E6"></td>
</tr>
<tr>
    <td height="40" align="center" valign="bottom"><INPUT type=image width="40" height="20" src="<?=$member_skin_path?>/img/ok_btn.gif" border=0></td>
</tr>
</form>
</table>



============================================================================
*** 멤버스킨의 scrap.skin.php 입니다.

<?
if (!defined("_GNUBOARD_")) exit; // 개별 페이지 접근 불가
?>
<table width=100% cellpadding=0 cellspacing=0>
  <tr>
    <td bgcolor='#ffffff' valign='top'>
      <table width="100%" cellspacing="5" cellpadding="0" bgcolor='#F8F8F9'>
        <tr>
          <td bgcolor='#ffffff' style='padding:10px;'>
            <font color='#bbbbbb'>▒  <b><?=$member[mb_name]?> 님의 스크랩</b></font>
  </td>
        </tr>
      </table>
      <table width="100%" cellspacing="0" cellpadding="0"><tr><td height='3'></td></tr></table>
      <form name="fscraplist" method="post" style="margin:0px;">
      <input type=hidden name=null>
      <input type=hidden name=page value='<?=$page?>'>
  <input type=hidden name=sfl value='<?=$sfl?>'>
      <table width="100%" border="0" cellspacing="0" cellpadding="5">
        <tr>
          <td align="center" valign="top">
            <table width="100%" border="0" cellspacing="0" cellpadding="0">       
              <tr>
                <td height="2" bgcolor="#dddddd"></td>
              </tr>
              <tr>
                <td bgcolor="#FFFFFF">
                <table width=100% cellpadding=1 cellspacing=1 border=0>
                <tr bgcolor=#E1E1E1 align=center>
                    <td width="40" height="24"><b>번호</b></td>                   
<td width="130"><b>이미지</b></td>
                    <td width=""><? if($sfl =='wr_subject') { ?><b>게시판/원글제목</b><? } else { ?><b>게시판/메모제목</b><? } ?></td>
                    <td width="60"><b>보관일시</b></td>
                    <td width="48"><b>삭제</b></td>
                </tr>

                <? for ($i=0; $i<count($list); $i++) {
$sf = $list[$i][bf_file];
$img_1 = "$g4[path]/data/file/" .$list[$i][bo_table] ."/" .$list[$i][bf_file];
if ((file_exists($img_1)) && (preg_match("/\.($config[cf_image_extension])$/i", $sf))) {

                    } else {
                    $img_1 = "$member_skin_path/img/noimage.gif";
                    }
if ($stx)
                      $list[$i][subject] = search_font($stx, $list[$i][subject]);
  $list[$i][memo] = search_font($stx, $list[$i][memo]);
?>
                    <tr height=25 bgcolor="#F6F6F6" align="center">
                        <td height="24"><?=$list[$i][num]?></td>                       
<td><a href="javascript:;" onclick="opener.document.location.href='<?=$list[$i][opener_href_wr_id]?>';"><img src='<?=$img_1?>' style='border:1px solid #E8ECEF;padding:2px;' width='125' height='45' alt=''></a></td>
                        <td align="left" style='word-break:break-all;'>&nbsp;<a href="javascript:;" onclick="opener.document.location.href='<?=$list[$i][opener_href]?>';"><b>[&nbsp;<?=$list[$i][bo_subject]?>&nbsp;]</b></a><br>&nbsp;
<? if($sfl =='wr_subject') { ?>
<a href="javascript:;" onclick="opener.document.location.href='<?=$list[$i][opener_href_wr_id]?>';" title="<?=$list[$i][memo2]?>"><?=$list[$i][subject]?></a>
<? } else { ?>
<a href="javascript:;" onclick="opener.document.location.href='<?=$list[$i][opener_href_wr_id]?>';" title="<?=trim($list[$i][subject2]);?>"><?=$list[$i][memo]?></a>
<? } ?>
</td>
                        <td><?=substr($list[$i][ms_datetime],2,9)?></td>
                        <td><a href="javascript:del('<?=$list[$i][del_href]?>');"><img src="<?=$member_skin_path?>/img/btn_comment_delete.gif" width="45" height="14" border="0"></a></td>
                    </tr>
                <? } ?>

                <? if ($i == 0) echo "<tr><td colspan=5 align=center height=100>자료가 없습니다.</td></tr>"; ?>
                </table>
</td>
        </tr>
        </table>
</form>
</td>
</tr>
<tr>
    <td height="1" align="center" valign="top" bgcolor="#dddddd"></td>
</tr>
<tr>
    <td align="center"><?=get_paging($config[cf_write_pages], $page, $total_page, "?$qstr&page=");?></td>
</tr>
<tr>
    <td height="2" align="center" valign="top" bgcolor="#dddddd"></td>
</tr>
<tr>
    <td valign="top">
  <form name=fsearch method=get style="margin:0px;">
  <input type=hidden name=page value='<?=$page?>'>
      <table width=100% cellpadding=0 cellspacing=0>
        <tr>
<td style='padding-left:5px;'>
<a href="<?=$g4[bbs_path]?>/scrap.php"><img src="<?=$member_skin_path?>/img/btn_list_view.gif" border="0"></a>
</td>
          <td width='70%' align="right" style='padding-right:5px;'>
    <select name=sfl>
            <option value="memo">스크랩메모</option>
            <option value="wr_subject">원글제목</option>
        </select>
            <input name=stx maxlength=15 size=10 itemname="검색어" required value='<?=$stx?>'><select name=sop>
            <option value=and>and</option>
            <option value=or>or</option>
        </select>
        <input type=image src="<?=$member_skin_path?>/img/btn_post_search.gif" border=0 align=absmiddle>

</td>
</tr>
</table>
</form>
</td>
</tr>
<tr>
    <td align="center" valign="bottom"><a href="javascript:window.close();"><img src="<?=$member_skin_path?>/img/btn_close.gif" width="48" height="20" border="0"></a></td>
</tr>
</table>
</td></tr></table>

<script language="JavaScript">
//if ('<?=$sfl?>') document.fscraplist.sfl.value = '<?=$sfl?>';
if ('<?=$stx?>') {
    document.fsearch.sfl.value = '<?=$sfl?>';
    document.fsearch.sop.value = '<?=$sop?>';
}
</script>
추천
1
  • 복사

댓글 26개

7쟁이님을 위한 필드추가화일 내용입니다. 그누보드 루트에 올리시고 최고관리자로 실행하십시오.

<?
include_once("./_common.php");

if ($is_admin != "super")
    alert("최고관리자만 접근 가능합니다.", $g4[path]);

$g4[title] = "업그레이드";
include_once("./_head.php");


// 스크랩테이블에 필드추가
sql_query(" ALTER TABLE `{$g4['scrap_table']}` ADD `wr_subject` VARCHAR( 255 ) NOT NULL AFTER `wr_id` ", FALSE);
sql_query(" ALTER TABLE `{$g4['scrap_table']}` ADD `memo` VARCHAR( 255 ) NOT NULL AFTER `wr_subject` ", FALSE);


echo "UPGRADE 완료.";

include_once("./_tail.php");
?>
아구 감사합니다^^

어제 만지던 영향 때문인지 아래 문구가 나오네요...하하

Parse error: parse error, unexpected T_SL, expecting ',' or ';' in /home/hosting_users/urideul/www/start/bbs/scrap_popin_update.php on line 94

어찌한담??

도와주시와요...
아래 색시별님과 같은 문제로 보입니다. 댓글 참조하시와요...

아마도 복사하시면서

echo <<<HEREDOC 끝에 공백이 하나 같이 업혀 간듯 싶습니다....ㅠ.ㅠ
해당화일의

echo <<<HEREDOC
<script language="JavaScript">
    if (confirm("이 글을 스크랩 하였습니다.\\n\\n지금 스크랩을 확인하시겠습니까?"))
        document.location.href = "./scrap.php";
    else
        window.close();
</script>
HEREDOC;

부분만 원본으로 덮어보세요.......ㅠ.ㅠ
천상재회님 감사합니다///

그런데 *** bbs/scrap.php 입니다.

<?
include_once("./_common.php");

if (!$member[mb_id])
    alert_close("회원만 조회하실 수 있습니다.");

$g4[title] = $member[mb_nick] . "님의 스크랩";
include_once("$g4[path]/head.sub_t.php");

//$list = array();
......................

위에서  include_once("$g4[path]/head.sub_t.php"); 를

include_once("$g4[path]/head.sub.php"); 와 같이  _t를 삭제하니 정상 작동하는데 왜인지요..

_t 를 삭제안하면 g4_path 변수가 선언되지 않았다고 나옵니다..
g4 버젼 gnu410입니다..

그리고
============================================================================
*** bbs/scrap_popin_update.php 최하단의

echo <<<HEREDOC
<script language="JavaScript">
    if (confirm("이 글을 스크랩 하였습니다.\\n\\n지금 스크랩을 확인하시겠습니까?"))
        document.location.href = "./scrap.php";
    else
        window.close();
</script>
HEREDOC;
?>
를 원본의 것으로 교체하니 스크랩이 되네요..이상한 것은 원본과 같은데요..

제가 초보라 왤까요..

하여간 지금은 정상 작동합니다...


거듭 감사합니다..
천상재회님 멋쟁이...  수고하셨습니다.
이제 스크랩 등록할때 자기만의 설명을 추가하고 검색할수있는것도 만들어주세요.

그다음은 모두들 관리자님게 그누의 기본으로 적용해달라는 압력모드로 돌입해야할듯.....
>>이제 스크랩 등록할때 자기만의 설명을 추가하고 검색할수있는것도 만들어주세요.

적용된 것입니다. 맨위의 그림에 보면 스크랩제목이라하여 자기만의 제목으로 스크랩 하시면 됩니다.

원글제목과 스크랩제목로 검색 가능합니다....^^

그래서 필드를 wr_subject --> 원글제목저장
                    memo --> 나만의 메모 제목

2개를 늘렸다는 후문이 있습니다....^^

별 거는 아닙니다.....^^
© SIRSOFT
현재 페이지 제일 처음으로