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"; } reset($arrPageData[0]); while( list($key,$val) = each($arrPageData[0]) ){ $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; // カラム数を取得する $objPage->tpl_column_num = $this->lfGetColumnNum($arrPageLayout); GC_Utils::gfDebugLog($debug_message); } /** * ページ情報を取得する. * * @param string $where クエリのWHERE句 * @param array $arrVal WHERE句の条件値 * @return array ページ情報を格納した配列 */ function lfgetPageData($addwhere = '', $sqlval = ''){ $objQuery = new SC_Query; // DB操作オブジェクト $arrRet = array(); // データ取得用 // SQL文生成 // 取得するカラム $col = " page_id"; // ページID $col .= " ,page_name"; // 名称 $col .= " ,url"; // URL $col .= " ,php_dir"; // php保存先ディレクトリ $col .= " ,tpl_dir"; // tpl保存先ディレクトリ $col .= " ,filename"; // ファイル名称 $col .= " ,header_chk "; // ヘッダー使用FLG $col .= " ,footer_chk "; // フッター使用FLG $col .= " ,edit_flg "; // 編集可能FLG $col .= " ,author"; // authorタグ $col .= " ,description"; // descriptionタグ $col .= " ,keyword"; // keywordタグ $col .= " ,update_url"; // 更新URL $col .= " ,create_date"; // データ作成日 $col .= " ,update_date"; // データ更新日 // 取得するテーブル $table = "dtb_pagelayout"; // where句の指定があれば追加 $where = ($addwhere != '') ? $addwhere : "page_id <> 0"; // 並び変え $objQuery->setOrder('page_id'); // SQL実行 $arrRet = $objQuery->select($col, $table, $where, $sqlval); // 結果を返す return $arrRet; } /** * ナビ情報を取得する. * * @param string $url ページのURL * @param boolean $preview プレビュー表示の場合 true * @return array ナビ情報の配列 */ function lfGetNaviData($url, $preview=false){ $objQuery = new SC_Query; // DB操作オブジェクト $sql = ""; // データ取得SQL生成用 $arrRet = array(); // データ取得用 $arrData = array(); // SQL文生成 // 取得するカラム $col = "target_id, bloc_name, tpl_path, php_path"; // 取得するテーブル $table = "dtb_blocposition AS pos, dtb_bloc AS bloc"; // where文生成 $where = "bloc.bloc_id = pos.bloc_id"; if ($preview == true) { $where .= " AND EXISTS (SELECT page_id FROM dtb_pagelayout AS lay WHERE page_id = '0' AND pos.page_id = lay.page_id)"; }else{ $where .= " AND EXISTS (SELECT page_id FROM dtb_pagelayout AS lay WHERE url = ? AND page_id <> '0' AND pos.page_id = lay.page_id)"; $sqlval = array($url); } // 並び変え $objQuery->setOrder('target_id, bloc_row'); // SQL実行 $arrRet = $objQuery->select($col, $table, $where, $sqlval); // 結果を返す return $arrRet; } /** * 各部分のナビ情報を取得する. * * @param array $arrNavi ナビ情報の配列 * @param integer|string $target_id ターゲットID * @return array ブロック情報の配列 */ function lfGetNavi($arrNavi, $target_id) { $arrRet = array(); if(is_array($arrNavi) === true) { reset($arrNavi); while( list($key,$val)= each($arrNavi) ){ // 指定された箇所と同じデータだけを取得する 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 array $arrPageLayout レイアウト情報の配列 * @return integer $col_num カラム数 */ function lfGetColumnNum($arrPageLayout) { // メインは確定 $col_num = 1; // LEFT NAVI if (count($arrPageLayout['LeftNavi']) > 0) $col_num++; // RIGHT NAVI if (count($arrPageLayout['RightNavi']) > 0) $col_num++; return $col_num; } /** * ページ情報を削除する. * * @param integer|string $page_id ページID * @return integer 削除数 */ function lfDelPageData($page_id){ // DBへデータを更新する $objQuery = new SC_Query; // DB操作オブジェクト $sql = ""; // データ更新SQL生成用 $ret = ""; // データ更新結果格納用 $arrDelData = array(); // 更新データ生成用 // page_id が空でない場合にはdeleteを実行 if ($page_id != '') { $arrPageData = $this->lfgetPageData(" page_id = ? " , array($page_id)); // SQL実行 $ret = $objQuery->delete("dtb_pagelayout", "page_id = ?", 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; } } ?>