Changeset 18606 for branches/version-2_4-dev
- Timestamp:
- 2010/03/10 15:26:23 (14 years ago)
- Location:
- branches/version-2_4-dev/data
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/version-2_4-dev/data/Smarty/templates/default/admin/design/main_edit.tpl
r16937 r18606 116 116 <!--{ if $arrErr.url != "" }--><span class="red12"><!--{$arrErr.url}--></span><!--{/if}--> 117 117 URL:<!--{if $arrPageData.edit_flg == 2}--> 118 <!--{$smarty.const.SITE_URL }--><!--{$arrPageData.url|escape}-->119 <input type="hidden" name="url" value="<!--{$arrPageData.filename|escape}-->" maxlength="<!--{$smarty.const.STEXT_LEN}-->"/>118 <!--{$smarty.const.SITE_URL|escape}--><!--{$arrPageData.url|escape}--> 119 <input type="hidden" name="url" value="<!--{$arrPageData.filename|escape}-->" /> 120 120 <!--{else}--> 121 <!--{$user_URL }--><input type="text" name="url" value="<!--{$arrPageData.directory|escape}--><!--{$arrPageData.filename|escape}-->" maxlength="<!--{$smarty.const.STEXT_LEN}-->" style="<!--{if $arrErr.url != ""}-->background-color: <!--{$smarty.const.ERR_COLOR}-->;<!--{/if}--> ime-mode: disabled;" size="40" class="box40" />.php<span class="red"> (上限<!--{$smarty.const.STEXT_LEN}-->文字)</span>121 <!--{$user_URL|escape}--><input type="text" name="url" value="<!--{$arrPageData.directory|escape}--><!--{$arrPageData.filename|escape}-->" maxlength="<!--{$smarty.const.STEXT_LEN}-->" style="<!--{if $arrErr.url != ""}-->background-color: <!--{$smarty.const.ERR_COLOR}-->;<!--{/if}--> ime-mode: disabled;" size="40" class="box40" />.php<span class="red"> (上限<!--{$smarty.const.STEXT_LEN}-->文字)</span> 122 122 <!--{/if}--> 123 123 </td> -
branches/version-2_4-dev/data/class/helper/SC_Helper_PageLayout.php
r18550 r18606 46 46 function sfGetPageLayout(&$objPage, $preview = false, $url = ""){ 47 47 $debug_message = ""; 48 48 $arrPageLayout = array(); 49 49 50 50 // 現在のURLの取得 51 51 if ($preview === false) { 52 52 if ($url == "") { 53 // 従来互換(dtb_pagelayoutのurlが絶対URLだった時) 53 54 $url = SITE_URL . preg_replace('|^' . preg_quote(URL_DIR) . '|', '' , $_SERVER['PHP_SELF']); 54 55 } 56 57 $url2 = preg_replace('|^http://[^/]+' . preg_quote(URL_DIR) . '|', '', $url); 55 58 // URLを元にページデザインを取得 56 $arrPageData = $this->lfgetPageData(" url = ? " , array($url));57 } else{58 $arrPageData = $this->lfgetPageData(" page_id = ? " , array("0"));59 $arrPageData = $this->lfgetPageData("url IN (?, ?) AND page_id <> 0" , array($url2, $url)); // $url は従来互換 60 } else { 61 $arrPageData = $this->lfgetPageData("page_id = 0"); 59 62 $objPage->tpl_mainpage = USER_PATH . "templates/preview/" 60 63 . TEMPLATE_NAME . "/" . $arrPageData[0]['filename'] . ".tpl"; … … 62 65 63 66 reset($arrPageData[0]); 64 65 67 while( list($key,$val) = each($arrPageData[0]) ){ 68 $debug_message.= "arrPageData[$key]:" . $val . "\n"; 66 69 } 67 70 … … 97 100 98 101 // 全ナビデータを取得する 99 $arrNavi = $this->lfGetNaviData($ url, $preview);100 101 $arrPageLayout['LeftNavi'] = $this->lfGetNavi($arrNavi,1); 102 $arrPageLayout['MainHead'] = $this->lfGetNavi($arrNavi,2); 103 $arrPageLayout['RightNavi'] = $this->lfGetNavi($arrNavi,3); 104 $arrPageLayout['MainFoot'] = $this->lfGetNavi($arrNavi,4); 102 $arrNavi = $this->lfGetNaviData($arrPageLayout['page_id']); 103 104 $arrPageLayout['LeftNavi'] = $this->lfGetNavi($arrNavi,1); // LEFT NAVI 105 $arrPageLayout['MainHead'] = $this->lfGetNavi($arrNavi,2); // メイン上部 106 $arrPageLayout['RightNavi'] = $this->lfGetNavi($arrNavi,3); // RIGHT NAVI 107 $arrPageLayout['MainFoot'] = $this->lfGetNavi($arrNavi,4); // メイン下部 105 108 106 109 GC_Utils::gfDebugLog($arrPageLayout); … … 121 124 * @return array ページ情報を格納した配列 122 125 */ 123 function lfgetPageData($addwhere = '', $sqlval = ''){ 124 $objQuery = new SC_Query; // DB操作オブジェクト 125 $arrRet = array(); // データ取得用 126 127 // SQL文生成 126 function lfgetPageData($where = 'page_id <> 0', $where_vals = array()) { 127 $objQuery = new SC_Query; // DB操作オブジェクト 128 $arrRet = array(); // データ取得用 129 128 130 // 取得するカラム 129 $col = " page_id"; 130 $col .= " ,page_name"; 131 $col .= " ,url"; 132 $col .= " ,php_dir"; 133 $col .= " ,tpl_dir"; 134 $col .= " ,filename"; 135 $col .= " ,header_chk "; 136 $col .= " ,footer_chk "; 137 $col .= " ,edit_flg "; 138 $col .= " ,author"; 139 $col .= " ,description"; 140 $col .= " ,keyword"; 141 $col .= " ,update_url"; 142 $col .= " ,create_date"; 143 $col .= " ,update_date"; 131 $col = " page_id"; // ページID 132 $col .= " ,page_name"; // 名称 133 $col .= " ,url"; // URL 134 $col .= " ,php_dir"; // php保存先ディレクトリ 135 $col .= " ,tpl_dir"; // tpl保存先ディレクトリ 136 $col .= " ,filename"; // ファイル名称 137 $col .= " ,header_chk "; // ヘッダー使用FLG 138 $col .= " ,footer_chk "; // フッター使用FLG 139 $col .= " ,edit_flg "; // 編集可能FLG 140 $col .= " ,author"; // authorタグ 141 $col .= " ,description"; // descriptionタグ 142 $col .= " ,keyword"; // keywordタグ 143 $col .= " ,update_url"; // 更新URL 144 $col .= " ,create_date"; // データ作成日 145 $col .= " ,update_date"; // データ更新日 144 146 145 147 // 取得するテーブル 146 148 $table = "dtb_pagelayout"; 147 149 148 // where句の指定があれば追加149 $where = ($addwhere != '') ? $addwhere : "page_id <> 0";150 151 150 // 並び変え 152 151 $objQuery->setOrder('page_id'); 153 152 154 153 // SQL実行 155 $arrRet = $objQuery->select($col, $table, $where, $ sqlval);154 $arrRet = $objQuery->select($col, $table, $where, $where_vals); 156 155 157 156 // 結果を返す … … 163 162 * 164 163 * @param string $url ページのURL 165 * @param boolean $preview プレビュー表示の場合 true166 164 * @return array ナビ情報の配列 167 165 */ 168 function lfGetNaviData($url, $preview=false){ 169 $objQuery = new SC_Query; // DB操作オブジェクト 170 $sql = ""; // データ取得SQL生成用 171 $arrRet = array(); // データ取得用 172 $arrData = array(); 173 174 // SQL文生成 166 function lfGetNaviData($page_id){ 167 $objQuery = new SC_Query; // DB操作オブジェクト 168 175 169 // 取得するカラム 176 170 $col = "target_id, bloc_name, tpl_path, php_path"; 177 171 178 172 // 取得するテーブル 179 $table = "dtb_blocposition AS pos , dtb_bloc AS bloc";173 $table = "dtb_blocposition AS pos INNER JOIN dtb_bloc AS bloc ON bloc.bloc_id = pos.bloc_id"; 180 174 181 175 // where文生成 182 $where = "bloc.bloc_id = pos.bloc_id"; 183 if ($preview == true) { 184 $where .= " AND EXISTS (SELECT page_id FROM dtb_pagelayout AS lay WHERE page_id = '0' AND pos.page_id = lay.page_id)"; 185 }else{ 186 $where .= " AND EXISTS (SELECT page_id FROM dtb_pagelayout AS lay WHERE url = ? AND page_id <> '0' AND pos.page_id = lay.page_id)"; 187 $sqlval = array($url); 188 } 176 $where = "page_id = ?"; 177 $where_vals[] = $page_id; 178 189 179 // 並び変え 190 180 $objQuery->setOrder('target_id, bloc_row'); 191 181 192 182 // SQL実行 193 $arrRet = $objQuery->select($col, $table, $where, $ sqlval);194 183 $arrRet = $objQuery->select($col, $table, $where, $where_vals); 184 195 185 // 結果を返す 196 186 return $arrRet; … … 207 197 $arrRet = array(); 208 198 if(is_array($arrNavi) === true) { 209 199 reset($arrNavi); 210 200 while( list($key,$val)= each($arrNavi) ){ 211 201 // 指定された箇所と同じデータだけを取得する 212 202 if ($target_id == $val['target_id']){ 213 203 if ($val['php_path'] != '') { 214 204 $arrNavi[$key]['php_path'] = HTML_PATH . $val['php_path']; 215 } else{216 217 218 219 220 $arrNavi[$key]['tpl_path'] = TEMPLATE_DIR . $val['tpl_path'];221 205 } else { 206 $user_block_path = USER_TEMPLATE_PATH . TEMPLATE_NAME . "/" . $val['tpl_path']; 207 if(is_file($user_block_path)) { 208 $arrNavi[$key]['tpl_path'] = $user_block_path; 209 } else { 210 $arrNavi[$key]['tpl_path'] = TEMPLATE_DIR . $val['tpl_path']; 211 } 222 212 } 223 213 … … 258 248 */ 259 249 function lfDelPageData($page_id){ 260 // DBへデータを更新する 261 $objQuery = new SC_Query; // DB操作オブジェクト 262 $sql = ""; // データ更新SQL生成用 263 $ret = ""; // データ更新結果格納用 264 $arrDelData = array(); // 更新データ生成用 250 // DBへデータを更新する 251 $objQuery = new SC_Query; // DB操作オブジェクト 252 $ret = ""; // 結果格納用 253 $arrDelData = array(); // 抽出データ用 265 254 266 255 // page_id が空でない場合にはdeleteを実行 -
branches/version-2_4-dev/data/class/pages/LC_Page_Sitemap.php
r18573 r18606 105 105 print("<urlset xmlns='http://www.sitemaps.org/schemas/sitemap/0.9'>\n"); 106 106 107 // 静的なページを処理108 foreach($this->staticURL as $url) {109 $this->createSitemap($url, '', 'daily', 1.0);110 }111 112 107 // TOPページを処理 113 108 $topPage = $this->getTopPage($this->arrPageList); … … 116 111 'daily', 1.0); 117 112 113 // 静的なページを処理 114 foreach ($this->staticURL as $url) { 115 $this->createSitemap($url, '', 'daily', 1.0); 116 } 117 118 118 // 編集可能ページを処理 119 119 $editablePages = $this->getEditablePage($this->arrPageList); 120 foreach ($editablePages as $editablePage) {120 foreach ($editablePages as $editablePage) { 121 121 $this->createSitemap($editablePage['url'], 122 122 $this->date2W3CDatetime($editablePage['update_date'])); … … 125 125 // 商品一覧ページを処理 126 126 $products = $this->getAllProducts(); 127 foreach ($products as $product) {127 foreach ($products as $product) { 128 128 $this->createSitemap($product['url'], '', 'daily'); 129 129 } 130 130 $mobileProducts = $this->getAllProducts(true); 131 foreach ($mobileProducts as $mobileProduct) {131 foreach ($mobileProducts as $mobileProduct) { 132 132 $this->createSitemap($mobileProduct['url'], '', 'daily'); 133 133 } … … 135 135 // 商品詳細ページを処理 136 136 $details = $this->getAllDetail(); 137 foreach ($details as $detail) {137 foreach ($details as $detail) { 138 138 $this->createSitemap($detail['url'], 139 139 $this->date2W3CDatetime($detail['update_date'])); 140 140 } 141 141 $mobileDetails = $this->getAllDetail(true); 142 foreach ($mobileDetails as $mobileDetail) {142 foreach ($mobileDetails as $mobileDetail) { 143 143 $this->createSitemap($mobileDetail['url'], 144 144 $this->date2W3CDatetime($mobileDetail['update_date'])); … … 192 192 function getTopPage($pageData) { 193 193 $arrRet = array(); 194 foreach ($pageData as $page) {194 foreach ($pageData as $page) { 195 195 if ($page['page_id'] == "1") { 196 $page['url'] = SITE_URL . $page['url'];197 196 $arrRet[0] = $page; 198 197 return $arrRet; … … 209 208 function getEditablePage($pageData) { 210 209 $arrRet = array(); 211 $i = 0; 212 foreach($pageData as $page) { 210 foreach ($pageData as $page) { 213 211 if ($page['page_id'] > 4) { 214 $arrRet[$i] = $page; 215 $i++; 212 $arrRet[] = $page; 216 213 } 217 214 } … … 310 307 $sql .= " ORDER BY page_id"; 311 308 312 return $objDBConn->getAll($sql, $arrVal); 309 $pageData = $objDBConn->getAll($sql, $arrVal); 310 // URL にプロトコルの記載が無い場合、SITE_URL を前置する。 311 foreach (array_keys($pageData) as $key) { 312 $page =& $pageData[$key]; 313 if (!preg_match('|^https?://|i', $page['url'])) { 314 $page['url'] = SITE_URL . $page['url']; 315 } 316 } 317 unset($page); 318 319 return $pageData; 313 320 } 314 321 -
branches/version-2_4-dev/data/class/pages/admin/design/LC_Page_Admin_Design_MainEdit.php
r18584 r18606 111 111 112 112 // ディレクトリを画面表示用に編集 113 $arrPageData[0]['directory'] = str_replace( USER_DIR,'', $arrPageData[0]['php_dir']);113 $arrPageData[0]['directory'] = str_replace(USER_DIR, '', $arrPageData[0]['php_dir']); 114 114 115 115 $this->arrPageData = $arrPageData[0]; … … 133 133 $arrPreData = $this->objLayout->lfgetPageData("page_id = ?" , array($page_id)); 134 134 135 // tplファイルの削除 135 // tplファイルの削除 (XXX: 処理の意図が不明。存在していると都合が悪いファイル?) 136 136 $del_tpl = USER_PATH . "templates/" . $arrPreData[0]['filename'] . '.tpl'; 137 137 if (file_exists($del_tpl)){ … … 193 193 $this->objLayout->lfDelFile($arrPageData[0]); 194 194 // PHPファイル作成 195 $cre_php = USER_PATH . $_POST['url'] . ".php"; 196 $this->lfCreatePHPFile($cre_php); 195 $this->lfCreatePHPFile($_POST['url']); 197 196 } 198 197 199 198 // TPLファイル作成 200 199 $cre_tpl = USER_TEMPLATE_PATH . "/" . TEMPLATE_NAME . "/" . basename($_POST['url']) . '.tpl'; 201 202 200 $this->lfCreateFile($cre_tpl); 203 201 204 // 編集可能ページの場合にのみ処理を行う205 if ($ arrPageData[0]['edit_flg'] != 2) {206 // 新規作成した場合のために改にページIDを取得する207 $arrPageData = $this->objLayout->lfgetPageData(" url = ? " , array(USER_URL.$_POST['url'].".php"));202 // 新規作成の場合、 203 if ($page_id == '') { 204 // ページIDを取得する 205 $arrPageData = $this->objLayout->lfgetPageData(" url = ? AND page_id <> 0" , array(USER_URL.$_POST['url'] . ".php")); 208 206 $page_id = $arrPageData[0]['page_id']; 209 207 } … … 212 210 "msg" => "on"))); 213 211 exit; 214 } else{212 } else { 215 213 // エラーがあれば入力時のデータを表示する 216 214 $this->arrPageData = $_POST; 217 215 $this->arrPageData['header_chk'] = SC_Utils_Ex::sfChangeCheckBox(SC_Utils_Ex::sfChangeCheckBox($_POST['header_chk']), true); 218 216 $this->arrPageData['footer_chk'] = SC_Utils_Ex::sfChangeCheckBox(SC_Utils_Ex::sfChangeCheckBox($_POST['footer_chk']), true); 219 $this->arrPageData['directory'] = $_POST['url'];220 $this->arrPageData['filename'] = "";217 $this->arrPageData['directory'] = ''; 218 $this->arrPageData['filename'] = $_POST['url']; 221 219 } 222 220 } 223 221 224 222 // データ削除処理 ベースデータでなければファイルを削除 225 if ($_POST['mode'] == 'delete' and 223 if ($_POST['mode'] == 'delete' and !$this->objLayout->lfCheckBaseData($page_id)) { 226 224 $this->objLayout->lfDelPageData($_POST['page_id']); 227 225 $this->sendRedirect($this->getLocation("./main_edit.php")); … … 281 279 $sql .= " ) VALUES ( ?,?,?,?,?,?,?,?,now(),now() )"; 282 280 $sql .= " "; 283 } else{281 } else { 284 282 // データが存在してる場合にはアップデートを行う 285 283 // SQL生成 … … 318 316 if ($this->objLayout->lfCheckBaseData($arrData['page_id'])) { 319 317 $arrPageData = $this->objLayout->lfgetPageData( ' page_id = ? ' , array($arrData['page_id'])); 318 320 319 $name = $arrPageData[0]['page_name'] ; 321 320 $url = $arrPageData[0]['url']; 321 $php_dir = $arrPageData[0]['php_dir']; 322 322 $filename = $arrPageData[0]['filename']; 323 } else{323 } else { 324 324 $name = $arrData['page_name'] ; 325 $url = USER_URL.$arrData['url'].".php"; 325 $url = USER_DIR . $arrData['url'] . '.php'; 326 $php_dir = dirname($url); 327 if ($php_dir == '.') { 328 $php_dir = ''; 329 } else { 330 $php_dir .= '/'; 331 } 326 332 $tpl_dir = substr(TPL_DIR, strlen(URL_DIR)); 327 $filename = basename($arrData['url']); 333 $filename = basename($arrData['url']); // 拡張子を付加しない 328 334 } 329 335 330 336 // 更新データ配列の作成 331 337 $arrUpdData = array( 332 $name// 名称333 ,$url// URL334 ,$php_dir// PHPディレクトリ335 ,$tpl_dir// TPLディレクトリ336 ,$filename// ファイル名337 ,SC_Utils_Ex::sfChangeCheckBox($arrData['header_chk'])// ヘッダー使用338 ,SC_Utils_Ex::sfChangeCheckBox($arrData['footer_chk'])// フッター使用339 ,$_SERVER['HTTP_REFERER']// 更新URL340 338 $name // 名称 339 ,$url // URL 340 ,$php_dir // PHPディレクトリ 341 ,$tpl_dir // TPLディレクトリ 342 ,$filename // ファイル名 343 ,SC_Utils_Ex::sfChangeCheckBox($arrData['header_chk']) // ヘッダー使用 344 ,SC_Utils_Ex::sfChangeCheckBox($arrData['footer_chk']) // フッター使用 345 ,$_SERVER['HTTP_REFERER'] // 更新URL 346 ); 341 347 342 348 return $arrUpdData; … … 355 361 356 362 // URLチェック 357 if (substr(strrev(trim($array['url'])),0,1) == "/") { 363 $okUrl = true; 364 foreach (explode('/', $array['url']) as $url_part) { 365 if (!ereg( '^[a-zA-Z0-9:_~\.-]+$', $url_part)) { 366 $okUrl = false; 367 } 368 if ($url_part == '.' || $url_part == '..') { 369 $okUrl = false; 370 } 371 } 372 if (!$okUrl) { 358 373 $objErr->arrErr['url'] = "※ URLを正しく入力してください。<br />"; 359 374 } 360 361 $check_url = USER_URL . $array['url'] . ".php"; 362 if( strlen($array['url']) > 0 && !ereg( "^https?://+($|[a-zA-Z0-9:_~=&\?\.\/-])+$", $check_url ) ) { 363 $objErr->arrErr['url'] = "※ URLを正しく入力してください。<br />"; 364 } 365 375 366 376 // 同一のURLが存在している場合にはエラー 367 if(!isset($objErr->arrErr['url']) and $array['url'] !== ''){ 368 // URLのチェック(プレビュー用のレコードは含まない) 369 $arrChk = $this->objLayout->lfgetPageData(" url = ? AND page_id <> 0" , array(USER_URL . $array['url'].".php")); 370 371 if (count($arrChk[0]) >= 1 and $arrChk[0]['page_id'] != $array['page_id']) { 372 $objErr->arrErr['url'] = '※ 同じURLのデータが存在しています。別のURLを付けてください。<br />'; 373 } 377 $sqlWhere = ''; 378 $params = array(); 379 380 $sqlWhere .= ' (url = ? OR url = ?)'; 381 $params[] = USER_DIR . $array['url'] . '.php'; 382 $params[] = USER_URL . $array['url'] . '.php'; // 従来形式 383 384 // プレビュー用のレコードは除外 385 $sqlWhere .= ' AND page_id <> 0'; 386 387 // 変更の場合、自身のレコードは除外 388 if (strlen($array['page_id']) != 0) { 389 $sqlWhere .= ' AND page_id <> ?'; 390 $params[] = $array['page_id']; 391 } 392 393 $arrChk = $this->objLayout->lfgetPageData($sqlWhere , $params); 394 395 if (count($arrChk) >= 1) { 396 $objErr->arrErr['url'] = '※ 同じURLのデータが存在しています。別のURを付けてください。<br />'; 374 397 } 375 398 … … 402 425 * @return void 403 426 */ 404 function lfCreatePHPFile($path){ 405 427 function lfCreatePHPFile($url){ 428 429 $path = USER_PATH . $url . ".php"; 430 406 431 // php保存先ディレクトリが存在していなければ作成する 407 432 if (!is_dir(dirname($path))) { … … 415 440 416 441 // require.phpの場所を書き換える 417 $php_data = str_replace("###require###", HTML_PATH . "require.php", $php_data);442 $php_data = str_replace("###require###", str_repeat('../', substr_count($url, '/')) . '../require.php', $php_data); 418 443 419 444 // phpファイルの作成
Note: See TracChangeset
for help on using the changeset viewer.