PHP產生sitemap.xml地圖函數_PHP教程

來源:互聯網
上載者:User
複製代碼 代碼如下:

/**
* 網站地圖更新控制器
*
* @author Garbin
* @usage none
*/
class SitemapApp extends FrontendApp
{
function __construct()
{
$this->SitemapApp();
}
function SitemapApp()
{
parent::__construct();
$this->_google_sitemmap_file = ROOT_PATH . '/data/google_sitemmap.xml';
}

function index()
{
if (!Conf::get('sitemap_enabled'))
{
return;
}
$from = empty($_GET['from']) ? 'google' : trim($_GET['from']);
switch ($from)
{
case 'google':
$this->_output_google_sitemap();
break;
}
}

/**
* 輸出Google sitemap
*
* @author Garbin
* @return void
*/
function _output_google_sitemap()
{
header("Content-type: application/xml");
echo $this->_get_google_sitemap();
}

/**
* 擷取Google sitemap
*
* @author Garbin
* @return string
*/
function _get_google_sitemap()
{
$sitemap = "";
if ($this->_google_sitemap_expired())
{
/* 已到期,重建 */

/* 擷取有更新的項目 */
$updated_items = $this->_get_updated_items($this->_get_google_sitemap_lastupdate());

/* 重建sitemap */
$sitemap = $this->_build_google_sitemap($updated_items);

/* 寫入檔案 */
$this->_write_google_sitemap($sitemap);
}
else
{
/* 直接返回舊的sitemap */
$sitemap = file_get_contents($this->_google_sitemmap_file);
}

return $sitemap;
}

/**
* 判斷Google sitemap是否到期
*
* @author Garbin
* @return boolean
*/
function _google_sitemap_expired()
{
if (!is_file($this->_google_sitemmap_file))
{
return true;
}
$frequency = Conf::get('sitemap_frequency') * 3600;
$filemtime = $this->_get_google_sitemap_lastupdate();

return (time() >= $filemtime + $frequency);
}

/**
* 擷取上次更新日期
*
* @author Garbin
* @return int
*/
function _get_google_sitemap_lastupdate()
{
return is_file($this->_google_sitemmap_file) ? filemtime($this->_google_sitemmap_file) : 0;
}

/**
* 擷取已更新的項目
*
* @author Garbin
* @return array
*/
function _get_updated_items($timeline = 0)
{
$timeline && $timeline -= date('Z');
$limit = 5000;
$result = array();
/* 更新的店鋪 */
$model_store =& m('store');
$updated_store = $model_store->find(array(
'fields' => 'store_id, add_time',
'conditions' => "add_time >= {$timeline} AND state=" . STORE_OPEN,
'limit' => "0, {$limit}",
));

if (!empty($updated_store))
{
foreach ($updated_store as $_store_id => $_v)
{
$result[] = array(
'url' => SITE_URL . '/index.php?app=store&id=' . $_store_id,
'lastmod' => date("Y-m-d", $_v['add_time']),
'changefreq'=> 'daily',
'priority' => '1',
);
}
}
/* 更新的文章 */
$model_article =& m('article');
$updated_article = $model_article->find(array(
'fields' => 'article_id, add_time',
'conditions'=> "add_time >= {$timeline} AND if_show=1",
'limit' => "0, {$limit}",
));
if (!empty($updated_article))
{
foreach ($updated_article as $_article_id => $_v)
{
$result[] = array(
'url' => SITE_URL . '/index.php?app=article&act=view&article_id=' . $_article_id,
'lastmod' => date("Y-m-d", $_v['add_time']),
'changefreq'=> 'daily',
'priority' => '0.8',
);
}
}

/* 更新的商品 */
$model_goods =& m('goods');
$updated_goods = $model_goods->find(array(
'fields' => 'goods_id, last_update',
'conditions' => "last_update >= {$timeline} AND if_show=1 AND closed=0",
'limit' => "0, {$limit}",
));
if (!empty($updated_goods))
{
foreach ($updated_goods as $_goods_id => $_v)
{
$result[] = array(
'url' => SITE_URL . '/index.php?app=goods&id=' . $_goods_id,
'lastmod' => date("Y-m-d", $_v['last_update']),
'changefreq'=> 'daily',
'priority' => '0.8',
);
}
}

return $result;
}

/**
* 產生Google sitemap
*
* @author Garbin
* @param array $items
* @return string
*/
function _build_google_sitemap($items)
{
$sitemap = "\r\n\r\n";
$sitemap .= " \r\n " . htmlentities(SITE_URL, ENT_QUOTES) . "\r\n " . date('Y-m-d', gmtime()) . "\r\n always\r\n 1\r\n ";
if (!empty($items))
{
foreach ($items as $item)
{
$sitemap .= "\r\n \r\n " . htmlentities($item['url'], ENT_QUOTES) . "\r\n {$item['lastmod']}\r\n {$item['changefreq']}\r\n {$item['priority']}\r\n ";
}
}
$sitemap .= "\r\n";

return $sitemap;
}

/**
* 寫入Google sitemap檔案
*
* @author Garbin
* @param string $sitemap
* @return void
*/
function _write_google_sitemap($sitemap)
{
file_put_contents($this->_google_sitemmap_file, $sitemap);
}
}

?>

http://www.bkjia.com/PHPjc/825178.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/825178.htmlTechArticle複製代碼 代碼如下: ?php /** * 網站地圖更新控制器 * * @author Garbin * @usage none */ class SitemapApp extends FrontendApp { function __construct() { $this-SitemapA...

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.