2010-10-25 28 views
17

PHP & MySQL kullanarak nasıl bir site haritası oluşturabilirim diye merak ettim ve bildiğiniz herhangi bir site haritası tasarım örneği var mı?PHP & MySQL kullanarak bir site haritası oluşturma

+2

Arama motorları için "sitemap" ile tam olarak ne demek istiyorsunuz –

+0

'sitemap.xml'? Ya da kullanıcı görüntülemek için? Eğer ikincisiyse, bu şeyler (çoğunlukla) son binyılda stilden çıktı. Arama motorları için bir tane – ceejayoz

+0

. teşekkür ederim. – HELP

cevap

0

MySQL'e ihtiyacınız olduğunu düşünmüyorum, kullanmanız sizin için önemli mi? Dinamik veya statik sayfalarınız var mı? Sorunuz biraz belirsiz. Site haritaları oluşturan veya sadece kendi dizininizi indekslemeye çalışan bir hizmet mi yapmak istiyorsunuz?

Here's a little something to get you started.

+0

Dinamik sayfalarım var. Sadece kendi başımı yaratmaya çalışıyorum. – HELP

+0

Peki neden birkaç dakika içinde site haritası oluşturabilecek düzinelerce ücretsiz hizmet olduğunda rahatsız oluyorsunuz? Şuna bir bakın: http: //www.xml-sitemaps.com/ – Alex

0

Bu, sitenizin nasıl yapılandırıldığına bağlıdır. Web sayfalarınız mysql Veritabanında bir site yapısıyla birlikte yer alıyor ve bunları kullanıcıya ulaştırılan bir PHP betiği tarafından getiriliyor mu, yoksa web siteniz sadece statik .html dosyalarından mı oluşuyor? Birincisi, sadece db'de bulunan site yapısını, insan tarafından okunabilir güzel bir bağlantı listesine dönüştürmek zorundasınız. İkincisi, web klasörünüzdeki tüm dosya ve dizinlerden geçen bir aracı birbirine yapıştırabiliyor ve muhtemelen bir bağlantı listesi çıkarıyor, muhtemelen site başlıklarını html dosyalarından ayrıştırarak: P

2

Soru Çok belirsiz - iyi bir cevap alabilmeniz için sitenizin geri kalanı hakkında daha fazla bilgi sahibi olmamız gerekiyor.

Sayfanızın yapısına ve haritaya ne dahil edeceğinize bağlıdır.

Siteniz nispeten statikse, site haritanızı statik bir sayfa olarak kaydetmeniz gerekir; bu nedenle, her yüklendiğinde fazladan işlenmeye neden olmaz. Ancak siteniz sık sık güncellenirse, sık sık haritayı yenilemeniz gerekebilir. Bu nedenle, her yüklendiğinde yenilenen dinamik bir uygulama daha iyi olabilir.

Eğer PHP siteniz bir CMS yapısına sahipse ve tüm sayfalarınız CMS'ye dahil edilmişse, o zaman veritabanından geçmek ve tüm sayfalarınıza bağlantılar çekmek için nispeten basit olmalıdır (elbette, yapıya bağlı olarak) CMS’nizin). Diğer yandan, eğer siteniz bunu yapmanıza izin verecek şekilde yapılandırılmamışsa veya haritada gösterilen sayfaları sınırlamak istiyorsanız, o zaman bir örümcek çalıştırmanın daha kolay olduğunu görebilirsiniz. site ve sonuçları saklayın.

Zaten yazılmış olan çok sayıda site haritası programı vardır. Ben php sitemap generator googled ve tamamen kendi kaynak kodu incelemek için onları indirmek için bile olsa, size yararlı olabilir gibi bir kaç bakmak, sonuçların bir yığın var.

+0

sizden xml sitemap ile ilgili bir soruya bakmanızı isteyebilir miyim - tinyurl.com/pgqjdeo? –

20

Bunu sitemde kullanıyorum, iyi çalışıyor ve Google'ın web yöneticisi araçlarını "this_file.php" adresine yönlendirebilir ve harikalar yaratabilir!

 
<?php 
header("Content-type: text/xml"); 
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">'; 

include '../include.php'; 
$sql = mysql_query("select blah from bleh"); 

while ($string = mysql_fetch_array($sql)){?> 
      <url> 
       <loc>http://www.domain.com/dir/<?echo $string['value'];?>/index.php</loc> 
       <changefreq>weekly</changefreq> 
      </url> 
<?php } ?> 
</urlset> 
+2

