Ignore:
Timestamp:
2010/06/15 17:55:43 (14 years ago)
Author:
nanasess
bzr:base-revision:
svn-v4:1e3b908f-19a9-db11-a64c-001125224ba8:branches/version-2_4:18702
bzr:committer:
Kentaro Ohkouchi <ohkouchi@loop-az.jp>
bzr:file-ids:

data/Smarty/templates/default/admin/design/main_edit.tpl 15732@1e3b908f-19a9-db11-a64c-001125224ba8:branches%2Ffeature-module-update%2Fdata%2FSmarty%2Ftemplates%2Fdefault%2Fadmin%2Fdesign%2Fmain_edit.tpl
data/class/helper/SC_Helper_PageLayout.php 15078@1e3b908f-19a9-db11-a64c-001125224ba8:branches%2Ffeature-module-update%2Fdata%2Fclass%2Fhelper%2FSC_Helper_PageLayout.php
data/class/pages/LC_Page_Sitemap.php 16385@1e3b908f-19a9-db11-a64c-001125224ba8:branches%2Ffeature-module-update%2Fdata%2Fclass%2Fpages%2FLC_Page_Sitemap.php
data/class/pages/admin/design/LC_Page_Admin_Design_MainEdit.php 15682@1e3b908f-19a9-db11-a64c-001125224ba8:branches%2Ffeature-module-update%2Fdata%2Fclass%2Fpages%2Fadmin%2Fdesign%2FLC_Page_Admin_Design_MainEdit.php
bzr:mapping-version:
v4
bzr:repository-uuid:
1e3b908f-19a9-db11-a64c-001125224ba8
bzr:revision-id:
ohkouchi@loop-az.jp-20100615085540-414g9otzmiljpc10
bzr:revno:
1917
bzr:revprop:branch-nick:
branches/version-2_4
bzr:root:
branches/version-2_4
bzr:text-parents:

data/Smarty/templates/default/admin/design/main_edit.tpl svn-v4:1e3b908f-19a9-db11-a64c-001125224ba8:branches/feature-module-update:16937
data/class/helper/SC_Helper_PageLayout.php svn-v4:1e3b908f-19a9-db11-a64c-001125224ba8:branches/version-2_4:18532
data/class/pages/LC_Page_Sitemap.php svn-v4:1e3b908f-19a9-db11-a64c-001125224ba8:branches/feature-module-update:16582
data/class/pages/admin/design/LC_Page_Admin_Design_MainEdit.php svn-v4:1e3b908f-19a9-db11-a64c-001125224ba8:branches/version-2:17653
bzr:timestamp:
2010-06-15 17:55:40.479000092 +0900
bzr:user-agent:
bzr2.1.1+bzr-svn1.0.2
svn:original-date:
2010-06-15T08:55:40.479000Z
Message:

