| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276 |
- <?php
- /*
- * FecShop file.
- *
- * @link http://www.fecshop.com/
- * @copyright Copyright (c) 2016 FecShop Software LLC
- * @license http://www.fecshop.com/license/
- */
- namespace fecshop\services;
- use Yii;
- /**
- * Sitemap services.
- * @author Terry Zhao <2358269014@qq.com>
- * @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 = '<?xml version="1.0" encoding="UTF-8"?>
- <?xml-stylesheet type="text/xsl" href="gss.xsl"?>
- <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.google.com/schemas/sitemap/0.84 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd">
- ';
- 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 = '</urlset>';
- 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 = '<url><loc>'.$home_url.'</loc><lastmod>'.$this->currentDate.'</lastmod></url>';
- 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 = '<url><loc>'.$category_url.'</loc><lastmod>'.$this->currentDate.'</lastmod></url>';
- 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 = '<url><loc>'.$product_url.'</loc><lastmod>'.$this->currentDate.'</lastmod></url>';
- 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 = '<url><loc>'.$cms_page_url.'</loc><lastmod>'.$this->currentDate.'</lastmod></url>';
- fwrite($xmlFile, $str);
- }
- }
- }
- fclose($xmlFile);
- }
- }
- }
- }
- }
- }
- }
|