PHP Dinamik Site Haritası Index’i Oluşturma ve Alt Site Haritaları

Büyük veritabanı ve içerik yüklü siteler için kullanabileceğiniz dinamik site haritası ile site haritalarınızı Yıl ve Ay bazlı bölerek Google’a daha küçük ölçekli site haritaları gönderebilirsiniz. Bunun için .htaccess dosyamızda birkaç düzenleme yapmamız gerekmekte. İlk olarak onlardan bahsedelim.

#Sitemap.php dosyamıza sitemap.xml şeklinde erişebilir olarak ayarlayalım.
RewriteRule sitemap.xml sitemap.php [QSA]
#Parçalara ayırdığımız sitemap dosyalarını çağırdığımızda GET olarak algılatalım.
RewriteRule ^sitemap-(.*).xml$ sitemap.php?id=$1 [L,NC]

Artık sitemap.php dosyamızı oluşturduğumuzda site.com/sitemap.xml olarak bağlanıldığında site haritamız görüntülenebilir. Dahası site.xom/sitemap-2019-01.xml şeklinde 2019 yılının ilk ayını çağırdığımızdada sitemap dosyamızda düzenleme yaparak sadece o ay yayınlanan içerikleri ziyaretçilerimizle gösterebiliriz. Sitemap dosyamızı düzenleyelim.

//Fonksiyon yada bağlan dosyamızı çağıralım. 
//Dilerseniz buradada PDO'ya bağlanabilirsiniz.
require 'baglanti.php';

//Eğer sitemap.xml olarak geliyorsa ilk olarak sitemap indeximizi oluşturalım.
if(!$_GET['id']):

header("Content-Type: text/xml");
## Sitemap Bilgileri
echo '<?xml version="1.0" encoding="UTF-8"?>';
echo ' <sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">';
sql=$db->query("SELECT Date(timestamp) FROM mods GROUP BY Month(timestamp),Year(timestamp) order by timestamp DESC");
foreach($sql as $rows){
//İlk olarak çektiğimiz değeri bölelim YYYY-AA-GG şeklinde geldiği için bize sadece YYYY-AA lazım
    $ssmt=explode('-',$rows["Date(timestamp)"]);
    $sitemapdate=$ssmt[0].'-'.$ssmt[1];

    $zaman=explode('-',$rows["Date(timestamp)"]);
    $timecheck=$zaman[0].'-'.$zaman[1];
//Dilerseniz YYYY-AA tarihli son eklediğimiz içeriği bulalım ve siteharitası zamanı olarak alalım.
    $sss='SELECT * FROM tabloadı WHERE timestamp LIKE ? order by timestamp DESC';
    $sql1=$db->vericek($sss,array("$timecheck%"));
    $sql1->execute(array("$timecheck%"));
    $sqls=$sql1->fetch(PDO::FETCH_ASSOC);


$tarihparcala=explode(' ', $sqls['zaman']);
$url=site_url('sitemap-'.$sitemapdate.'.xml');
$date =$tarihparcala[0].'T'.$tarihparcala[1].'+00:00'; 
?>
<sitemap>
<loc><?=$url?></loc>
<lastmod><?php echo $date?></lastmod>
</sitemap>
<?php } ?>
<?php
 echo '</sitemapindex>';

else:
//Eğer sitemap-2019-12.xml şeklinde ziyaret söz konusuysa çalışsın..
    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">
    ';
//sitemap-YYYY-AA.xml de YYYY ve AA yı parçalara ayıralım.
    $zaman=explode('-',$_GET['id']);
    $timecheck=$zaman[0].'-'.$zaman[1];
//Sorgulatalım;
    $sss='SELECT * FROM tabloadı WHERE zaman LIKE ? order by timestamp DESC';
    $sql2=$db->prepare($sss);
$sql2->execute(array("$timecheck%"));
$sql=$sql2->fetch(PDO::FETCH_ASSOC);
    foreach($sql as $rows){
    $tarihparcala=explode(' ', $rows['zaman']);
    $url='URLİmiz';
    $date =$tarihparcala[0].'T'.$tarihparcala[1].'+00:00';
     ?>
    <url>
         <loc><?=$url?></loc> 
         <lastmod><?php echo $date?></lastmod>
         <changefreq>daily</changefreq>
          <priority>0.9</priority>
      </url>
    <?php } ?>
    <?php
     echo '</urlset>';
    
 endif;?>

Ücretli olarak yardım talep ederseniz yardımcı olabilirim. Sağ kısımda yer alan iletişim bilgilerinden bana ulaşabilirsiniz.


PHP Kodlama kategorisinde 03 Şubat 2020 - 12:18:29 tarihinde yayınlanmıştır. 385 Gösterim

Kazım USLU Hakkında

PHP,MYSQL,CSS,JS,JQUERY yazılım dillerine hakim, Şu sıralar PYHTON ve LINUX üzerine araştırma geliştirme yapan, sunucu optimizasyonu ile uğraşan dijital kod yazarıyım...

Yorumlar (0)

Bu yazıya henüz bir yorum yapılmamış, hemen bir tane yapmak ister misin ?

Yorum Yapın