테스트 사이트 - 개발 중인 베타 버전입니다

검색문의드려요

· 13년 전 · 32 · 2
현재는 검색을 하면 상품만 검색되는데요.

게시글까지 검색하게 하려면 어떻게 해야하는지 궁금합니다.

자세한 답변 부탁드립니다.

감사합니다.

댓글 작성

댓글을 작성하시려면 로그인이 필요합니다.

로그인하기

댓글 2개

검색시 게시판과 상품을 별도로 검색하도록 되어 있으므로 두개의 프로그램을 합치면 될것 같습니다.


shop/search.php 를 아래 코드로 대체해 보시기 바랍니다.


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

// 상품이미지 사이즈(폭, 높이)를 몇배 축소 할것인지를 설정
// 0 으로 설정하면 오류남 : 기본 2
$image_rate = 2;

$g4[title] = "상품 검색";
include_once("./_head.php");

$stx = $search_str;
if ($stx)
{
//$stx = trim($stx);
$stx = preg_replace("/\//", "\/", trim($stx));
$sop = strtolower($sop);
if (!$sop || !($sop == "and" || $sop == "or")) $sop = "and"; // 연산자 and , or
if (!$srows) $srows = 10; // 한페이지에 출력하는 검색 행수

unset($g4_search[tables]);
unset($g4_search[read_level]);
$sql = " select gr_id, bo_table, bo_read_level from $g4[board_table] where bo_use_search = '1' and bo_list_level <= '$member[mb_level]' ";
// and bo_read_level <= '$member[mb_level]' ";
if ($gr_id)
$sql .= " and gr_id = '$gr_id' ";
if ($onetable) // 하나의 게시판만 검색한다면
$sql .= " and bo_table = '$onetable' ";
$sql .= " order by bo_order_search, gr_id, bo_table ";
$result = sql_query($sql);
for ($i=0; $row=sql_fetch_array($result); $i++)
{
if ($is_admin != "super")
{
// 그룹접근 사용에 대한 검색 차단
$sql2 = " select gr_use_access, gr_admin from $g4[group_table] where gr_id = '$row[gr_id]' ";
$row2 = sql_fetch($sql2);
// 그룹접근을 사용한다면
if ($row2[gr_use_access])
{
// 그룹관리자가 있으며 현재 회원이 그룹관리자라면 통과
if ($row2[gr_admin] && $row2[gr_admin] == $member[mb_id])
;
else
{
$sql3 = " select count(*) as cnt from $g4[group_member_table] where gr_id = '$row[gr_id]' and mb_id = '$member[mb_id]' and mb_id <> '' ";
$row3 = sql_fetch($sql3);
if (!$row3[cnt])
continue;
}
}
}
$g4_search[tables][] = $row[bo_table];
$g4_search[read_level][] = $row[bo_read_level];
}

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


$text_stx = get_text(stripslashes($stx));

$op1 = "";

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

// 검색필드를 구분자로 나눈다. 여기서는 +
$field = explode("||", trim($sfl));

$str = "(";
for ($i=0; $i<count($s); $i++)
{
if (trim($s[$i]) == "") continue;
//$search_str = strtolower($s[$i]);
$search_str = $s[$i];
$str .= $op1;
$str .= "(";

$op2 = "";
for ($k=0; $k<count($field); $k++) // 필드의 수만큼 다중 필드 검색 가능 (필드1+필드2...)
{
$str .= $op2;
switch ($field[$k])
{
case "mb_id" :
case "wr_name" :
$str .= "$field[$k] = '$s[$i]'";
break;
case "wr_subject" :
case "wr_content" :
if (preg_match("/[a-zA-Z]/", $search_str))
$str .= "INSTR(LOWER($field[$k]), LOWER('$search_str'))";
else
$str .= "INSTR($field[$k], '$search_str')";
break;
default :
$str .= "1=0"; // 항상 거짓
break;
}
$op2 = " or ";
}
$str .= ")";

$op1 = " $sop ";

// 인기검색어
$sql = " insert into $g4[popular_table] set pp_word = '$search_str', pp_date = '$g4[time_ymd]', pp_ip = '$_SERVER[REMOTE_ADDR]' ";
sql_query($sql, FALSE);
}
$str .= ")";

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

$str_board_list = "";
$board_count = 0;

$time1 = get_microtime();

$total_count = 0;
for ($i=0; $i<count($g4_search[tables]); $i++)
{
$tmp_write_table = $g4[write_prefix] . $g4_search[tables][$i];

$sql = " select wr_id from $tmp_write_table where $sql_search ";
$result = sql_query($sql, false);
$row[cnt] = @mysql_num_rows($result);

//$sql = " select count(*) as cnt from $tmp_write_table where $sql_search ";
//$row = sql_fetch($sql);

$total_count += $row[cnt];
if ($row[cnt])
{
$board_count++;
$search_table[] = $g4_search[tables][$i];
$read_level[] = $g4_search[read_level][$i];
$search_table_count[] = $total_count;

$sql2 = " select bo_subject from $g4[board_table] where bo_table = '{$g4_search[tables][$i]}' ";
$row2 = sql_fetch($sql2);
$str_board_list .= "<li><a href='$_SERVER[PHP_SELF]?$search_query&gr_id=$gr_id&onetable={$g4_search[tables][$i]}'>$row2[bo_subject]</a> ($row[cnt])";
}
}

$rows = $srows;
$total_page = ceil($total_count / $rows); // 전체 페이지 계산
if ($page == "") { $page = 1; } // 페이지가 없으면 첫 페이지 (1 페이지)
$from_record = ($page - 1) * $rows; // 시작 열을 구함

for ($i=0; $i<count($search_table); $i++)
{
if ($from_record < $search_table_count[$i])
{
$table_index = $i;
$from_record = $from_record - $search_table_count[$i-1];
break;
}
}

$bo_subject = array();
$list = array();

$k=0;
for ($idx=$table_index; $idx<count($search_table); $idx++)
{
$sql = " select bo_subject from $g4[board_table] where bo_table = '$search_table[$idx]' ";
$row = sql_fetch($sql);
$bo_subject[$idx] = $row[bo_subject];

$tmp_write_table = $g4[write_prefix] . $search_table[$idx];

$sql = " select * from $tmp_write_table where $sql_search order by wr_id desc limit $from_record, $rows ";
$result = sql_query($sql);
for ($i=0; $row=sql_fetch_array($result); $i++)
{
// 검색어까지 링크되면 게시판 부하가 일어남
$list[$idx][$i] = $row;
$list[$idx][$i][href] = "./board.php?bo_table=$search_table[$idx]&wr_id=$row[wr_parent]";

if ($row[wr_is_comment])
{
$link .= "#c{$row[wr_id]}";
$sql2 = " select wr_subject, wr_option from $tmp_write_table where wr_id = '$row[wr_parent]' ";
$row2 = sql_fetch($sql2);
//$row[wr_subject] = $row2[wr_subject];
$row[wr_subject] = get_text($row2[wr_subject]);
}

// 비밀글은 검색 불가
if (strstr($row[wr_option].$row2[wr_option], "secret"))
$row[wr_content] = "[비밀글 입니다.]";

$subject = get_text($row[wr_subject]);
if (strstr($sfl, "wr_subject"))
$subject = search_font($stx, $subject);

if ($read_level[$idx] <= $member[mb_level])
{
$content = cut_str(get_text($row[wr_content]),300,"…");
if (strstr($sfl, "wr_content"))
$content = search_font($stx, $content);
}
else
$content = '';

$list[$idx][$i][subject] = $subject;
$list[$idx][$i][content] = $content;
$list[$idx][$i][name] = get_sideview($row[mb_id], cut_str($row[wr_name], $config[cf_cut_name]), $row[wr_email], $row[wr_homepage]);

$k++;
if ($k >= $rows)
break;
}
sql_free_result($result);

if ($k >= $rows)
break;

$from_record = 0;
}

$write_pages = get_paging($config[cf_write_pages], $page, $total_page, "$_SERVER[PHP_SELF]?$search_query&gr_id=$gr_id&srows=$srows&onetable=$onetable&page=");

echo "<script type=\"text/javascript\" src=\"$g4[path]/js/sideview.js\"></script>";
}

