lfgetPageData(" url = ? " , array($url)); }else{ $arrPageData = $this->lfgetPageData(" page_id = ? " , array("0")); $objPage->tpl_mainpage = USER_PATH . "templates/preview/" . TEMPLATE_NAME . "/" . $arrPageData[0]['filename'] . ".tpl"; } foreach($arrPageData[0] as $key => $val) { $debug_message.= "arrPageData[$key]:" . $val . "\n"; } $debug_message.= "TEMPLATE_NAME:".TEMPLATE_NAME . "\n"; // tpl_mainpageの設定なし、又はトップページの場合 if (!isset($objPage->tpl_mainpage) || $url == "index.php") { // ユーザテンプレートのパスを取得 $user_tpl = HTML_PATH . USER_DIR . USER_PACKAGE_DIR . TEMPLATE_NAME . "/" . $arrPageData[0]['filename'] . ".tpl"; $debug_message.= "ユーザテンプレートチェック:".$user_tpl."\n"; // ユーザテンプレートの存在チェック if (is_file($user_tpl)) { $objPage->tpl_mainpage = $user_tpl; $debug_message.= "tpl_mainpage:ユーザーテンプレート\n"; // 存在しない場合は指定テンプレートを使用 } else { $objPage->tpl_mainpage = TEMPLATE_DIR . $arrPageData[0]['filename'] . ".tpl"; $debug_message.= "tpl_mainpage:標準テンプレート\n"; } } else { $debug_message.= "tpl_mainpage:設定あり" . "\n"; } $debug_message.= "tpl_mainpage:" . $objPage->tpl_mainpage . "\n"; // ページタイトルを設定 if (!isset($objPage->tpl_title)) { $objPage->tpl_title = $arrPageData[0]['page_name']; } $arrPageLayout = $arrPageData[0]; // 全ナビデータを取得する $arrNavi = $this->lfGetNaviData($url, $preview); $arrPageLayout['LeftNavi'] = $this->lfGetNavi($arrNavi,1); // LEFT NAVI $arrPageLayout['MainHead'] = $this->lfGetNavi($arrNavi,2); // メイン上部 $arrPageLayout['RightNavi'] = $this->lfGetNavi($arrNavi,3); // RIGHT NAVI $arrPageLayout['MainFoot'] = $this->lfGetNavi($arrNavi,4); // メイン下部 GC_Utils::gfDebugLog($arrPageLayout); $objPage->arrPageLayout = $arrPageLayout; GC_Utils::gfDebugLog($debug_message); } /** * ページ情報を取得する. * * @param string $where クエリのWHERE句 * @param array $arrVal WHERE句の条件値 * @return array ページ情報を格納した配列 */ function lfgetPageData($where = '', $arrVal = ''){ $objDBConn = new SC_DbConn; // DB操作オブジェクト $sql = ""; // データ取得SQL生成用 $arrRet = array(); // データ取得用 // SQL生成 $sql .= " SELECT"; $sql .= " page_id"; // ページID $sql .= " ,page_name"; // 名称 $sql .= " ,url"; // URL $sql .= " ,php_dir"; // php保存先ディレクトリ $sql .= " ,tpl_dir"; // tpl保存先ディレクトリ $sql .= " ,filename"; // ファイル名称 $sql .= " ,header_chk "; // ヘッダー使用FLG $sql .= " ,footer_chk "; // フッター使用FLG $sql .= " ,edit_flg "; // 編集可能FLG $sql .= " ,author"; // authorタグ $sql .= " ,description"; // descriptionタグ $sql .= " ,keyword"; // keywordタグ $sql .= " ,update_url"; // 更新URL $sql .= " ,create_date"; // データ作成日 $sql .= " ,update_date"; // データ更新日 $sql .= " FROM "; $sql .= " dtb_pagelayout"; $sql .= " WHERE "; // where句の指定があれば追加 if ($where != '') { $sql .= " " . $where . " "; }else{ $sql .= " page_id <> 0 "; } $sql .= " ORDER BY page_id"; $arrRet = $objDBConn->getAll($sql, $arrVal); return $arrRet; } /** * ナビ情報を取得する. * * @param string $url ページのURL * @param boolean $preview プレビュー表示の場合 true * @return array ナビ情報の配列 */ function lfGetNaviData($url, $preview=false){ $objDBConn = new SC_DbConn; // DB操作オブジェクト $sql = ""; // データ取得SQL生成用 $arrRet = array(); // データ取得用 $arrData = array(); // SQL文生成 $sql = ""; $sql .= " SELECT "; $sql .= " target_id "; $sql .= " ,(SELECT bloc_name FROM dtb_bloc AS bloc WHERE bloc.bloc_id = pos.bloc_id) AS bloc_name"; $sql .= " ,(SELECT tpl_path FROM dtb_bloc AS bloc WHERE bloc.bloc_id = pos.bloc_id) AS tpl_path"; $sql .= " ,(SELECT php_path FROM dtb_bloc AS bloc WHERE bloc.bloc_id = pos.bloc_id) AS php_path"; $sql .= " FROM"; $sql .= " dtb_blocposition AS pos"; $sql .= " WHERE"; if ($preview == true) { $sql .= " page_id = (SELECT page_id FROM dtb_pagelayout WHERE page_id = '0')"; }else{ $sql .= " page_id = (SELECT page_id FROM dtb_pagelayout WHERE page_id <> '0' AND url = ?)"; $arrData = array($url); } $sql .= " ORDER BY target_id,bloc_row"; $sql .= " "; // SQL実行 $arrRet = $objDBConn->getAll($sql, $arrData); // 結果を返す return $arrRet; } /** * 各部分のナビ情報を取得する. * * @param array $arrNavi ナビ情報の配列 * @param integer|string $target_id ターゲットID * @return array ブロック情報の配列 */ function lfGetNavi($arrNavi, $target_id) { $arrRet = array(); if(is_array($arrNavi)) { foreach($arrNavi as $key => $val){ // 指定された箇所と同じデータだけを取得する if ($target_id == $val['target_id']){ if ($val['php_path'] != '') { $arrNavi[$key]['php_path'] = HTML_PATH . $val['php_path']; }else{ $user_block_path = USER_TEMPLATE_PATH . TEMPLATE_NAME . "/" . $val['tpl_path']; if(is_file($user_block_path)) { $arrNavi[$key]['tpl_path'] = $user_block_path; } else { $arrNavi[$key]['tpl_path'] = TEMPLATE_DIR . $val['tpl_path']; } } // phpから呼び出されるか、tplファイルが存在する場合 if($val['php_path'] != '' || is_file($arrNavi[$key]['tpl_path'])) { $arrRet[] = $arrNavi[$key]; } else { GC_Utils::gfPrintLog("ブロック読み込みエラー:" . $arrNavi[$key]['tpl_path']); } } } } return $arrRet; } /** * ページ情報を削除する. * * @param integer|string $page_id ページID * @return integer 削除数 */ function lfDelPageData($page_id){ // DBへデータを更新する $objDBConn = new SC_DbConn; // DB操作オブジェクト $sql = ""; // データ更新SQL生成用 $ret = ""; // データ更新結果格納用 $arrDelData = array(); // 更新データ生成用 // page_id が空でない場合にはdeleteを実行 if ($page_id != '') { $arrPageData = $this->lfgetPageData(" page_id = ? " , array($page_id)); // SQL生成 $sql = " DELETE FROM dtb_pagelayout WHERE page_id = ?"; // SQL実行 $ret = $objDBConn->query($sql,array($page_id)); // ファイルの削除 $this->lfDelFile($arrPageData[0]); } return $ret; } /** * ページのファイルを削除する. * * @param array $arrData ページ情報の配列 * @return void // TODO boolean にするべき? */ function lfDelFile($arrData){ // ファイルディレクトリ取得 $del_php = HTML_PATH . $arrData['php_dir'] . $arrData['filename'] . ".php"; $del_tpl = HTML_PATH . $arrData['tpl_dir'] . $arrData['filename'] . ".tpl"; // phpファイルの削除 if (file_exists($del_php)){ unlink($del_php); } // tplファイルの削除 if (file_exists($del_tpl)){ unlink($del_tpl); } } /** * データがベースデータかどうか. * * @param integer|string $data ページID * @return boolean ベースデータの場合 true */ function lfCheckBaseData($data){ $ret = false; if ($data == 0) { return $ret; } $arrChkData = $this->lfgetPageData("page_id = ?", array($data)); if ($arrChkData[0]['edit_flg'] == 2){ $ret = true; } return $ret; } } ?>