Авг
17
2014
17
2014
PHP /
Генерируем файл sitemap.xml динамичести с помощю php
Все прекрасно знают о пользе файла 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