* @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);
}
}
}
}
}
}
}