$group_select = "<select id='gr_id' name='gr_id' class=select><option value=''>전체 분류";
$sql = " select gr_id, gr_subject from $g4[group_table] order by gr_id ";
$result = sql_query($sql);
for ($i=0; $row=sql_fetch_array($result); $i++)
$group_select .= "<option value='$row[gr_id]'>$row[gr_subject]";
$group_select .= "</select>";

if (!$sfl) $sfl = "wr_subject";
if (!$sop) $sop = "or";

$search_skin_path = "$g4[path]/skin/search/$config[cf_search_skin]";
include_once("$search_skin_path/search.skin.php");
?>

<img src="<?=$g4[shop_img_path]?>/top_search.gif" border="0"><p>

<table width=100% cellpadding=0 cellspacing=0 align=center border=0>
<tr>
<td>
&nbsp;&nbsp; 찾으시는 검색어는 &quot;<b><?=stripslashes(get_text($search_str))?></b>&quot; 입니다.
<br><br>
<?
// QUERY 문에 공통적으로 들어가는 내용
// 상품명에 검색어가 포한된것과 상품판매가능인것만
$sql_common = " from $g4[yc4_item_table] a,
$g4[yc4_category_table] b
where a.ca_id=b.ca_id
and a.it_use = 1
and b.ca_use = 1
/* 중복검색에 대한 오류로 인해 막음 : where (a.ca_id=b.ca_id or a.ca_id2=b.ca_id or a.ca_id3=b.ca_id) */ ";
if ($search_str) {
$sql_common .= " and ( a.it_id like '$search_str%' or
a.it_name like '%$search_str%' or
a.it_basic like '%$search_str%' or
a.it_explan like '%$search_str%' ) ";
}

