* @since 1.0 */ class Sitemap extends Service { public $numPerPage = 100; public $sitemapConfig; protected $currentDate; // = date('Y-m-d'); protected function initSiteMap() { $this->currentDate = date('Y-m-d'); } /** * 在store的配置中,没一个store都有一个sitemap文件路径的配置项,譬如: * 'sitemapDir' => '@appfront/web/sitemap.xml', * 下面就是sitemap开始阶段,把格式头写入到对应的sitemap文件中 * 对于sitemp.xml文件的访问,为了需要,您可以在nginx中做重新的指向。 * sitemap的更多资料,您可以参看:http://www.fecshop.com/doc/fecshop-guide/instructions/cn-1.0/guide-fecshop_sitemap.html */ protected function actionBeginSiteMap() { $this->initSiteMap(); if (is_array($this->sitemapConfig) && !empty($this->sitemapConfig)) { foreach ($this->sitemapConfig as $appIn => $store) { if (is_array($store) && !empty($store)) { foreach ($store as $domain => $info) { $sitemapDir = (isset($info['sitemapDir']) && $info['sitemapDir']) ? $info['sitemapDir'] : ''; if ($sitemapDir) { $sitemapAbsoluteDir = Yii::getAlias($sitemapDir); $xmlFile = fopen($sitemapAbsoluteDir, 'w') or die('Unable to open file!'); if (file_exists($sitemapAbsoluteDir)) { $str = ' '; fwrite($xmlFile, $str); } fclose($xmlFile); } } } } } } /** * sitemap 文件写入内容后的结束执行的函数。 */ protected function actionEndSiteMap() { $this->initSiteMap(); if (is_array($this->sitemapConfig) && !empty($this->sitemapConfig)) { foreach ($this->sitemapConfig as $appIn => $store) { if (is_array($store) && !empty($store)) { foreach ($store as $domain => $info) { $sitemapDir = (isset($info['sitemapDir']) && $info['sitemapDir']) ? $info['sitemapDir'] : ''; if ($sitemapDir) { $sitemapAbsoluteDir = Yii::getAlias($sitemapDir); $xmlFile = fopen($sitemapAbsoluteDir, 'a') or die('Unable to open file!'); if (file_exists($sitemapAbsoluteDir)) { $str = ''; fwrite($xmlFile, $str); } fclose($xmlFile); } } } } } } /** * 在sitemap文件中写入home部分的链接 */ protected function actionHome() { $this->initSiteMap(); if (is_array($this->sitemapConfig) && !empty($this->sitemapConfig)) { foreach ($this->sitemapConfig as $appIn => $store) { if (is_array($store) && !empty($store)) { foreach ($store as $domain => $info) { $https = $info['https']; $showScriptName = $info['showScriptName']; $sitemapDir = (isset($info['sitemapDir']) && $info['sitemapDir']) ? $info['sitemapDir'] : ''; if ($sitemapDir) { $sitemapAbsoluteDir = Yii::getAlias($sitemapDir); $xmlFile = fopen($sitemapAbsoluteDir, 'a') or die('Unable to open file!'); if (file_exists($sitemapAbsoluteDir)) { $home_url = Yii::$service->url->getUrlByDomain('', [], $https, $domain, $showScriptName, true); $str = ''.$home_url.''.$this->currentDate.''; fwrite($xmlFile, $str); } fclose($xmlFile); } } } } } } /** * 得到分类的总个数 */ protected function actionCategorypagecount() { $this->initSiteMap(); $coll = Yii::$service->category->coll(); $count = $coll['count']; echo ceil($count / $this->numPerPage); } /** * 在sitemap文件中写入分类部分的链接 */ protected function actionCategory($pageNum) { $this->initSiteMap(); if (is_array($this->sitemapConfig) && !empty($this->sitemapConfig)) { foreach ($this->sitemapConfig as $appIn => $store) { if (is_array($store) && !empty($store)) { foreach ($store as $domain => $info) { $https = $info['https']; $showScriptName = $info['showScriptName']; $sitemapDir = (isset($info['sitemapDir']) && $info['sitemapDir']) ? $info['sitemapDir'] : ''; if ($sitemapDir) { $sitemapAbsoluteDir = Yii::getAlias($sitemapDir); $xmlFile = fopen($sitemapAbsoluteDir, 'a') or die('Unable to open file!'); if (file_exists($sitemapAbsoluteDir)) { $filter = [ 'numPerPage' => $this->numPerPage, 'pageNum' => $pageNum, 'asArray' => true, ]; $coll = Yii::$service->category->coll($filter); $data = $coll['coll']; if (is_array($data) && !empty($data)) { foreach ($data as $one) { $category_url_key = $one['url_key']; $category_url = Yii::$service->url->getUrlByDomain($category_url_key, [], $https, $domain, $showScriptName, true); $str = ''.$category_url.''.$this->currentDate.''; fwrite($xmlFile, $str); } } } fclose($xmlFile); } } } } } } /** * 得到产品的总个数 */ protected function actionProductpagecount() { $this->initSiteMap(); $coll = Yii::$service->product->coll(); $count = $coll['count']; echo ceil($count / $this->numPerPage); } /** * 在sitemap文件中写入产品部分的链接 */ protected function actionProduct() { $this->initSiteMap(); if (is_array($this->sitemapConfig) && !empty($this->sitemapConfig)) { foreach ($this->sitemapConfig as $appIn => $store) { if (is_array($store) && !empty($store)) { foreach ($store as $domain => $info) { $https = $info['https']; $showScriptName = $info['showScriptName']; $sitemapDir = (isset($info['sitemapDir']) && $info['sitemapDir']) ? $info['sitemapDir'] : ''; if ($sitemapDir) { $sitemapAbsoluteDir = Yii::getAlias($sitemapDir); $xmlFile = fopen($sitemapAbsoluteDir, 'a') or die('Unable to open file!'); if (file_exists($sitemapAbsoluteDir)) { $filter = [ 'numPerPage' => $this->numPerPage, 'pageNum' => $pageNum, 'asArray' => true, ]; $coll = Yii::$service->product->coll($filter); $data = $coll['coll']; if (is_array($data) && !empty($data)) { foreach ($data as $one) { $product_url_key = $one['url_key']; $product_url = Yii::$service->url->getUrlByDomain($product_url_key, [], $https, $domain, $showScriptName, true); $str = ''.$product_url.''.$this->currentDate.''; fwrite($xmlFile, $str); } } } fclose($xmlFile); } } } } } } /** * page页的总个数 */ protected function actionCmspagepagecount() { $this->initSiteMap(); $coll = Yii::$service->cms->article->coll(); $count = $coll['count']; echo ceil($count / $this->numPerPage); } /** * 在sitemap文件中写入page部分的链接 */ protected function actionCmspage() { $this->initSiteMap(); if (is_array($this->sitemapConfig) && !empty($this->sitemapConfig)) { foreach ($this->sitemapConfig as $appIn => $store) { if (is_array($store) && !empty($store)) { foreach ($store as $domain => $info) { $https = $info['https']; $showScriptName = $info['showScriptName']; $sitemapDir = (isset($info['sitemapDir']) && $info['sitemapDir']) ? $info['sitemapDir'] : ''; if ($sitemapDir) { $sitemapAbsoluteDir = Yii::getAlias($sitemapDir); $xmlFile = fopen($sitemapAbsoluteDir, 'a') or die('Unable to open file!'); if (file_exists($sitemapAbsoluteDir)) { $filter = [ 'numPerPage' => $this->numPerPage, 'pageNum' => $pageNum, 'asArray' => true, ]; $coll = Yii::$service->cms->article->coll($filter); $data = $coll['coll']; if (is_array($data) && !empty($data)) { foreach ($data as $one) { $cms_page_url_key = $one['url_key']; $cms_page_url = Yii::$service->url->getUrlByDomain($cms_page_url_key, [], $https, $domain, $showScriptName, true); $str = ''.$cms_page_url.''.$this->currentDate.''; fwrite($xmlFile, $str); } } } fclose($xmlFile); } } } } } } }