Adatum
Авг
17
2014
PHP /

Генерируем файл sitemap.xml динамичести с помощю php

sitemap.xml
Все прекрасно знают о пользе файла sitemap.xml рассмотрим перемер как этот файл сгенерировать автоматически.

у нас получится 2 файла, 1 sitemap.php

<?php
header("content-type: text/xml;");
 
echo '<?xml version="1.0" encoding="UTF-8"?>
<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9
                                  http://www.sitemaps.org/schemas/sitemap/0.9/siteindex.xsd">
';
 

$link = mysql_connect('localhost', 'login', 'password') or die("cannot connect"); 
mysql_select_db('bdname', $link); 

DEFINE('ITEMS_PER_PAGE', 1000); //1000- это количество элементов на страницу сайта
 
$query="SELECT COUNT(*) FROM data";
$res = mysql_query( $query );
$total = mysql_result( $res, 0, 0 );
 
$howmuch=ceil($total/ITEMS_PER_PAGE);
for($i=1; $i<=$howmuch; $i++)
{
echo '<sitemap><loc>http://adatum.ru/sitemap'.$i.'.xml</loc></sitemap>';
}
 ?> 
</sitemapindex>

второй файл sitemapn.php в котором собственно и будет формироваться xml

<?php
header("content-type: text/xml;");
//подключаем нашу таблицу
$link = mysql_connect('localhost', 'login', 'password') or die("cannot connect"); 
mysql_select_db('bdname', $link); 
 //начинаем формирование xml   
$data_r.='<?xml version="1.0" encoding="UTF-8" ?><urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">';
DEFINE('ITEMS_PER_PAGE', 1000);
// 1000 - элементов на страницу
$query="SELECT COUNT(*) FROM data";
// data - наша таблица от куда берём данные
$res = mysql_query( $query );
$total = mysql_result( $res, 0, 0 );
 
if ( isset($_GET['page']) ) {
          $page = (int)$_GET['page'];
          if ( $page < 1 ) $page = 1;
        } else {
          $page = 1;
        }
if ($page==1)
{
 
  $data_r.='<url><loc>http://adatum.ru</loc> 
  <changefreq>always</changefreq> 
  <priority>0.5</priority> 
</url>
 ';  
}

        $cnt_pages = ceil( $total / ITEMS_PER_PAGE );
        if ( $page > $cnt_pages ) $page = $cnt_pages;
         $start = ( $page - 1 ) * ITEMS_PER_PAGE;
 
$sm_data=mysql_query("SELECT * FROM  
data WHERE del = 0 AND translit !='' LIMIT ".$start.", ".ITEMS_PER_PAGE);
// здесь я делаю запрос к базе вывожу все неудалённые и не пустые элементы 

 while($sm_row=mysql_fetch_array($sm_data))
 {
 $sm_row['query2']=str_replace(" ","+", $sm_row['translit']);
    $data_r.= '
<url>
  <loc>http://adatum.ru/'.$sm_row['translit'].'.html</loc> 
  <changefreq>daily</changefreq> 
  <lastmod>'.$sm_row['date'].'</lastmod>
  <priority>0.5</priority> 
</url>
';
 }
$data_r.='</urlset>';
$content = $data_r;
 
echo $content;
?>

поправим наш файл .htaccess

RewriteEngine On
RewriteRule ^sitemap.xml$ sitemap.php [L]
RewriteRule ^sitemap([^/]*).xml$ sitemapn.php?page=$1 [L]

здесь мы включаем MOD_REWRITE RewriteEngine On

а далее ссылаем при обрацении к файлу

sitemap.xml на файл sitemap.php

Похожие статьи

Оставить комментарий

  • Прикольно. Интересно. Полезно)