source: branches/feature-module-update/html/sitemap.php @ 15531

Revision 15531, 8.5 KB checked in by nanasess, 13 years ago (diff)

暫定 commit

  • Property svn:keywords set to Id Revision Date
Line 
1<?php
2/**
3 *
4 * Copyright(c) 2000-2007 LOCKON CO.,LTD. All Rights Reserved.
5 *
6 * http://www.lockon.co.jp/
7 *
8 */
9
10/**
11 * Sitemap¥×¥í¥È¥³¥ë ¥Õ¥¡¥¤¥ëÀ¸À®¥â¥¸¥å¡¼¥ë.
12 * PHP versions 4 and 5
13 *
14 * <pre>
15 * ¤³¤Î¥â¥¸¥å¡¼¥ë¤Ï Sitemap¥×¥í¥È¥³¥ë¤ËÂбþ¤·¤¿ XML¥Õ¥¡¥¤¥ë¤ò½ÐÎϤ¹¤ë.
16 * EC-CUBE ¥¤¥ó¥¹¥È¡¼¥ë¥Ç¥£¥ì¥¯¥È¥ê¤Î html¥Ç¥£¥ì¥¯¥È¥ê¤ØÇÛÃÖ¤¹¤ë¤³¤È¤Ë¤è¤êÆ°ºî¤¹¤ë.
17 *
18 * ¤³¤Î¥â¥¸¥å¡¼¥ë¤Ë¤è¤ê, °Ê²¼¤Î¥Ú¡¼¥¸¤Î¥µ¥¤¥È¥Þ¥Ã¥×¤¬À¸À®¤µ¤ì¤ë.
19 * 1. $staticURL ¤Ç»ØÄꤷ¤¿¥Ú¡¼¥¸
20 * 2. ´ÉÍý²èÌ̤Υǥ¶¥¤¥ó´ÉÍý¤«¤éÀ¸À®¤·¤¿¥Ú¡¼¥¸
21 * 3. ¸ø³«¤µ¤ì¤Æ¤¤¤ë¤¹¤Ù¤Æ¤Î¾¦ÉÊ°ìÍ÷¥Ú¡¼¥¸
22 * 4. ¸ø³«¤µ¤ì¤Æ¤¤¤ë¤¹¤Ù¤Æ¤Î¾¦Éʾܺ٥ڡ¼¥¸
23 * 5. html/mobile °Ê²¼¤Î¾åµ­¥Ú¡¼¥¸
24 *
25 * ¤³¤Î¥â¥¸¥å¡¼¥ë¤òÀßÃÖ¸å, ³Æ¸¡º÷¥¨¥ó¥¸¥ó¤Ë¥µ¥¤¥È¥Þ¥Ã¥×¤òÅÐÏ¿¤¹¤ë¤³¤È¤Ë¤è¤ê, ¸¡º÷¥¨¥ó¥¸¥ó¤Î
26 * ¥¤¥ó¥Ç¥Ã¥¯¥¹²½¤¬Â¥¿Ê¤µ¤ì¤ë.
27 * </pre>
28 * @see https://www.google.com/webmasters/tools/siteoverview?hl=ja
29 * @see https://siteexplorer.search.yahoo.com/mysites
30 *
31 * @author Kentaro Ohkouchi
32 * @version $Id$
33 *
34 */
35require_once("require.php");
36// --------------------------------------------------------------------- ½é´üÀßÄê
37// :TODO: filemtime ´Ø¿ô¤ò»È¤¨¤Ð¡¢ÀÅŪ¤Ê¥Ú¡¼¥¸¤Î¹¹¿·»þ´Ö¤â¼èÆÀ¤¹¤ë¤è¤¦¤Ë¤Ç¤­¤½¤¦
38//
39// ưŪ¤ËÀ¸À®¤µ¤ì¤Ê¤¤¥Ú¡¼¥¸¤òÇÛÎó¤Ç»ØÄê
40$staticURL = array(SITE_URL, MOBILE_SITE_URL, SITE_URL . "rss/index.php");
41// :TODO: ³Æ¥Ú¡¼¥¸¤Î changefreq ¤ä priority ¤ò»ØÄê¤Ç¤­¤ë¤è¤¦¤Ë¤¹¤ë
42// ----------------------------------------------------------------------------
43
44// ----------------------------------------------------------------------------
45// }}}
46// {{{ View Logic
47
48/**
49 * Sitemap ¤Î <url /> ¤òÀ¸À®¤¹¤ë.
50 *
51 * @param string $loc ¥Ú¡¼¥¸¤Î URL ¢¨É¬¿Ü
52 * @param string $lastmod ¥Õ¥¡¥¤¥ë¤ÎºÇ½ª¹¹¿·Æü YYYY-MM-DD or  W3C Datetime ·Á¼°
53 * @param string $changefreq ¥Ú¡¼¥¸¤Î¹¹¿·ÉÑÅÙ
54 * @param double $priority URL ¤ÎÍ¥ÀèÅÙ
55 * @return Sitemap ·Á¼°¤Î <url />
56 * @see https://www.google.com/webmasters/tools/docs/ja/protocol.html#xmlTagDefinitions
57 */
58function createSitemap($loc, $lastmod = "", $changefreq = "", $priority = "") {
59    printf("\t<url>\n");
60    printf("\t\t<loc>%s</loc>\n", htmlentities($loc, ENT_QUOTES, "UTF-8"));
61    if (!empty($lastmod)) {
62        printf("\t\t<lastmod>%s</lastmod>\n", $lastmod);
63    }
64    if (!empty($changefreq)) {
65        printf("\t\t<changefreq>%s</changefreq>\n", $changefreq);
66    }
67    if(!empty($priority)) {
68        printf("\t\t<priority>%01.1f</priority>\n", $priority);
69    }
70    printf("\t</url>\n");
71}
72
73$objQuery = new SC_Query();
74
75//¥­¥ã¥Ã¥·¥å¤·¤Ê¤¤(Ç°¤Î¤¿¤á)
76header("Paragrama: no-cache");
77
78//XML¥Æ¥­¥¹¥È
79header("Content-type: application/xml; charset=utf-8");
80
81// ɬ¤º UTF-8 ¤È¤·¤Æ½ÐÎÏ
82mb_http_output("UTF-8");
83ob_start('mb_output_handler');
84
85print("<?xml version='1.0' encoding='UTF-8'?>\n");
86print("<urlset xmlns='http://www.sitemaps.org/schemas/sitemap/0.9'>\n");
87
88// ----------------------------------------------------------------------------
89// }}}
90// {{{ Controller Logic
91
92// ÀÅŪ¤Ê¥Ú¡¼¥¸¤ò½èÍý
93foreach($staticURL as $url) {
94    createSitemap($url, '', 'daily', 1.0);
95}
96// ¥Ú¡¼¥¸¤Î¥Ç¡¼¥¿¤ò¼èÆÀ
97$objPageData = new LC_PageLayout;
98
99// TOP¥Ú¡¼¥¸¤ò½èÍý
100$topPage = getTopPage($objPageData->arrPageList);
101createSitemap($topPage[0]['url'], date2W3CDatetime($topPage[0]['update_date']),
102                'daily', 1.0);
103
104// ÊÔ½¸²Äǽ¥Ú¡¼¥¸¤ò½èÍý
105$editablePages = getEditablePage($objPageData->arrPageList);
106foreach($editablePages as $editablePage) {
107    createSitemap($editablePage['url'], date2W3CDatetime($editablePage['update_date']));
108}
109
110// ¾¦ÉÊ°ìÍ÷¥Ú¡¼¥¸¤ò½èÍý
111$products = getAllProducts();
112foreach($products as $product) {
113    createSitemap($product['url'], '', 'daily');
114}
115$mobileProducts = getAllProducts(true);
116foreach($mobileProducts as $mobileProduct) {
117    createSitemap($mobileProduct['url'], '', 'daily');
118}
119
120// ¾¦Éʾܺ٥ڡ¼¥¸¤ò½èÍý
121$details = getAllDetail();
122foreach($details as $detail) {
123    createSitemap($detail['url'], date2W3CDatetime($detail['update_date']));
124}
125$mobileDetails = getAllDetail(true);
126foreach($mobileDetails as $mobileDetail) {
127    createSitemap($mobileDetail['url'], date2W3CDatetime($mobileDetail['update_date']));
128}
129
130print("</urlset>\n");
131
132// ----------------------------------------------------------------------------
133// }}}
134// {{{ Model Logic
135
136/**
137 * TOP¥Ú¡¼¥¸¤Î¾ðÊó¤ò¼èÆÀ
138 *
139 * @param array $pageData ¤¹¤Ù¤Æ¤Î¥Ú¡¼¥¸¾ðÊó¤ÎÇÛÎó
140 * @return TOP¥Ú¡¼¥¸¤Î¾ðÊó
141 */
142function getTopPage($pageData) {
143    $arrRet = array();
144    foreach($pageData as $page) {
145        if ($page['page_id'] == "1") {
146            $page['url'] = SITE_URL . $page['url'];
147            $arrRet[0] = $page;
148            return $arrRet;
149        }
150    }
151}
152
153/**
154 * ¤¹¤Ù¤Æ¤ÎÊÔ½¸²Äǽ¥Ú¡¼¥¸¤Î¾ðÊó¤ò¼èÆÀ¤¹¤ë.
155 *
156 * @param array $pageData ¤¹¤Ù¤Æ¤Î¥Ú¡¼¥¸¾ðÊó¤ÎÇÛÎó
157 * @return ÊÔ½¸²Äǽ¥Ú¡¼¥¸
158 */
159function getEditablePage($pageData) {
160    $arrRet = array();
161    $i = 0;
162    foreach($pageData as $page) {
163        if ($page['page_id'] > 4) {
164            $arrRet[$i] = $page;
165            $i++;
166        }
167    }
168    return $arrRet;
169}
170
171/**
172 * date·Á¼°¤Îʸ»úÎó¤ò W3C Datetime ·Á¼°¤ËÊÑ´¹¤·¤Æ½ÐÎϤ¹¤ë.
173 *
174 * @param date $date ÊÑ´¹¤¹¤ëÆüÉÕ
175 */
176function date2W3CDatetime($date) {
177    $arr = array();
178    // Àµµ¬É½¸½¤Çʸ»úÎó¤òÃê½Ð
179    ereg("^([0-9]{4})-([0-9]{2})-([0-9]{2}) ([0-9]{2}):([0-9]{2}):([0-9]{2})",
180        $date, $arr);
181    // :TODO: time zone ¤â¼èÆÀ¤¹¤ë¤Ù¤­...
182    return sprintf("%04d-%02d-%02dT%02d:%02d:%02d+09:00",
183            $arr[1], $arr[2], $arr[3], $arr[4], $arr[5], $arr[6]);
184}
185
186// ----------------------------------------------------------------------------
187// }}}
188// {{{ DB Access Objects
189
190/**
191 * ¥Ú¡¼¥¸¥Ç¡¼¥¿¤ò°·¤¦¥¯¥é¥¹.
192 */
193class LC_PageLayout {
194
195    var $arrPageData;       // ¥Ú¡¼¥¸¥Ç¡¼¥¿³ÊǼÍÑ
196    var $arrPageList;       // ¥Ú¡¼¥¸¥Ç¡¼¥¿³ÊǼÍÑ
197
198    /**
199     * ¥³¥ó¥¹¥È¥é¥¯¥¿.
200     */
201    function LC_PageLayout() {
202        $this->arrPageList = $this->getPageData();
203    }
204
205    /**
206     * ¥Ö¥í¥Ã¥¯¾ðÊó¤ò¼èÆÀ¤¹¤ë.
207     *
208     * @param string $where WHERE¶ç
209     * @param array  $arrVal WHERE¶ç¤ÎÃͤò³ÊǼ¤·¤¿ÇÛÎó
210     * @return ¥Ö¥í¥Ã¥¯¾ðÊó
211     */
212    function getPageData($where = '', $arrVal = ''){
213        $objDBConn = new SC_DbConn;     // DBÁàºî¥ª¥Ö¥¸¥§¥¯¥È
214        $sql = "";                      // ¥Ç¡¼¥¿¼èÆÀSQLÀ¸À®ÍÑ
215        $arrRet = array();              // ¥Ç¡¼¥¿¼èÆÀÍÑ
216
217        // SQLÀ¸À®(url ¤È update_date °Ê³°¤ÏÉÔÍס©)
218        $sql .= " SELECT";
219        $sql .= " page_id";             // ¥Ú¡¼¥¸ID
220        $sql .= " ,page_name";          // ̾¾Î
221        $sql .= " ,url";                // URL
222        $sql .= " ,php_dir";            // phpÊݸÀè¥Ç¥£¥ì¥¯¥È¥ê
223        $sql .= " ,tpl_dir";            // tplÊݸÀè¥Ç¥£d¥ì¥¯¥È¥ê
224        $sql .= " ,filename";           // ¥Õ¥¡¥¤¥ë̾¾Î
225        $sql .= " ,header_chk ";        // ¥Ø¥Ã¥À¡¼»ÈÍÑFLG
226        $sql .= " ,footer_chk ";        // ¥Õ¥Ã¥¿¡¼»ÈÍÑFLG
227        $sql .= " ,author";             // author¥¿¥°
228        $sql .= " ,description";        // description¥¿¥°
229        $sql .= " ,keyword";            // keyword¥¿¥°
230        $sql .= " ,update_url";         // ¹¹¿·URL
231        $sql .= " ,create_date";        // ¥Ç¡¼¥¿ºîÀ®Æü
232        $sql .= " ,update_date";        // ¥Ç¡¼¥¿¹¹¿·Æü
233        $sql .= " FROM ";
234        $sql .= "     dtb_pagelayout";
235
236        // where¶ç¤Î»ØÄ꤬¤¢¤ì¤ÐÄɲÃ
237        if ($where != '') {
238            $sql .= " WHERE " . $where;
239        }
240
241        $sql .= " ORDER BY  page_id";
242
243        $arrRet = $objDBConn->getAll($sql, $arrVal);
244
245        $this->arrPageData = $arrRet;
246
247        return $arrRet;
248    }
249}
250
251/**
252 * ¤¹¤Ù¤Æ¤Î¾¦ÉÊ°ìÍ÷¥Ú¡¼¥¸¤ò¼èÆÀ¤¹¤ë.
253 *
254 * @param boolean $isMobile ¥â¥Ð¥¤¥ë¥Ú¡¼¥¸¤ò¼èÆÀ¤¹¤ë¾ì¹ç true
255 * @return ¸¡º÷¥¨¥ó¥¸¥ó¤«¤é¥¢¥¯¥»¥¹²Äǽ¤Ê¾¦ÉÊ°ìÍ÷¥Ú¡¼¥¸¤Î¾ðÊó
256 */
257function getAllProducts($isMobile = false) {
258    $conn = new SC_DBConn();
259    $sql = "SELECT category_id FROM dtb_category WHERE del_flg = 0";
260    $result = $conn->getAll($sql);
261
262    $mobile = "";
263    if ($isMobile) {
264        $mobile = "mobile/";
265    }
266
267    $arrRet = array();
268    for ($i = 0; $i < count($result); $i++) {
269        // :TODO: ¥«¥Æ¥´¥ê¤ÎºÇ½ª¹¹¿·Æü¤ò¼èÆÀ¤Ç¤­¤ë¤è¤¦¤Ë¤¹¤ë
270        $page = array("url" => SITE_URL . sprintf("%sproducts/list.php?category_id=%d", $mobile, $result[$i]['category_id']));
271        $arrRet[$i] = $page;
272    }
273    return $arrRet;
274}
275
276/**
277 * ¤¹¤Ù¤Æ¤Î¾¦Éʾܺ٥ڡ¼¥¸¤ò¼èÆÀ¤¹¤ë.
278 *
279 * @param boolean $isMobile ¥â¥Ð¥¤¥ë¥Ú¡¼¥¸¤ò¼èÆÀ¤¹¤ë¾ì¹ç true
280 * @return ¸¡º÷¥¨¥ó¥¸¥ó¤«¤é¥¢¥¯¥»¥¹²Äǽ¤Ê¾¦Éʾܺ٥ڡ¼¥¸¤Î¾ðÊó
281 */
282function getAllDetail($isMobile = false) {
283    $conn = new SC_DBConn();
284    $sql = "SELECT product_id, update_date FROM dtb_products WHERE del_flg = 0 AND status = 1";
285    $result = $conn->getAll($sql);
286
287    $mobile = "";
288    if ($isMobile) {
289        $mobile = "mobile/";
290    }
291
292    $arrRet = array();
293    for ($i = 0; $i < count($result); $i++) {
294        $page = array("url" => SITE_URL. sprintf("%sproducts/detail.php?product_id=%d", $mobile, $result[$i]['product_id']),
295                        "update_date" => $result[$i]['update_date']);
296        $arrRet[$i] = $page;
297    }
298    return $arrRet;
299}
300?>
Note: See TracBrowser for help on using the repository browser.