assign("util",$util); break; case "reDisplay": if (is_numeric($_REQUEST["page"]) && $_REQUEST["page"] != '0') { }else{ die("parameter error"); } $template_name=TEMPLATE_LIST; //ページ処理 $page_inf=page_create($_REQUEST["page"]); $smarty->assign("page_link",$page_inf["page_link"]); $smarty->assign("data",$page_inf["data"]); $smarty->assign("page",$_REQUEST["page"]); break; case "search": //■ページが指定されていたら検索条件のクリアーしない if (empty($_REQUEST["page"])) { $page=""; unset($_SESSION["search"]); unset($_SESSION["detected_data"]); //■ページが指定されていない時だけ。指定されている時はセッションから。 $parse=$util->parse_request($_REQUEST);//$parse['data']と$parse['sort']の両方を返す // print_r($parse); }else{ if (is_numeric($_REQUEST["page"]) && $_REQUEST["page"] != '0') { $page=$_REQUEST["page"]; $parse=$_SESSION["search"]; }else{ die("parameter error"); } } $errMsg=""; //データの検索を行う setlocale(LC_ALL, 'ja_JP.EUC-JP'); $fh=fopen(DATA_DIR . DATA_NAME,"r"); if ($fh) { //データ読み飛ばし for($i=0;$iget_cnt_cond($parse['data']);//リクエストパラメータを引数にセット //1件づつデータを読み、全条件に合致したデータだけをメモリーへ格納 $cnt_all = 0; while($rec=fgetcsv($fh,(4096 * 1000))){ $cnt_all++; $rec=$util->convert_encoding($rec); if ($cnt_cond==0) { //検索条件が全く指定されていなかったら全件を対象データとする $data[]=$rec; }else{ $match=0; //抽出条件に従いデータを抽出する //検索条件分ループする foreach($parse['data'] as $key => $cond){ if (!empty($cond['data'])) { //条件が設定されていたら処理を行う switch ($cond['config']) { case 'PART_EQUAL'://部分一致の場合 if (is_array($cond['data'])) { $cnt_equal=0; for($j=0;$j 0) ){ $match++; } }else{ if ($cond['data']==$rec[$cond['no']]) { $match++; } } break; case 'EQUAL': if (is_array($cond['data'])) { $cnt_equal=0; for($j=0;$j 0) ){ $match++; } }else{ if ($cond['data']==$rec[$cond['no']]) { $match++; } } break; case 'GREAT': //数値のみ if (is_numeric($cond['data'])) { if ($cond['data']<=$rec[$cond['no']]) { $match++; } } break; case 'LITTLE': //数値のみ if (is_numeric($cond['data'])) { if ($cond['data']>=$rec[$cond['no']]) { $match++; } } break; case 'MULTI': //キーワード検索に相当。半角スペースで区切り。ALLまたはANYまたはCOMPLETE に更に分岐する if ($cond['sub1']=='ALL' || $cond['sub1']=='ANY') { //全角スペースや半角スペースの連続を半角スペース一つに変換する $cond['data']=ereg_replace(" | {1,}"," ",$cond['data']); // $cond['data']=mb_ereg_replace(" | {1,}"," ",$cond['data']); $word=split(" ",$cond['data']); $cnt_detect=0; for($j=0;$j= 0)) { $cnt_detect++; } } switch ($cond['sub1']){ case 'ALL': switch ($cond['sub2']){ case 'MATCH': if ($cnt_detect==count($word)) { $match++; } break; case 'UNMATCH': if ($cnt_detect==0) { $match++; } break; } break; case 'ANY': switch ($cond['sub2']){ case 'MATCH': if ($cnt_detect>=1) { $match++; } break; case 'UNMATCH': if ($cnt_detect==0) { $match++; } break; } break; } }elseif($cond['sub1']=='COMPLETE') { if ($rec[$cond['no']]==$cond['data']) { if ($cond['sub2']=='MATCH') { $match++; }elseif ($cond['sub2']=='UNMATCH') { // $match++; } }else { if ($cond['sub2']=='MATCH') { // $match++; }elseif ($cond['sub2']=='UNMATCH') { $match++; } } } break; } } } if (COND_RELATION == "AND") { //”値が指定された”全条件を満たす必要がある時 if ($match==$cnt_cond) { $data[]=$rec; } }else{ if ($match>0) { $data[]=$rec; } } } } //■ページが指定されていない時だけ。指定されている時は何もしない。 if ($page=="") { $_SESSION["search"]=$parse; } $data=do_sort($data); //検索結果のデータが存在しない時 if (empty($data)) { $errMsg[]=MSG_UNMATCH; // unset($_SESSION["detected_data"]); }else{ //検索結果データをセッションに格納 (全ページ分のデータを保有) // $_SESSION["detected_data"]=$data; } } else { die("DATA not opend"); } fclose($fh); if (empty($errMsg)){ $template_name=TEMPLATE_LIST; //ページ処理 ■先に上部にてリクエストから取得 $page_inf=page_create($page,$data); $smarty->assign("cnt_sel",count($data)); $smarty->assign("page_link",$page_inf["page_link"]); $smarty->assign("data",$page_inf["data"]); $smarty->assign("page",empty($page)?"1":$page); $smarty->assign("cnt_all",$cnt_all); //1ページ分のデータだけ保存。詳細表示時に使用する。 $_SESSION["detected_data"]=$data; }else{ $smarty->assign("err",$errMsg); //検索フォームを再度表示 $template_name=TEMPLATE_FORM; } break; case "reSort": //再ソート if (empty($_REQUEST["sort_key"])) { die("parameter error"); } //ソートキーを設定し直し unset($_SESSION["search"]["sort"]); $sort_key=explode("," , $_REQUEST["sort_key"]); for($i=0;$iassign("rec",$_SESSION["detected_data"][$i]); break; } } $smarty->assign("page",$_REQUEST["page"]); $template_name=TEMPLATE_DETAIL; break; default: die("parameter error"); break; } $smarty->assign("util",$util); $smarty->display(TEMPLATE_DIR . $template_name); function do_sort($data){ //ソート条件に従いデータを並び替える if (!empty($data) && !empty($_SESSION["search"]['sort'])) { $sort_key_name=array_keys($_SESSION["search"]['sort']); //keyは列の番号 ↑ $sort_keys=array(); for($i=0;$i前へ "; } //ページリンクで先頭になるページを決定 先頭はNUM_PAGELINK毎に増えていく if (($page % CNT_PAGE_LINK) == 0){ //現在12ページ目を表示しようとしている時、10ページずつのリンクなら先頭は11ページになる $startPage=$page - CNT_PAGE_LINK; }else { $startPage=$page - ($page % CNT_PAGE_LINK); } for($i=$startPage;($i<($startPage+CNT_PAGE_LINK)) && ($i<$pageCntAll);$i++) { if (($i+1)==$page) { //カレントのページの時なのでリンクは張らない $pageLink.= ($i+1) . " "; } else { $pageLink.="" . ($i+1) . " "; } } //次ページへのリンク作成 if ($page==$pageCntAll) { } else{ $pageLink.= "次へ "; } $page_inf["page_link"] = $pageLink; //現在のページによって表示するデータを調整する $real_data=""; $start_pos=($page-1)*CNT_DATA_LIST; for($i=$start_pos ;($i<($start_pos+CNT_DATA_LIST)) && ($i