// 분류선택이 있다면 특정 분류만
if ($search_ca_id != "")
$sql_common .= " and a.ca_id like '$search_ca_id%' ";

// 검색된 내용이 몇행인지를 얻는다
$sql = " select COUNT(*) as cnt $sql_common ";
$row = sql_fetch($sql);
$total_count = $row[cnt];
echo "&nbsp;&nbsp; 입력하신 검색어로 총 <b>{$total_count}건</b>의 상품이 검색 되었습니다.<br><br>";

// 임시배열에 저장해 놓고 분류별로 출력한다.
// write_serarch_save() 함수가 임시배열에 있는 내용을 출력함
if ($total_count > 0) {
// 인기검색어
$sql = " insert into $g4[popular_table]
set pp_word = '$search_str',
pp_date = '$g4[time_ymd]',
pp_ip = '$_SERVER[REMOTE_ADDR]' ";
sql_query($sql, FALSE);

unset($save); // 임시 저장 배열
$sql = " select a.ca_id,
a.it_id
$sql_common
order by a.ca_id, a.it_id desc ";
$result = sql_query($sql);
for ($i=0; $row=mysql_fetch_array($result); $i++) {
if ($save[ca_id] != $row[ca_id]) {
if ($save[ca_id]) {
write_search_save($save);
unset($save);
}
$save[ca_id] = $row[ca_id];
$save[cnt] = 0;
}
$save[it_id][$save[cnt]] = $row[it_id];
$save[cnt]++;
}
mysql_free_result($result);
write_search_save($save);
}
?>
</td>
</tr>
</table>

