source: branches/feature-module-update/data/class/helper/SC_Helper_PageLayout.php @ 16582

Revision 16582, 9.7 KB checked in by nanasess, 16 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        $arrPageLayout = array();
48
49        // 現在のURLの取得
50        if ($preview === false) {
51            if ($url == "") {
52                $url = "http://" . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'];
53            }
54            // URLを元にページデザインを取得
55            $arrPageData = $this->lfgetPageData(" url = ? " , array($url));
56        }else{
57            $arrPageData = $this->lfgetPageData(" page_id = ? " , array("0"));
58            $objPage->tpl_mainpage = USER_PATH . "templates/"
59                . TEMPLATE_NAME . "/" . $arrPageData[0]['filename'] . ".tpl";
60        }
61
62        // メインテンプレートファイルを設定
63        if (!isset($objPage->tpl_mainpage)) {
64
65            // カスタムテンプレートのパスを取得
66            $user_tpl =  HTML_PATH . $arrPageData[0]['tpl_dir'] . $arrPageData[0]['filename'] . ".tpl";
67
68            // カスタムテンプレートの存在チェック
69            if (is_file($user_tpl)) {
70                $objPage->tpl_mainpage = $user_tpl;
71
72            // 存在しない場合は指定テンプレートを使用
73            } else {
74                $objPage->tpl_mainpage = TEMPLATE_DIR . $arrPageData[0]['filename'] . ".tpl";
75            }
76        }
77
78        // ページタイトルを設定
79        if (!isset($objPage->tpl_title)) {
80            $objPage->tpl_title = $arrPageData[0]['page_name'];
81        }
82
83        $arrPageLayout = $arrPageData[0];
84
85        // 全ナビデータを取得する
86        $arrNavi = $this->lfGetNaviData($url, $preview);
87
88        $arrPageLayout['LeftNavi']  = $this->lfGetNavi($arrNavi,1); // LEFT NAVI
89        $arrPageLayout['MainHead']  = $this->lfGetNavi($arrNavi,2); // メイン上部
90        $arrPageLayout['RightNavi'] = $this->lfGetNavi($arrNavi,3); // RIGHT NAVI
91        $arrPageLayout['MainFoot']  = $this->lfGetNavi($arrNavi,4); // メイン下部
92
93        $objPage->arrPageLayout = $arrPageLayout;
94    }
95
96    /**
97     * ページ情報を取得する.
98     *
99     * @param string $where クエリのWHERE句
100     * @param array $arrVal WHERE句の条件値
101     * @return array ページ情報を格納した配列
102     */
103    function lfgetPageData($where = '', $arrVal = ''){
104        $objDBConn = new SC_DbConn;     // DB操作オブジェクト
105        $sql = "";                      // データ取得SQL生成用
106        $arrRet = array();              // データ取得用
107
108        // SQL生成
109        $sql .= " SELECT";
110        $sql .= " page_id";             // ページID
111        $sql .= " ,page_name";          // 名称
112        $sql .= " ,url";                // URL
113        $sql .= " ,php_dir";            // php保存先ディレクトリ
114        $sql .= " ,tpl_dir";            // tpl保存先ディレクトリ
115        $sql .= " ,filename";           // ファイル名称
116        $sql .= " ,header_chk ";        // ヘッダー使用FLG
117        $sql .= " ,footer_chk ";        // フッター使用FLG
118        $sql .= " ,edit_flg ";          // 編集可能FLG
119        $sql .= " ,author";             // authorタグ
120        $sql .= " ,description";        // descriptionタグ
121        $sql .= " ,keyword";            // keywordタグ
122        $sql .= " ,update_url";         // 更新URL
123        $sql .= " ,create_date";        // データ作成日
124        $sql .= " ,update_date";        // データ更新日
125        $sql .= " FROM ";
126        $sql .= "     dtb_pagelayout";
127        $sql .= " WHERE ";
128
129        // where句の指定があれば追加
130        if ($where != '') {
131            $sql .= $where;
132        }else{
133            $sql .= "     page_id != 0 ";
134        }
135
136        $sql .= " ORDER BY  page_id";
137
138        $arrRet = $objDBConn->getAll($sql, $arrVal);
139
140        return $arrRet;
141    }
142
143    /**
144     * ナビ情報を取得する.
145     *
146     * @param string $url ページのURL
147     * @param boolean $preview プレビュー表示の場合 true
148     * @return array ナビ情報の配列
149     */
150    function lfGetNaviData($url, $preview=false){
151        $objDBConn = new SC_DbConn;     // DB操作オブジェクト
152        $sql = "";                      // データ取得SQL生成用
153        $arrRet = array();              // データ取得用
154        $arrData = array();
155
156        // SQL文生成
157        $sql = "";
158        $sql .= " SELECT ";
159        $sql .= "     target_id ";
160        $sql .= "     ,(SELECT bloc_name FROM dtb_bloc AS bloc WHERE bloc.bloc_id = pos.bloc_id) AS bloc_name";
161        $sql .= "     ,(SELECT tpl_path FROM dtb_bloc AS bloc WHERE bloc.bloc_id = pos.bloc_id) AS tpl_path";
162        $sql .= "     ,(SELECT php_path FROM dtb_bloc AS bloc WHERE bloc.bloc_id = pos.bloc_id) AS php_path";
163        $sql .= " FROM";
164        $sql .= "     dtb_blocposition AS pos";
165        $sql .= " WHERE";
166        if ($preview == true) {
167            $sql .= "     page_id = (SELECT page_id FROM dtb_pagelayout WHERE page_id = '0')";
168        }else{
169            $sql .= "     page_id = (SELECT page_id FROM dtb_pagelayout WHERE url = ?)";
170            $arrData = array($url);
171        }
172        $sql .= " ORDER BY target_id,bloc_row";
173        $sql .= " ";
174
175        // SQL実行
176        $arrRet = $objDBConn->getAll($sql, $arrData);
177
178        // 結果を返す
179        return $arrRet;
180    }
181
182    /**
183     * 各部分のナビ情報を取得する.
184     *
185     * @param array $arrNavi ナビ情報の配列
186     * @param integer|string $target_id ターゲットID
187     * @return array ブロック情報の配列
188     */
189    function lfGetNavi($arrNavi, $target_id) {
190        $arrRet = array();
191        if(is_array($arrNavi)) {
192            foreach($arrNavi as $key => $val){
193                // 指定された箇所と同じデータだけを取得する
194                if ($target_id == $val['target_id']){
195                    if ($val['php_path'] != '') {
196                        $arrNavi[$key]['php_path'] = HTML_PATH . $val['php_path'];
197                        $arrNavi[$key]['include'] = "<!--{include file='".$val['php_path']."'}-->";
198                    }else{
199                        $arrNavi[$key]['tpl_path'] = TEMPLATE_DIR . $val['tpl_path'];
200                        $arrNavi[$key]['include'] = "<!--{include file='". TEMPLATE_DIR . $val['tpl_path'] ."'}-->";
201                    }
202
203                    $arrRet[] = $arrNavi[$key];
204                }
205            }
206        }
207        return $arrRet;
208    }
209
210    /**
211     * ページ情報を削除する.
212     *
213     * @param integer|string $page_id ページID
214     * @return integer 削除数
215     */
216    function lfDelPageData($page_id){
217        // DBへデータを更新する
218        $objDBConn = new SC_DbConn;     // DB操作オブジェクト
219        $sql = "";                      // データ更新SQL生成用
220        $ret = "";                      // データ更新結果格納用
221        $arrDelData = array();          // 更新データ生成用
222
223        // page_id が空でない場合にはdeleteを実行
224        if ($page_id != '') {
225
226            $arrPageData = $this->lfgetPageData(" page_id = ? " , array($page_id));
227            // SQL生成
228            $sql = " DELETE FROM dtb_pagelayout WHERE page_id = ?";
229
230            // SQL実行
231            $ret = $objDBConn->query($sql,array($page_id));
232
233            // ファイルの削除
234            $this->lfDelFile($arrPageData[0]);
235        }
236        return $ret;
237    }
238
239    /**
240     * ページのファイルを削除する.
241     *
242     * @param array $arrData ページ情報の配列
243     * @return void // TODO boolean にするべき?
244     */
245    function lfDelFile($arrData){
246        // ファイルディレクトリ取得
247        $del_php = HTML_PATH . $arrData['php_dir'] . $arrData['filename'] . ".php";
248        $del_tpl = HTML_PATH . $arrData['tpl_dir'] . $arrData['filename'] . ".tpl";
249
250        // phpファイルの削除
251        if (file_exists($del_php)){
252            unlink($del_php);
253        }
254
255        // tplファイルの削除
256        if (file_exists($del_tpl)){
257            unlink($del_tpl);
258        }
259    }
260
261    /**
262     * データがベースデータかどうか.
263     *
264     * @param integer|string $data ページID
265     * @return boolean ベースデータの場合 true
266     */
267    function lfCheckBaseData($data){
268        $ret = false;
269
270        if ($data == 0) {
271            return $ret;
272        }
273
274        $arrChkData = $this->lfgetPageData("page_id = ?", array($data));
275
276        if ($arrChkData[0]['edit_flg'] == 2){
277            $ret = true;
278        }
279
280        return $ret;
281    }
282}
283?>
Note: See TracBrowser for help on using the repository browser.