source: branches/version-2/data/class/helper/SC_Helper_PageLayout.php @ 17104

Revision 17104, 11.6 KB checked in by satou, 15 years ago (diff)

【管理画面>デザイン管理>レイアウト編集】左右ナビ位置の変更が反映されない不具合を改修。

  • Property svn:keywords set to Id
  • Property svn:mime-type set to text/x-httpd-php; charset=UTF-8
Line 
1<?php
2/*
3 * This file is part of EC-CUBE
4 *
5 * Copyright(c) 2000-2007 LOCKON CO.,LTD. All Rights Reserved.
6 *
7 * http://www.lockon.co.jp/
8 *
9 * This program is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU General Public License
11 * as published by the Free Software Foundation; either version 2
12 * of the License, or (at your option) any later version.
13 *
14 * This program is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17 * GNU General Public License for more details.
18 *
19 * You should have received a copy of the GNU General Public License
20 * along with this program; if not, write to the Free Software
21 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
22 */
23
24/**
25 * Webページのレイアウト情報を制御するヘルパークラス.
26 *
27 * @package Helper
28 * @author LOCKON CO.,LTD.
29 * @version $Id:SC_Helper_PageLayout.php 15532 2007-08-31 14:39:46Z nanasess $
30 */
31class SC_Helper_PageLayout {
32
33    // }}}
34    // {{{ functions
35
36    /**
37     * ページのレイアウト情報をセットする.
38     *
39     * LC_Page オブジェクトにページのレイアウト情報をセットする.
40     *
41     * @param LC_Page $objPage ページ情報
42     * @param boolean $preview プレビュー表示の場合 true
43     * @param string $url ページのURL
44     * @return void
45     */
46    function sfGetPageLayout(&$objPage, $preview = false, $url = ""){
47        $debug_message = "";
48        $arrPageLayout = array();
49
50        // 現在のURLの取得
51        if ($preview === false) {
52            if ($url == "") {
53                $url = "http://" . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'];
54            }
55            // URLを元にページデザインを取得
56            $arrPageData = $this->lfgetPageData(" url = ? " , array($url));
57        }else{
58            $arrPageData = $this->lfgetPageData(" page_id = ? " , array("0"));
59            $objPage->tpl_mainpage = USER_PATH . "templates/preview/"
60                . TEMPLATE_NAME . "/" . $arrPageData[0]['filename'] . ".tpl";
61        }
62       
63        foreach($arrPageData[0] as $key => $val) {
64             $debug_message.= "arrPageData[$key]:" . $val . "\n";
65        }
66       
67        $debug_message.= "TEMPLATE_NAME:".TEMPLATE_NAME . "\n";
68       
69        // tpl_mainpageの設定なし、又はトップページの場合
70        if (!isset($objPage->tpl_mainpage) || $url == "index.php") {
71            // ユーザテンプレートのパスを取得
72            $user_tpl =  HTML_PATH . USER_DIR . USER_PACKAGE_DIR . TEMPLATE_NAME . "/" . $arrPageData[0]['filename'] . ".tpl";
73            $debug_message.= "ユーザテンプレートチェック:".$user_tpl."\n";
74           
75            // ユーザテンプレートの存在チェック
76            if (is_file($user_tpl)) {
77                $objPage->tpl_mainpage = $user_tpl;
78                $debug_message.= "tpl_mainpage:ユーザーテンプレート\n";
79            // 存在しない場合は指定テンプレートを使用
80            } else {
81                $objPage->tpl_mainpage = TEMPLATE_DIR . $arrPageData[0]['filename'] . ".tpl";
82                $debug_message.= "tpl_mainpage:標準テンプレート\n";
83            }
84        } else {
85            $debug_message.= "tpl_mainpage:設定あり" . "\n";
86        }
87       
88        $debug_message.= "tpl_mainpage:" . $objPage->tpl_mainpage . "\n";
89
90        // ページタイトルを設定
91        if (!isset($objPage->tpl_title)) {
92            $objPage->tpl_title = $arrPageData[0]['page_name'];
93        }
94
95        $arrPageLayout = $arrPageData[0];
96
97        // 全ナビデータを取得する
98        $arrNavi = $this->lfGetNaviData($url, $preview);
99
100        $arrPageLayout['LeftNavi']  = $this->lfGetNavi($arrNavi,1); // LEFT NAVI
101        $arrPageLayout['MainHead']  = $this->lfGetNavi($arrNavi,2); // メイン上部
102        $arrPageLayout['RightNavi'] = $this->lfGetNavi($arrNavi,3); // RIGHT NAVI
103        $arrPageLayout['MainFoot']  = $this->lfGetNavi($arrNavi,4); // メイン下部
104
105        GC_Utils::gfDebugLog($arrPageLayout);
106       
107        $objPage->arrPageLayout = $arrPageLayout;
108       
109        // カラム数を取得する
110        $objPage->tpl_column_num = $this->lfGetColumnNum($arrPageLayout);
111
112        GC_Utils::gfDebugLog($debug_message);
113    }
114
115    /**
116     * ページ情報を取得する.
117     *
118     * @param string $where クエリのWHERE句
119     * @param array $arrVal WHERE句の条件値
120     * @return array ページ情報を格納した配列
121     */
122    function lfgetPageData($where = '', $arrVal = ''){
123        $objDBConn = new SC_DbConn;     // DB操作オブジェクト
124        $sql = "";                      // データ取得SQL生成用
125        $arrRet = array();              // データ取得用
126
127        // SQL生成
128        $sql .= " SELECT";
129        $sql .= " page_id";             // ページID
130        $sql .= " ,page_name";          // 名称
131        $sql .= " ,url";                // URL
132        $sql .= " ,php_dir";            // php保存先ディレクトリ
133        $sql .= " ,tpl_dir";            // tpl保存先ディレクトリ
134        $sql .= " ,filename";           // ファイル名称
135        $sql .= " ,header_chk ";        // ヘッダー使用FLG
136        $sql .= " ,footer_chk ";        // フッター使用FLG
137        $sql .= " ,edit_flg ";          // 編集可能FLG
138        $sql .= " ,author";             // authorタグ
139        $sql .= " ,description";        // descriptionタグ
140        $sql .= " ,keyword";            // keywordタグ
141        $sql .= " ,update_url";         // 更新URL
142        $sql .= " ,create_date";        // データ作成日
143        $sql .= " ,update_date";        // データ更新日
144        $sql .= " FROM ";
145        $sql .= "     dtb_pagelayout";
146        $sql .= " WHERE ";
147
148        // where句の指定があれば追加
149        if ($where != '') {
150            $sql .= " " . $where . " ";
151        }else{
152            $sql .= " page_id <> 0 ";
153        }
154
155        $sql .= " ORDER BY page_id";
156
157        $arrRet = $objDBConn->getAll($sql, $arrVal);
158
159        return $arrRet;
160    }
161
162    /**
163     * ナビ情報を取得する.
164     *
165     * @param string $url ページのURL
166     * @param boolean $preview プレビュー表示の場合 true
167     * @return array ナビ情報の配列
168     */
169    function lfGetNaviData($url, $preview=false){
170        $objDBConn = new SC_DbConn;     // DB操作オブジェクト
171        $sql = "";                      // データ取得SQL生成用
172        $arrRet = array();              // データ取得用
173        $arrData = array();
174
175        // SQL文生成
176        $sql = "";
177        $sql .= " SELECT ";
178        $sql .= "     target_id ";
179        $sql .= "     ,(SELECT bloc_name FROM dtb_bloc AS bloc WHERE bloc.bloc_id = pos.bloc_id) AS bloc_name";
180        $sql .= "     ,(SELECT tpl_path FROM dtb_bloc AS bloc WHERE bloc.bloc_id = pos.bloc_id) AS tpl_path";
181        $sql .= "     ,(SELECT php_path FROM dtb_bloc AS bloc WHERE bloc.bloc_id = pos.bloc_id) AS php_path";
182        $sql .= " FROM";
183        $sql .= "     dtb_blocposition AS pos";
184        $sql .= " WHERE";
185        if ($preview == true) {
186            $sql .= "     page_id = (SELECT page_id FROM dtb_pagelayout WHERE page_id = '0')";
187        }else{
188            $sql .= "     page_id = (SELECT page_id FROM dtb_pagelayout WHERE page_id <> '0' AND url = ?)";
189            $arrData = array($url);
190        }
191        $sql .= " ORDER BY target_id,bloc_row";
192        $sql .= " ";
193
194        // SQL実行
195        $arrRet = $objDBConn->getAll($sql, $arrData);
196
197        // 結果を返す
198        return $arrRet;
199    }
200
201    /**
202     * 各部分のナビ情報を取得する.
203     *
204     * @param array $arrNavi ナビ情報の配列
205     * @param integer|string $target_id ターゲットID
206     * @return array ブロック情報の配列
207     */
208    function lfGetNavi($arrNavi, $target_id) {
209        $arrRet = array();
210        if(is_array($arrNavi)) {
211            foreach($arrNavi as $key => $val){
212                // 指定された箇所と同じデータだけを取得する
213                if ($target_id == $val['target_id']){
214                    if ($val['php_path'] != '') {
215                        $arrNavi[$key]['php_path'] = HTML_PATH . $val['php_path'];
216                    }else{
217                        $user_block_path = USER_TEMPLATE_PATH . TEMPLATE_NAME . "/" . $val['tpl_path'];
218                        if(is_file($user_block_path)) {
219                           $arrNavi[$key]['tpl_path'] = $user_block_path;
220                        } else {
221                           $arrNavi[$key]['tpl_path'] = TEMPLATE_DIR . $val['tpl_path'];
222                        }
223                    }
224                   
225                    // phpから呼び出されるか、tplファイルが存在する場合
226                    if($val['php_path'] != '' || is_file($arrNavi[$key]['tpl_path'])) {
227                        $arrRet[] = $arrNavi[$key];
228                    } else {
229                        GC_Utils::gfPrintLog("ブロック読み込みエラー:" . $arrNavi[$key]['tpl_path']);
230                    }
231                }
232            }
233        }
234        return $arrRet;
235    }
236
237    /**
238     * カラム数を取得する.
239     *
240     * @param array $arrPageLayout レイアウト情報の配列
241     * @return integer $col_num カラム数
242     */
243    function lfGetColumnNum($arrPageLayout) {
244        // メインは確定
245        $col_num = 1;
246        // LEFT NAVI
247        if (count($arrPageLayout['LeftNavi']) > 0) $col_num++;
248        // RIGHT NAVI
249        if (count($arrPageLayout['RightNavi']) > 0) $col_num++;
250       
251        return $col_num;
252    }
253
254    /**
255     * ページ情報を削除する.
256     *
257     * @param integer|string $page_id ページID
258     * @return integer 削除数
259     */
260    function lfDelPageData($page_id){
261        // DBへデータを更新する
262        $objDBConn = new SC_DbConn;     // DB操作オブジェクト
263        $sql = "";                      // データ更新SQL生成用
264        $ret = "";                      // データ更新結果格納用
265        $arrDelData = array();          // 更新データ生成用
266
267        // page_id が空でない場合にはdeleteを実行
268        if ($page_id != '') {
269
270            $arrPageData = $this->lfgetPageData(" page_id = ? " , array($page_id));
271            // SQL生成
272            $sql = " DELETE FROM dtb_pagelayout WHERE page_id = ?";
273
274            // SQL実行
275            $ret = $objDBConn->query($sql,array($page_id));
276
277            // ファイルの削除
278            $this->lfDelFile($arrPageData[0]);
279        }
280        return $ret;
281    }
282
283    /**
284     * ページのファイルを削除する.
285     *
286     * @param array $arrData ページ情報の配列
287     * @return void // TODO boolean にするべき?
288     */
289    function lfDelFile($arrData){
290        // ファイルディレクトリ取得
291        $del_php = HTML_PATH . $arrData['php_dir'] . $arrData['filename'] . ".php";
292        $del_tpl = HTML_PATH . $arrData['tpl_dir'] . $arrData['filename'] . ".tpl";
293
294        // phpファイルの削除
295        if (file_exists($del_php)){
296            unlink($del_php);
297        }
298
299        // tplファイルの削除
300        if (file_exists($del_tpl)){
301            unlink($del_tpl);
302        }
303    }
304
305    /**
306     * データがベースデータかどうか.
307     *
308     * @param integer|string $data ページID
309     * @return boolean ベースデータの場合 true
310     */
311    function lfCheckBaseData($data){
312        $ret = false;
313
314        if ($data == 0) {
315            return $ret;
316        }
317
318        $arrChkData = $this->lfgetPageData("page_id = ?", array($data));
319
320        if ($arrChkData[0]['edit_flg'] == 2){
321            $ret = true;
322        }
323
324        return $ret;
325    }
326}
327?>
Note: See TracBrowser for help on using the repository browser.