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

Revision 15823, 8.5 KB checked in by nanasess, 17 years ago (diff)

USER_DIR を TEMPLATE_DIR に修正

  • Property svn:keywords set to Id
  • Property svn:mime-type set to text/x-httpd-php; charset=UTF-8
Line 
1<?php
2/*
3 * Copyright(c) 2000-2007 LOCKON CO.,LTD. All Rights Reserved.
4 *
5 * http://www.lockon.co.jp/
6 */
7
8/**
9 * Webページのレイアウト情報を制御するヘルパークラス.
10 *
11 * @package Helper
12 * @author LOCKON CO.,LTD.
13 * @version $Id:SC_Helper_PageLayout.php 15532 2007-08-31 14:39:46Z nanasess $
14 */
15class SC_Helper_PageLayout {
16
17    // }}}
18    // {{{ functions
19
20    /**
21     * ページのレイアウト情報をセットする.
22     *
23     * LC_Page オブジェクトにページのレイアウト情報をセットする.
24     *
25     * @param LC_Page $objPage ページ情報
26     * @param boolean $preview プレビュー表示の場合 true
27     * @param string $url ページのURL
28     * @return void
29     */
30    function sfGetPageLayout(&$objPage, $preview = false, $url = ""){
31        $arrPageLayout = array();
32
33        // 現在のURLの取得
34        if ($preview === false) {
35            if ($url == "") {
36                $url = "http://" . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'];
37            }
38            // URLを元にページデザインを取得
39            $arrPageData = $this->lfgetPageData(" url = ? " , array($url));
40        }else{
41            $arrPageData = $this->lfgetPageData(" page_id = ? " , array("0"));
42        }
43
44        // メインテンプレートファイルを設定
45        if (!isset($objPage->tpl_mainpage)) {
46            // $objPage->tpl_mainpage = HTML_PATH . $arrPageData[0]['tpl_dir'] . $arrPageData[0]['filename'] . ".tpl";
47            $objPage->tpl_mainpage = TEMPLATE_DIR . $arrPageData[0]['filename'] . ".tpl";
48        }
49
50        // ページタイトルを設定
51        if (!isset($objPage->tpl_title)) {
52            $objPage->tpl_title = $arrPageData[0]['page_name'];
53        }
54
55        $arrPageLayout = $arrPageData[0];
56
57        // 全ナビデータを取得する
58        $arrNavi = $this->lfGetNaviData($url, $preview);
59
60        $arrPageLayout['LeftNavi']  = $this->lfGetNavi($arrNavi,1); // LEFT NAVI
61        $arrPageLayout['MainHead']  = $this->lfGetNavi($arrNavi,2); // メイン上部
62        $arrPageLayout['RightNavi'] = $this->lfGetNavi($arrNavi,3); // RIGHT NAVI
63        $arrPageLayout['MainFoot']  = $this->lfGetNavi($arrNavi,4); // メイン下部
64
65        $objPage->arrPageLayout = $arrPageLayout;
66    }
67
68    /**
69     * ページ情報を取得する.
70     *
71     * @param string $where クエリのWHERE句
72     * @param array $arrVal WHERE句の条件値
73     * @return array ページ情報を格納した配列
74     */
75    function lfgetPageData($where = '', $arrVal = ''){
76        $objDBConn = new SC_DbConn;     // DB操作オブジェクト
77        $sql = "";                      // データ取得SQL生成用
78        $arrRet = array();              // データ取得用
79
80        // SQL生成
81        $sql .= " SELECT";
82        $sql .= " page_id";             // ページID
83        $sql .= " ,page_name";          // 名称
84        $sql .= " ,url";                // URL
85        $sql .= " ,php_dir";            // php保存先ディレクトリ
86        $sql .= " ,tpl_dir";            // tpl保存先ディレクトリ
87        $sql .= " ,filename";           // ファイル名称
88        $sql .= " ,header_chk ";        // ヘッダー使用FLG
89        $sql .= " ,footer_chk ";        // フッター使用FLG
90        $sql .= " ,edit_flg ";          // 編集可能FLG
91        $sql .= " ,author";             // authorタグ
92        $sql .= " ,description";        // descriptionタグ
93        $sql .= " ,keyword";            // keywordタグ
94        $sql .= " ,update_url";         // 更新URL
95        $sql .= " ,create_date";        // データ作成日
96        $sql .= " ,update_date";        // データ更新日
97        $sql .= " FROM ";
98        $sql .= "     dtb_pagelayout";
99        $sql .= " WHERE ";
100
101        // where句の指定があれば追加
102        if ($where != '') {
103            $sql .= $where;
104        }else{
105            $sql .= "     page_id != 0 ";
106        }
107
108        $sql .= " ORDER BY  page_id";
109
110        $arrRet = $objDBConn->getAll($sql, $arrVal);
111
112        return $arrRet;
113    }
114
115    /**
116     * ナビ情報を取得する.
117     *
118     * @param string $url ページのURL
119     * @param boolean $preview プレビュー表示の場合 true
120     * @return array ナビ情報の配列
121     */
122    function lfGetNaviData($url, $preview=false){
123        $objDBConn = new SC_DbConn;     // DB操作オブジェクト
124        $sql = "";                      // データ取得SQL生成用
125        $arrRet = array();              // データ取得用
126        $arrData = array();
127
128        // SQL文生成
129        $sql = "";
130        $sql .= " SELECT ";
131        $sql .= "     target_id ";
132        $sql .= "     ,(SELECT bloc_name FROM dtb_bloc AS bloc WHERE bloc.bloc_id = pos.bloc_id) AS bloc_name";
133        $sql .= "     ,(SELECT tpl_path FROM dtb_bloc AS bloc WHERE bloc.bloc_id = pos.bloc_id) AS tpl_path";
134        $sql .= "     ,(SELECT php_path FROM dtb_bloc AS bloc WHERE bloc.bloc_id = pos.bloc_id) AS php_path";
135        $sql .= " FROM";
136        $sql .= "     dtb_blocposition AS pos";
137        $sql .= " WHERE";
138        if ($preview == true) {
139            $sql .= "     page_id = (SELECT page_id FROM dtb_pagelayout WHERE page_id = '0')";
140        }else{
141            $sql .= "     page_id = (SELECT page_id FROM dtb_pagelayout WHERE url = ?)";
142            $arrData = array($url);
143        }
144        $sql .= " ORDER BY target_id,bloc_row";
145        $sql .= " ";
146
147        // SQL実行
148        $arrRet = $objDBConn->getAll($sql, $arrData);
149
150        // 結果を返す
151        return $arrRet;
152    }
153
154    /**
155     * 各部分のナビ情報を取得する.
156     *
157     * @param array $arrNavi ナビ情報の配列
158     * @param integer|string $target_id ターゲットID
159     * @return array ブロック情報の配列
160     */
161    function lfGetNavi($arrNavi, $target_id) {
162        $arrRet = array();
163        if(is_array($arrNavi)) {
164            foreach($arrNavi as $key => $val){
165                // 指定された箇所と同じデータだけを取得する
166                if ($target_id == $val['target_id']){
167                    if ($val['php_path'] != '') {
168                        $arrNavi[$key]['php_path'] = HTML_PATH . $val['php_path'];
169                        $arrNavi[$key]['include'] = "<!--{include file='".$val['php_path']."'}-->";
170                    }else{
171                        $arrNavi[$key]['tpl_path'] = TEMPLATE_DIR . $val['tpl_path'];
172                        $arrNavi[$key]['include'] = "<!--{include file='". TEMPLATE_DIR . $val['tpl_path'] ."'}-->";
173                    }
174
175                    $arrRet[] = $arrNavi[$key];
176                }
177            }
178        }
179        return $arrRet;
180    }
181
182    /**
183     * ページ情報を削除する.
184     *
185     * @param integer|string $page_id ページID
186     * @return integer 削除数
187     */
188    function lfDelPageData($page_id){
189        // DBへデータを更新する
190        $objDBConn = new SC_DbConn;     // DB操作オブジェクト
191        $sql = "";                      // データ更新SQL生成用
192        $ret = "";                      // データ更新結果格納用
193        $arrDelData = array();          // 更新データ生成用
194
195        // page_id が空でない場合にはdeleteを実行
196        if ($page_id != '') {
197
198            $arrPageData = $this->lfgetPageData(" page_id = ? " , array($page_id));
199            // SQL生成
200            $sql = " DELETE FROM dtb_pagelayout WHERE page_id = ?";
201
202            // SQL実行
203            $ret = $objDBConn->query($sql,array($page_id));
204
205            // ファイルの削除
206            $this->lfDelFile($arrPageData[0]);
207        }
208        return $ret;
209    }
210
211    /**
212     * ページのファイルを削除する.
213     *
214     * @param array $arrData ページ情報の配列
215     * @return void // TODO boolean にするべき?
216     */
217    function lfDelFile($arrData){
218        // ファイルディレクトリ取得
219        $del_php = HTML_PATH . $arrData['php_dir'] . $arrData['filename'] . ".php";
220        $del_tpl = HTML_PATH . $arrData['tpl_dir'] . $arrData['filename'] . ".tpl";
221
222        // phpファイルの削除
223        if (file_exists($del_php)){
224            unlink($del_php);
225        }
226
227        // tplファイルの削除
228        if (file_exists($del_tpl)){
229            unlink($del_tpl);
230        }
231    }
232
233    /**
234     * データがベースデータかどうか.
235     *
236     * @param integer|string $data ページID
237     * @return boolean ベースデータの場合 true
238     */
239    function lfCheckBaseData($data){
240        $ret = false;
241
242        if ($data == 0) {
243            return $ret;
244        }
245
246        $arrChkData = $this->lfgetPageData("page_id = ?", array($data));
247
248        if ($arrChkData[0]['edit_flg'] == 2){
249            $ret = true;
250        }
251
252        return $ret;
253    }
254}
255?>
Note: See TracBrowser for help on using the repository browser.