[15531] | 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 | */ |
---|
| 35 | require_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 | */ |
---|
| 58 | function 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 | //¥¥ã¥Ã¥·¥å¤·¤Ê¤¤(Ç°¤Î¤¿¤á) |
---|
| 76 | header("Paragrama: no-cache"); |
---|
| 77 | |
---|
| 78 | //XML¥Æ¥¥¹¥È |
---|
| 79 | header("Content-type: application/xml; charset=utf-8"); |
---|
| 80 | |
---|
| 81 | // ɬ¤º UTF-8 ¤È¤·¤Æ½ÐÎÏ |
---|
| 82 | mb_http_output("UTF-8"); |
---|
| 83 | ob_start('mb_output_handler'); |
---|
| 84 | |
---|
| 85 | print("<?xml version='1.0' encoding='UTF-8'?>\n"); |
---|
| 86 | print("<urlset xmlns='http://www.sitemaps.org/schemas/sitemap/0.9'>\n"); |
---|
| 87 | |
---|
| 88 | // ---------------------------------------------------------------------------- |
---|
| 89 | // }}} |
---|
| 90 | // {{{ Controller Logic |
---|
| 91 | |
---|
| 92 | // ÀÅŪ¤Ê¥Ú¡¼¥¸¤ò½èÍý |
---|
| 93 | foreach($staticURL as $url) { |
---|
| 94 | createSitemap($url, '', 'daily', 1.0); |
---|
| 95 | } |
---|
| 96 | // ¥Ú¡¼¥¸¤Î¥Ç¡¼¥¿¤ò¼èÆÀ |
---|
| 97 | $objPageData = new LC_PageLayout; |
---|
| 98 | |
---|
| 99 | // TOP¥Ú¡¼¥¸¤ò½èÍý |
---|
| 100 | $topPage = getTopPage($objPageData->arrPageList); |
---|
| 101 | createSitemap($topPage[0]['url'], date2W3CDatetime($topPage[0]['update_date']), |
---|
| 102 | 'daily', 1.0); |
---|
| 103 | |
---|
| 104 | // ÊÔ½¸²Äǽ¥Ú¡¼¥¸¤ò½èÍý |
---|
| 105 | $editablePages = getEditablePage($objPageData->arrPageList); |
---|
| 106 | foreach($editablePages as $editablePage) { |
---|
| 107 | createSitemap($editablePage['url'], date2W3CDatetime($editablePage['update_date'])); |
---|
| 108 | } |
---|
| 109 | |
---|
| 110 | // ¾¦ÉÊ°ìÍ÷¥Ú¡¼¥¸¤ò½èÍý |
---|
| 111 | $products = getAllProducts(); |
---|
| 112 | foreach($products as $product) { |
---|
| 113 | createSitemap($product['url'], '', 'daily'); |
---|
| 114 | } |
---|
| 115 | $mobileProducts = getAllProducts(true); |
---|
| 116 | foreach($mobileProducts as $mobileProduct) { |
---|
| 117 | createSitemap($mobileProduct['url'], '', 'daily'); |
---|
| 118 | } |
---|
| 119 | |
---|
| 120 | // ¾¦Éʾܺ٥ڡ¼¥¸¤ò½èÍý |
---|
| 121 | $details = getAllDetail(); |
---|
| 122 | foreach($details as $detail) { |
---|
| 123 | createSitemap($detail['url'], date2W3CDatetime($detail['update_date'])); |
---|
| 124 | } |
---|
| 125 | $mobileDetails = getAllDetail(true); |
---|
| 126 | foreach($mobileDetails as $mobileDetail) { |
---|
| 127 | createSitemap($mobileDetail['url'], date2W3CDatetime($mobileDetail['update_date'])); |
---|
| 128 | } |
---|
| 129 | |
---|
| 130 | print("</urlset>\n"); |
---|
| 131 | |
---|
| 132 | // ---------------------------------------------------------------------------- |
---|
| 133 | // }}} |
---|
| 134 | // {{{ Model Logic |
---|
| 135 | |
---|
| 136 | /** |
---|
| 137 | * TOP¥Ú¡¼¥¸¤Î¾ðÊó¤ò¼èÆÀ |
---|
| 138 | * |
---|
| 139 | * @param array $pageData ¤¹¤Ù¤Æ¤Î¥Ú¡¼¥¸¾ðÊó¤ÎÇÛÎó |
---|
| 140 | * @return TOP¥Ú¡¼¥¸¤Î¾ðÊó |
---|
| 141 | */ |
---|
| 142 | function 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 | */ |
---|
| 159 | function 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 | */ |
---|
| 176 | function 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 | */ |
---|
| 193 | class 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 | */ |
---|
| 257 | function 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 | */ |
---|
| 282 | function 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 | ?> |
---|