merged r18550, r18584, r18606

  • 新規ページ作成/削除を行なった場合, .tpl ファイルが残ってしまうのを修正(#609)
  • SITE_URL と異なる URL でアクセスした場合, user_data 以下のページが表示されないのを修正(#598)
Location:
branches/version-2_4/data
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • branches/version-2_4/data/Smarty/templates/default/admin/design/main_edit.tpl

    r16937 r18703  
    116116                                    <!--{ if $arrErr.url != "" }--><span class="red12"><!--{$arrErr.url}--></span><!--{/if}--> 
    117117                                    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}-->" /> 
    120120                                        <!--{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> 
    122122                                        <!--{/if}--> 
    123123                                </td> 
  • branches/version-2_4/data/class/helper/SC_Helper_PageLayout.php

    r18532 r18703  
    4646    function sfGetPageLayout(&$objPage, $preview = false, $url = ""){ 
    4747        $debug_message = ""; 
    48         $arrPageLayout = array(); 
     48        $arrPageLayout = array(); 
    4949 
    5050        // 現在のURLの取得 
    5151        if ($preview === false) { 
    5252            if ($url == "") { 
    53                 $url = "http://" . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF']; 
     53                // 従来互換(dtb_pagelayoutのurlが絶対URLだった時) 
     54                $url = SITE_URL . preg_replace('|^' . preg_quote(URL_DIR) . '|', '' , $_SERVER['PHP_SELF']); 
    5455            } 
     56 
     57            $url2 = preg_replace('|^http://[^/]+' . preg_quote(URL_DIR) . '|', '', $url); 
    5558            // 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"); 
    5962            $objPage->tpl_mainpage = USER_PATH . "templates/preview/" 
    6063                . TEMPLATE_NAME . "/" . $arrPageData[0]['filename'] . ".tpl"; 
     
    6265         
    6366        reset($arrPageData[0]); 
    64         while( list($key,$val) = each($arrPageData[0]) ){ 
    65             $debug_message.= "arrPageData[$key]:" . $val . "\n"; 
     67        while( list($key,$val) = each($arrPageData[0]) ){ 
     68            $debug_message.= "arrPageData[$key]:" . $val . "\n"; 
    6669        } 
    6770         
     
    97100 
    98101        // 全ナビデータを取得する 
    99         $arrNavi = $this->lfGetNaviData($url, $preview); 
    100  
    101         $arrPageLayout['LeftNavi']  = $this->lfGetNavi($arrNavi,1); // LEFT NAVI 
    102         $arrPageLayout['MainHead']  = $this->lfGetNavi($arrNavi,2); // メイン上部 
    103         $arrPageLayout['RightNavi'] = $this->lfGetNavi($arrNavi,3); // RIGHT NAVI 
    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);    // メイン下部 
    105108 
    106109        GC_Utils::gfDebugLog($arrPageLayout); 
     
    121124     * @return array ページ情報を格納した配列 
    122125     */ 
    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 
    128130        // 取得するカラム 
    129         $col  = " page_id";             // ページID 
    130         $col .= " ,page_name";          // 名称 
    131         $col .= " ,url";                // URL 
    132         $col .= " ,php_dir";            // php保存先ディレクトリ 
    133         $col .= " ,tpl_dir";            // tpl保存先ディレクトリ 
    134         $col .= " ,filename";           // ファイル名称 
    135         $col .= " ,header_chk ";        // ヘッダー使用FLG 
    136         $col .= " ,footer_chk ";        // フッター使用FLG 
    137         $col .= " ,edit_flg ";          // 編集可能FLG 
    138         $col .= " ,author";             // authorタグ 
    139         $col .= " ,description";        // descriptionタグ 
    140         $col .= " ,keyword";            // keywordタグ 
    141         $col .= " ,update_url";         // 更新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";        // データ更新日 
    144146         
    145147        // 取得するテーブル 
    146148        $table = "dtb_pagelayout"; 
    147149         
    148         // where句の指定があれば追加 
    149         $where = ($addwhere != '') ? $addwhere : "page_id <> 0"; 
    150          
    151150        // 並び変え 
    152151        $objQuery->setOrder('page_id'); 
    153152         
    154153        // SQL実行 
    155         $arrRet = $objQuery->select($col, $table, $where, $sqlval); 
     154        $arrRet = $objQuery->select($col, $table, $where, $where_vals); 
    156155         
    157156        // 結果を返す 
     
    163162     * 
    164163     * @param string $url ページのURL 
    165      * @param boolean $preview プレビュー表示の場合 true 
    166164     * @return array ナビ情報の配列 
    167165     */ 
    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 
    175169        // 取得するカラム 
    176170        $col = "target_id, bloc_name, tpl_path, php_path"; 
    177171         
    178172        // 取得するテーブル 
    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"; 
    180174         
    181175        // 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 
    189179        // 並び変え 
    190180        $objQuery->setOrder('target_id, bloc_row'); 
    191181         
    192182        // SQL実行 
    193         $arrRet = $objQuery->select($col, $table, $where, $sqlval); 
    194                                              
     183        $arrRet = $objQuery->select($col, $table, $where, $where_vals); 
     184         
    195185        // 結果を返す 
    196186        return $arrRet; 
     
    207197        $arrRet = array(); 
    208198        if(is_array($arrNavi) === true) { 
    209             reset($arrNavi); 
     199            reset($arrNavi); 
    210200            while( list($key,$val)= each($arrNavi) ){ 
    211                 // 指定された箇所と同じデータだけを取得する 
     201                // 指定された箇所と同じデータだけを取得する 
    212202                if ($target_id == $val['target_id']){ 
    213203                    if ($val['php_path'] != '') { 
    214204                        $arrNavi[$key]['php_path'] = HTML_PATH . $val['php_path']; 
    215                     }else{ 
    216                         $user_block_path = USER_TEMPLATE_PATH . TEMPLATE_NAME . "/" . $val['tpl_path']; 
    217                         if(is_file($user_block_path)) { 
    218                            $arrNavi[$key]['tpl_path'] = $user_block_path; 
    219                         } else { 
    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                        } 
    222212                    } 
    223213                     
     
    258248     */ 
    259249    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();      // 抽出データ用 
    265254 
    266255        // page_id が空でない場合にはdeleteを実行 
  • branches/version-2_4/data/class/pages/LC_Page_Sitemap.php

    r16582 r18703  
    105105        print("<urlset xmlns='http://www.sitemaps.org/schemas/sitemap/0.9'>\n"); 
    106106 
    107         // 静的なページを処理 
    108         foreach($this->staticURL as $url) { 
    109             $this->createSitemap($url, '', 'daily', 1.0); 
    110         } 
    111  
    112107        // TOPページを処理 
    113108        $topPage = $this->getTopPage($this->arrPageList); 
     
    116111                             'daily', 1.0); 
    117112 
     113        // 静的なページを処理 
     114        foreach ($this->staticURL as $url) { 
     115            $this->createSitemap($url, '', 'daily', 1.0); 
     116        } 
     117 
    118118        // 編集可能ページを処理 
    119119        $editablePages = $this->getEditablePage($this->arrPageList); 
    120         foreach($editablePages as $editablePage) { 
     120        foreach ($editablePages as $editablePage) { 
    121121            $this->createSitemap($editablePage['url'], 
    122122                                 $this->date2W3CDatetime($editablePage['update_date'])); 
     
    125125        // 商品一覧ページを処理 
    126126        $products = $this->getAllProducts(); 
    127         foreach($products as $product) { 
     127        foreach ($products as $product) { 
    128128            $this->createSitemap($product['url'], '', 'daily'); 
    129129        } 
    130130        $mobileProducts = $this->getAllProducts(true); 
    131         foreach($mobileProducts as $mobileProduct) { 
     131        foreach ($mobileProducts as $mobileProduct) { 
    132132            $this->createSitemap($mobileProduct['url'], '', 'daily'); 
    133133        } 
     
    135135        // 商品詳細ページを処理 
    136136        $details = $this->getAllDetail(); 
    137         foreach($details as $detail) { 
     137        foreach ($details as $detail) { 
    138138            $this->createSitemap($detail['url'], 
    139139                                 $this->date2W3CDatetime($detail['update_date'])); 
    140140        } 
    141141        $mobileDetails = $this->getAllDetail(true); 
    142         foreach($mobileDetails as $mobileDetail) { 
     142        foreach ($mobileDetails as $mobileDetail) { 
    143143            $this->createSitemap($mobileDetail['url'],  
    144144                                 $this->date2W3CDatetime($mobileDetail['update_date'])); 
     
    192192    function getTopPage($pageData) { 
    193193        $arrRet = array(); 
    194         foreach($pageData as $page) { 
     194        foreach ($pageData as $page) { 
    195195            if ($page['page_id'] == "1") { 
    196                 $page['url'] = SITE_URL . $page['url']; 
    197196                $arrRet[0] = $page; 
    198197                return $arrRet; 
     
    209208    function getEditablePage($pageData) { 
    210209        $arrRet = array(); 
    211         $i = 0; 
    212         foreach($pageData as $page) { 
     210        foreach ($pageData as $page) { 
    213211            if ($page['page_id'] > 4) { 
    214                 $arrRet[$i] = $page; 
    215                 $i++; 
     212                $arrRet[] = $page; 
    216213            } 
    217214        } 
     
    308305        $sql .= " ORDER BY  page_id"; 
    309306 
    310         return $objDBConn->getAll($sql, $arrVal); 
     307        $pageData = $objDBConn->getAll($sql, $arrVal); 
     308        // URL にプロトコルの記載が無い場合、SITE_URL を前置する。 
     309        foreach (array_keys($pageData) as $key) { 
     310            $page =& $pageData[$key]; 
     311            if (!preg_match('|^https?://|i', $page['url'])) { 
     312                $page['url'] = SITE_URL . $page['url']; 
     313            } 
     314        } 
     315        unset($page); 
     316 
     317        return $pageData; 
    311318    } 
    312319 
  • branches/version-2_4/data/class/pages/admin/design/LC_Page_Admin_Design_MainEdit.php

    r17653 r18703  
    111111 
    112112            // ディレクトリを画面表示用に編集 
    113             $arrPageData[0]['directory'] = str_replace( USER_DIR,'', $arrPageData[0]['php_dir']); 
     113            $arrPageData[0]['directory'] = str_replace(USER_DIR, '', $arrPageData[0]['php_dir']); 
    114114 
    115115            $this->arrPageData = $arrPageData[0]; 
     
    133133            $arrPreData = $this->objLayout->lfgetPageData("page_id = ?" , array($page_id)); 
    134134             
    135             // tplファイルの削除 
     135            // tplファイルの削除 (XXX: 処理の意図が不明。存在していると都合が悪いファイル?) 
    136136            $del_tpl = USER_PATH . "templates/" . $arrPreData[0]['filename'] . '.tpl'; 
    137137            if (file_exists($del_tpl)){ 
     
    193193                    $this->objLayout->lfDelFile($arrPageData[0]); 
    194194                    // PHPファイル作成 
    195                     $cre_php = USER_PATH . $_POST['url'] . ".php"; 
    196                     $this->lfCreatePHPFile($cre_php); 
     195                    $this->lfCreatePHPFile($_POST['url']); 
    197196                } 
    198197 
    199198                // TPLファイル作成 
    200199                $cre_tpl = USER_TEMPLATE_PATH . "/" . TEMPLATE_NAME . "/" . basename($_POST['url']) . '.tpl'; 
    201  
    202200                $this->lfCreateFile($cre_tpl); 
    203201 
    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")); 
    208206                    $page_id = $arrPageData[0]['page_id']; 
    209207                } 
     
    212210                                              "msg"     => "on"))); 
    213211                exit; 
    214             }else{ 
     212            } else { 
    215213                // エラーがあれば入力時のデータを表示する 
    216214                $this->arrPageData = $_POST; 
    217215                $this->arrPageData['header_chk'] = SC_Utils_Ex::sfChangeCheckBox(SC_Utils_Ex::sfChangeCheckBox($_POST['header_chk']), true); 
    218216                $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']; 
    221219            } 
    222220        } 
    223221 
    224222        // データ削除処理 ベースデータでなければファイルを削除 
    225         if ($_POST['mode'] == 'delete' and  !$this->objLayout->lfCheckBaseData($page_id)) { 
     223        if ($_POST['mode'] == 'delete' and !$this->objLayout->lfCheckBaseData($page_id)) { 
    226224            $this->objLayout->lfDelPageData($_POST['page_id']); 
    227225            $this->sendRedirect($this->getLocation("./main_edit.php")); 
     
    281279            $sql .= " ) VALUES ( ?,?,?,?,?,?,?,?,now(),now() )"; 
    282280            $sql .= " "; 
    283         }else{ 
     281        } else { 
    284282            // データが存在してる場合にはアップデートを行う 
    285283            // SQL生成 
     
    318316        if ($this->objLayout->lfCheckBaseData($arrData['page_id'])) { 
    319317            $arrPageData = $this->objLayout->lfgetPageData( ' page_id = ? ' , array($arrData['page_id'])); 
     318             
    320319            $name = $arrPageData[0]['page_name'] ; 
    321320            $url = $arrPageData[0]['url']; 
     321            $php_dir = $arrPageData[0]['php_dir']; 
    322322            $filename = $arrPageData[0]['filename']; 
    323         }else{ 
     323        } else { 
    324324            $name = $arrData['page_name'] ; 
    325             $url = USER_URL.$arrData['url'].".php"; 
    326             $filename = basename($arrData['url']); 
     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            } 
     332            $tpl_dir = substr(TPL_DIR, strlen(URL_DIR)); 
     333            $filename = basename($arrData['url']); // 拡張子を付加しない 
    327334        } 
    328335         
    329336        // 更新データ配列の作成 
    330337        $arrUpdData = array( 
    331                             $name                                       // 名称 
    332                             ,$url                                       // URL 
    333                             ,$php_dir                                   // PHPディレクトリ 
    334                             ,$tpl_dir                                   // TPLディレクトリ 
    335                             ,$filename                                  // ファイル名 
    336                             ,SC_Utils_Ex::sfChangeCheckBox($arrData['header_chk'])  // ヘッダー使用 
    337                             ,SC_Utils_Ex::sfChangeCheckBox($arrData['footer_chk'])  // フッター使用 
    338                             ,$_SERVER['HTTP_REFERER']                   // 更新URL 
    339                             ); 
     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        ); 
    340347 
    341348        return $arrUpdData; 
     
    354361 
    355362        // URLチェック 
    356         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) { 
    357373            $objErr->arrErr['url'] = "※ URLを正しく入力してください。<br />"; 
    358374        } 
    359  
    360         $check_url = USER_URL . $array['url'] . ".php"; 
    361         if( strlen($array['url']) > 0 && !ereg( "^https?://+($|[a-zA-Z0-9:_~=&\?\.\/-])+$", $check_url ) ) { 
    362             $objErr->arrErr['url'] = "※ URLを正しく入力してください。<br />"; 
    363         } 
    364  
     375         
    365376        // 同一のURLが存在している場合にはエラー 
    366         if(!isset($objErr->arrErr['url']) and $array['url'] !== ''){ 
    367             // URLのチェック(プレビュー用のレコードは含まない) 
    368             $arrChk = $this->objLayout->lfgetPageData(" url = ? AND page_id <> 0" , array(USER_URL . $array['url'].".php")); 
    369  
    370             if (count($arrChk[0]) >= 1 and $arrChk[0]['page_id'] != $array['page_id']) { 
    371                 $objErr->arrErr['url'] = '※ 同じURLのデータが存在しています。別のURLを付けてください。<br />'; 
    372             } 
     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 />'; 
    373397        } 
    374398 
     
    401425     * @return void 
    402426     */ 
    403     function lfCreatePHPFile($path){ 
    404  
     427    function lfCreatePHPFile($url){ 
     428 
     429        $path = USER_PATH . $url . ".php"; 
     430         
    405431        // php保存先ディレクトリが存在していなければ作成する 
    406432        if (!is_dir(dirname($path))) { 
     
    414440 
    415441        // require.phpの場所を書き換える 
    416         $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); 
    417443 
    418444        // phpファイルの作成 
Note: See TracChangeset for help on using the changeset viewer.