Küçük siteler için çalışacak. Ancak, büyük kullanıcı tarafından oluşturulan veriler içeren siteler için ağlar. –

+0

Bunu denemek için çok zaman kaybettim ve sonra php etiketinin

+0

@RahulPrasad - sonucu önbelleğe almak, orta veya büyük siteler için iyi çalışır. – Westy92

0

Veritabanı kodundan büyük bir site haritası oluşturmak için kullanıyorum bazı kod İşte. Bu biraz dağınık ve mevcut, eski siteyle iç içe. Kısa bir süre önce yeni bir versiyon üzerinde çalışıyorum ama belki birilerine yardım edeceğim.

<?php // vim:ai:et:sw=4:ts=4 

/* 
* Generates a sitemap from the database. 
*/ 

include('shared/global.cfg'); 
define('DB_DSN', 'mysql:dbname='.DB_DATABASE.';host='.DB_HOSTNAME); 

/* 
* The page paramter picks out which sitemap to return, or, 
* if no page is specified, returns an index of pages. 
*/ 
$page = filter_input(INPUT_GET, 'page', FILTER_SANITIZE_NUMBER_INT); 
if ($page == '') { 
    $page = 'index'; 
} 

define('URLROOT', 'http://la.indymedia.org/'); 
define('SM_PATH', SF_CACHE_PATH.'/sitemap/'); 
$path = sitemap_page_path($page); 
$index = sitemap_index_path(); 

/* 
* If the index file is missing, or is old, regenerate the entire 
* sitemap over. This takes several seconds. 
*/ 
if (file_exists($index)) { 
    $stat = stat($index); 
    $mtime = $stat['mtime']; 
    $diff = time() - $mtime; 
    if ($diff > 24*60*60) { 
     regenerate_sitemap(); 
    } 
} else { 
    regenerate_sitemap(); 
} 

/* 
* Read the cached file, and spit it out. 
*/ 
$text = file_get_contents($path); 
header("Content-type: application/xml"); 
echo $text; 
exit(); 

/* 
* The main function to call to regen the sitemaps. 
* It reads from the database. 
* Paginates the results. 
*/ 
function regenerate_sitemap() { 
    global $index; 
    $pdo = new PDO(DB_DSN, DB_USERNAME, DB_PASSWORD); 
    $stmt = $pdo->prepare('SELECT id,created FROM webcast WHERE display<>"f" and parent_id=0'); 
    $stmt->execute(); 
    $count = 0; 
    $page = 1; 
    $urls = []; 
    $pageurls = []; 
    while($row = $stmt->fetch()) { 
     $created = $row['created']; 
     $y = substr($created,0,4); 
     $m = substr($created,5,2); 
     $id = $row['id']; 
     $urls[] = URLROOT."news/$y/$m/$id.php"; 
     $count++; 
     if ($count==50000) { 
      write_sitemap_page($page, $urls); 
      $pageurls[] = URLROOT.'sitemap.php?page='.$page; 
      $page++; 
      $urls = []; 
      $count = 0; 
     } 
    } 
    // fixme - we need to make a sitemaps of events, right here. 
    if (count($urls) > 0) { 
     write_sitemap_page($page, $urls); 
     $pageurls[] = URLROOT.'sitemap.php?page='.$page; 
    } 
    write_sitemap_index($pageurls); 
} 

function sitemap_page_path($page) { 
    return SM_PATH.'sitemap_'.$page.'.xml'; 
} 
function sitemap_index_path() { 
    return SM_PATH.'sitemap_index.xml'; 
} 

/* 
* Writes a single sitemap from an array of URLs. 
*/ 
function write_sitemap_page($page, $urlarray) { 
    $path = sitemap_page_path($page); 
    $xml = '<?xml version="1.0" encoding="UTF-8"?>'."\n"; 
    $xml .= '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">'; 
    foreach($urlarray as $url) { 
     $xml .= '<url><loc>'.$url.'</loc></url>'; 
    } 
    $xml .= '</urlset>'; 
    file_put_contents($path, $xml); 
} 

/* 
* Writes the index of sitemaps. 
*/ 
function write_sitemap_index($urlarray) { 
    $xml = '<?xml version="1.0" encoding="UTF-8"?>'."\n"; 
    $xml .= '<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">'; 
    foreach($urlarray as $url) { 
     $xml .= '<sitemap><loc>'.$url.'</loc></sitemap>'; 
    } 
    $xml .= '</sitemapindex>'; 
    file_put_contents(sitemap_index_path(), $xml); 
} 
İlgili konular