PHP PDO ile Dinamik Sitemap.xml Oluşturma

20 Ocak 2018
Soner USTA PHP

Merhabalar arkadaşlar bugün sizlere benim de kullanmış dinamik sitemap.php dosyasını sizlere nasıl yapıldığını ve kullanımını göstereceğim.İnternette araştırma yaptığımda hep eski sürüm olan veritabanı baglantıları yapılmış durumda ben sizlere pdo ile nasıl yapılır ve nasıl kullanılır onu anlatacağım.İlk olarak normal bir şekilde dinamik olmayan bir sitemap.xml dosyası buldum ve içindeki kodları pdo ya uygun olucak şekilde düzenleyip sizlere veriyorum kodlar aşağıdadır.

<?php
include 'config.php'; ## Burada config dosyamızın yani veritabanı bağlantısı yapılan dosyamızı çağırıyoruz isterseniz direk olarak sayfa üzerindede bağlantı yapabilirsiniz.Ben direkt olarak include ettim sayfayı.
## Xml olarak göstermek için girilen komut
header("Content-Type: text/xml");
## Sitemap Bilgileri
echo '<?xml version="1.0" encoding="UTF-8"?>';
echo '
<urlset
  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/sitemap.xsd">
';
## Site Menüleri 
## Menüler dinamik değil el ile girdim çünkü benm veritabımda menüler isminde bir tablo yoktu zaten sitede menü de olmadığı için el ile girmek daha makul gözüktü
echo '
	<url>
       <loc>https://snrtr.com/</loc>
       <lastmod>'.date("Y").'-'.date("m").'-'.date("d").'T'.date("H:i:s").'+00:00</lastmod>
       <changefreq>daily</changefreq>
       <priority>0.5000</priority>
	</url>
	  <url>
       <loc>https://snrtr.com/hakkimda</loc>
       <lastmod>'.date("Y").'-'.date("m").'-'.date("d").'T'.date("H:i:s").'+00:00</lastmod>
       <changefreq>daily</changefreq>
       <priority>0.8000</priority>
  </url>
  <url>
       <loc>https://snrtr.com/iletisim</loc>
       <lastmod>'.date("Y").'-'.date("m").'-'.date("d").'T'.date("H:i:s").'+00:00</lastmod>
       <changefreq>daily</changefreq>
       <priority>0.8000</priority>
  </url>
';
## Makaleleri Listele 
## Bu alanda ise PDO ile verilerimizi veritabanından çekiyoruz Bu alanda değişeceğiniz yerler.
## Tablo adınızı girmelisiniz eğerki sitenizde bir şart var ise onu girmelisiniz benim sitemde yazı_onay=0 olan yazıları göstermediğim için bir şart belirledim sizlerde şart yoksa kaldırabilirsiniz.
## yazi_id yazan yere ise çekeceğiniz verilerin id sinin bulunduğu sutunun ismini giriniz.
$yazisor=$db->prepare("SELECT * FROM tablo_adi where yazi_onay=:yazi_onay ORDER BY yazi_id DESC");
$yazisor->execute(array(
  'yazi_onay' => 1
  ));
	while($yazicek=$yazisor->fetch(PDO::FETCH_ASSOC)){
## Alttaki alanda ise değişeceğiniz yerler ise seo ve yazi_id kısımları bunları neye göre değişeim diye soracaksanız
## Sitenizde bulunan yazılara nasıl eriştiğiniz yani adres satırında nasıl gözüktüğüne bakarak bu ayarlamaları gerçekleştireceksiniz.
## Benim yazılarımda kullanmış olduğum seo ve sonuna eklenen yazi_id olduğu için bu alanı bu şekilde modifiye etttim.
## Tüm ayarlamaları doğru bir şekilde yaparsanız dosyamız sorunsuz bir şekilde çalışacaktır.
echo'
	<url>
	   <loc>https://snrtr.com/'.$yazicek["seo"]."-".$yazicek["yazi_id"].'</loc> 
	   <lastmod>'.date("Y").'-'.date("m").'-'.date("d").'T'.date("H:i:s").'+00:00</lastmod>
	   <changefreq>daily</changefreq>
	   <priority>0.5000</priority>
	</url>
';
}
echo '</urlset>';
?>

Bundan sonra ise yapacağınız tek işlem .htacces dosyanıza şu kodu yapıştırmanızdır.

    RewriteRule ^sitemap.xml$ sitemap.php [NC,L]

Bu kodun yazmamızın ama ise sitemap.php dosyanıza sitemap.xml olarak yönlendirme yapmaktır.

Kodlara bu linkten erişebilirsiniz.

https://paste.ee/p/qCNor

Çıktı olarak kendi sitemap dosyama ulaşabilirsiniz.

www.snrtr.com/sitemap.xml

Aklınıza kalan sorular için yorum bölümünü kullanabilirsiniz.

İyi çalışmalar.