assign("url_js", URL_JS); $Obj->assign("url_news_data", URL_NEWS_DATA); $_SEARCH_RESULT_PAGENUM = SEARCH_RESULT_PAGENUM; // 1ページあたりの表示件数 $_SEARCH_RESULT_MAXNUM = SEARCH_RESULT_MAXNUM; // 最大検索件数 $_SEARCH_RESULT_MAXPAGE = $_SEARCH_RESULT_MAXNUM / $_SEARCH_RESULT_PAGENUM; // 最大ページ数 // 日付設定 $_START_Y = 2001; $_START_M = 1; $_START_D = 1; $_END_Y = date("Y"); $_END_M = date("n"); $_END_D = date("j"); session_start(); // ページの取得 $page = $_SERVER["QUERY_STRING"]; if(empty($page) && $_REQUEST["func"] == "search"){ // ページ番号セット $page = 1; // 検索実行フラグの取得 $func = $_REQUEST["func"]; // キーワードの取得 $keyword = $_REQUEST["keyword"]; $keyword = htmlspecialchars($keyword); if(!empty($keyword)){ if(preg_match("/ /i", $keyword)){ $key = explode(" ", $keyword); } else { $key[] = $keyword; } } // ジャンルの取得 if($_REQUEST["genre"]){ $genre = $_REQUEST["genre"]; } // 情報公開日の取得 $s_date = $_REQUEST["s_date"]; if($s_date){ $sy = $_REQUEST["s_Year"]; if(empty($sy)) $sy = $_START_Y; $sm = $_REQUEST["s_Month"]; if(empty($sm)) $sm = $_START_M; $sd = $_REQUEST["s_Day"]; if(empty($sd)) $sd = $_START_D; $ey = $_REQUEST["e_Year"]; if(empty($ey)) $ey = $_END_Y; $em = $_REQUEST["e_Month"]; if(empty($em)) $em = $_END_M; $ed = $_REQUEST["e_Day"]; if(empty($ed)) $ed = $_END_D; if(checkdate($sm,$sd,$sy)) $from_od = date("Ymd", mktime(0,0,0,$sm,$sd,$sy)); if(checkdate($em,$ed,$ey)) $to_od = date("Ymd", mktime(0,0,0,$em,$ed,$ey)); } // セッション配列の初期化 $_SESSION[$_TYPE] = array(); unset($_SESSION[$_TYPE]); // セッション配列への格納 $_SESSION[$_TYPE] = array( "func" => $func, "key" => $key, "genre" => $genre, "s_date" => $s_date, "from_od" => $from_od, "to_od" => $to_od ); header("Location: ".$_SERVER["PHP_SELF"]."?".$page); exit(); } // セッション配列を変数に展開 extract($_SESSION[$_TYPE]); // 検索SQL生成 $sql = " select * from newsMain where status = '1' and ( (opendate = '".date("Ymd")."' and opentime <= '".date("His")."') or (opendate < '".date("Ymd")."') ) and news_sub5 != '1' "; if(!empty($key) || !empty($genre)){ for($i=0; $i%') or (news_text2 like '%".$k."%' and news_text2 not like '%<%".$k."%>%') ) "; } } if(!empty($genre)){ $s_genre = $_list_news_genre_search["VALUE"][$genre]; if(is_array($s_genre)){ $sql_genre = ""; foreach($s_genre as $k => $g){ if(!empty($sql_genre)) $sql_genre .= "or "; $sql_genre .= "("; $sql_genre .= "(news_genre2 like '".$g."|%') "; $sql_genre .= "or "; $sql_genre .= "(news_genre2 like '%|".$g."|%') "; $sql_genre .= ") "; } $sql .= "and (".$sql_genre.") "; } else { $sql .= "and ( "; $sql .= "(news_genre2 like '".$s_genre."|%') "; $sql .= "or "; $sql .= "(news_genre2 like '%|".$s_genre."|%') "; $sql .= ") "; } } } if($s_date){ $sql .= "and (opendate between '".$from_od."' and '".$to_od."') "; } $sql .= "order by opendate desc, news_priority desc limit ".$_SEARCH_RESULT_MAXNUM; // 検索実行 if( $func == "search" && ( !empty($key) || !empty($genre) || !empty($s_date) ) && ctype_digit($page) && $page >= 1 && $page <= $_SEARCH_RESULT_MAXPAGE ){ // DB接続エラーまたはクエリエラーの場合の処理 // 2007.06.25追加 if(!$res = execSearchSQL($sql)){ $Obj->display(TMPL_NEWS_SEARCH_ZERO); exit(); } } // 検索結果取得 if(!empty($res)){ $count = 0; // カウンター $total = ""; // 総件数 $from = array(); // 表示件数(FROM) $to = array(); // 表示件数(TO) $search_result = array(); // 検索結果 foreach($res as $key => $val){ $count++; $flg = 0; // 発売日チェックフラグ $result = array(); // 検索結果の一時配列 $page_view = ""; // データが含まれるページ番号 $uniqueid = $val["uniqueid"]; $opendate = $val["opendate"]; $news_title = $val["news_title"]; $news_titleurl = $val["news_titleurl"]; $news_text = $val["news_text"]; // 情報公開日 $oy = substr($opendate,0,4); $om = number_format(substr($opendate,4,2)); $od = number_format(substr($opendate,6,2)); $news_opendate = $oy."年".$om."月".$od."日"; // タイトル(詳細へのリンク) $news_title = strFnc($news_title,array(0,4,5)); // URL化する前に文字列処理 $news_link = ""; $urlpath = $oy."/".$om."/".$od."/"; if(!empty($news_titleurl)){ // 見出しリンク先が設定されている場合 $news_link = ''.$news_title.''; } else { $news_link = ''.$news_title.''; } // 本文(200文字制限をかける) if(!empty($news_text)){ $news_text = strip_tags($news_text); $news_text = mb_strimwidth($news_text, 0, 200, "..."); $news_text = strFnc($news_text,array(0,4,5)); } // 検索結果配列 $result = array( "news_link" => $news_link, "news_text" => $news_text, "news_opendate" => $news_opendate ); // このデータが何ページ目に含まれるか $page_view = ceil($count / $_SEARCH_RESULT_PAGENUM); // 検索結果を配列に格納 $search_result[$page_view][$count] = $result; // 表示件数を配列に格納(各ページ毎にFROMとTOの値を取得) if(empty($from[$page_view])){ $from[$page_view] = $count; } else { $to[$page_view] = $count; } } // 総件数 $total = $count; // 表示ページ $page_show = $from[$page]; if(!empty($to[$page])){ $page_show .= " 〜 ".$to[$page]; } // ページ切り替えリンクの作成 $page_num = ceil($count / $_SEARCH_RESULT_PAGENUM); // ページ数 $page_link = ""; for($i=1; $i<=$page_num; $i++){ if(!empty($page_link)){ // 2ページ目以降の場合、区切り文字を追加 $page_link .= ' | '; } if($i == $page){ // 表示ページはリンクなし $page_link .= $i; } else { // 表示ページ以外はリンク設定 $page_link .= ''.$i.''; } } // テンプレートの選択 if(!$count || empty($search_result[$page])){ $template = TMPL_NEWS_SEARCH_ZERO; // 0件の場合 } else { $template = TMPL_NEWS_SEARCH; } // テンプレートへの値適用 $Obj->assign("search_result", $search_result[$page]); $Obj->assign("total", $total); $Obj->assign("page_show", $page_show); $Obj->assign("page_link", $page_link); // 画面表示 $Obj->display($template); exit(); } // 0件の場合 else { // 画面表示 $Obj->display(TMPL_NEWS_SEARCH_ZERO); exit(); } // SQL実行 // 2007.07.04 追加 function execSearchSQL($sql) { require_once("DB.php"); $dbhost = DBHOST; $dsn = DBTYPE."://".DBUSER.":".DBPASS."@".$dbhost."/".DBNAME; $db = DB::connect($dsn); if(DB::isError($db)){ return false; } // SQL実行 $res = $db->query($sql); if(DB::isError($res)){ return false; } // DB切断 $db->disconnect(); // 結果データセットの取得 if(is_object($res)){ while($row = $res->fetchRow(DB_FETCHMODE_ASSOC)){ $value[] = $row; } $res->free(); return $value; } } ?>