<?
function write_search_save($save)
{
global $g4, $search_str , $default , $image_rate , $cart_dir;

$sql = " select ca_name from $g4[yc4_category_table] where ca_id = '$save[ca_id]' ";
$row = sql_fetch($sql);

/*
echo "
<table width=98% cellpadding=0 cellspacing=0 border=0 align=center>
<colgroup width=80>
<colgroup width=>
<colgroup width=150>
<colgroup width=100>
<tr><td colspan=4 height=2 bgcolor=#0E87F9></td></tr>
<tr>
<td colspan=2 height='28'>&nbsp;<b><a href='./list.php?ca_id={$save[ca_id]}'>$row[ca_name]</a></b> ($save[cnt])</td>
<td align=center>판매가격</td>
<td align=center>포인트</td>
</tr>
<tr><td colspan=4 height=1 bgcolor=#CCCCCC></td></tr>
";
*/

// 김선용 2006.12 : 중복 하위분류명이 많으므로 대분류 포함하여 출력
$ca_temp = "";
if(strlen($save['ca_id']) > 2) // 중분류 이하일 경우
{
$sql2 = " select ca_name from $g4[yc4_category_table] where ca_id='".substr($save[ca_id],0,2)."' ";
$row2 = sql_fetch($sql2);
$ca_temp = "<b><a href='./list.php?ca_id=".substr($save[ca_id],0,2)."'>$row2[ca_name]</a></b> &gt; ";
}

$list_mod = 4;
$td_width = (int)(100 / $list_mod);
$img_width = $default[de_simg_width];
$img_height = $default[de_simg_height];

echo "
<table width=98% cellpadding=0 cellspacing=0 border=0 align=center>
<tr>
<td colspan='$list_mod' height='28'>&nbsp;{$ca_temp}<b><a href='./list.php?ca_id={$save[ca_id]}'>$row[ca_name]</a></b> ($save[cnt])</td>
</tr>
<tr><td colspan='$list_mod' height=1 bgcolor=#CCCCCC></td></tr>";

for ($i=0; $i<$save[cnt]; $i++) {
$sql = " select it_id,
it_name,
it_amount,
it_amount2,
it_amount3,
it_tel_inq,
it_cust_amount,
it_gallery,
it_point,
it_type1,
it_type2,
it_type3,
it_type4,
it_type5
from $g4[yc4_item_table] where it_id = '{$save[it_id][$i]}' ";
$row = sql_fetch($sql);

//$image = get_it_image("$row[it_id]_s", (int)($default[de_simg_width] / $image_rate), (int)($default[de_simg_height] / $image_rate), $row[it_id]);

if ( ($i>0) && (($i%$list_mod)==0) )
{
echo "</tr>\n\n";
echo "<tr><td colspan='$list_mod' background='$g4[shop_img_path]/line_h.gif' height=1></td></tr>\n\n";
echo "<tr>\n";
}

echo "
<td width='{$td_width}%' align=center valign=top>
<br>
<table width=98% cellpadding=2 cellspacing=0>
<tr><td align=center>".get_it_image($row[it_id]."_s", $img_width , $img_height, $row[it_id])."</td></tr>
<tr><td align=center>".it_name_icon($row)."</td></tr>";

if ($row[it_cust_amount] && !$row[it_gallery])
echo "<tr><td align=center><strike>".display_amount($row[it_cust_amount])."</strike></td></tr>";

echo "<tr><td align=center>";

if (!$row[it_gallery])
echo "<span class=amount>".display_amount(get_amount($row), $row[it_tel_inq])."</span>";

echo "</td></tr></table></td>";

}

// 나머지 td 를 채운다.
if (($cnt = $i%$list_mod) != 0)
for ($k=$cnt; $k<$list_mod; $k++)
echo "<td>&nbsp;</td>\n";

echo "<tr><td colspan=4 height=1 bgcolor=#CCCCCC></td></tr>";
echo "</table><br><br>\n";
}

include_once("./_tail.php");
?>
13년 전
감사합니다.

게시글 목록

번호 제목
56073
56067
56065
56060
56058
56055
56051
56048
56044
56043
56042
56039
56035
56032
56030
56028
56025
56018
56012
56010