2012-01-20 55 views
1

我想出了一個PHP版本的站點地圖文件,用於我的動態站點,它只有index.php。結果如下:http://www.oddsnavigator.eu/sitemap.php如何將一個PHP站點地圖變成一個XML站點地圖

現在我需要一種方法將這些結果導出到sitemap.xml文件,或者使這一個XML和Google友好。這裏的代碼:

<?PHP 
$SQL="boring query"; 
$num_rows = mysql_num_rows(mysql_query($SQL)); 
echo $num_rows , "</BR>"; 
$result = mysql_query($SQL); 
if($result === FALSE) { die(mysql_error());} 

while($db_field=mysql_fetch_assoc($result)) { 
$goto = "http://oddsnavigator.eu/?display=0&sport=" . $db_field['sportid'] . "&day=all&league=" . $db_field['stageid']; 
$title = $db_field['sportname'] . " " . $db_field['tempname'] . " " . $db_field['stagename'] . " Sports Betting Odds Comparison - OddsNavigator.eu"; 

echo "<a href='$goto' title='$title'>" , $db_field['sportname'] , " " , $db_field['tempname'] , " " , $db_field['stagename'] , "</a>" , "</BR>"; 
} 
?> 

任何想法?

回答

1

在您的代碼中$goto包含URL,將所有這些url存儲在名爲$ urls的數組中,然後使用以下函數。
我預計代碼在class,如果不是用$variable代替$this->variable

//$urls = array(); 
$compress = true; 

function save() 
{ 
    if (empty($this->urls)) return; 
    $file = "sitemap.xml{$this->compress}"; 
    $xml = '<?xml version="1.0" encoding="UTF-8"?>' . "\n"; 
    $xml .= '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">' . "\n"; 
    foreach ($this->urls as $url) 
    { 
     $xml .= ' <url>' . "\n"; 
     if (is_array($url)) { 
      foreach ($url as $key => $value) $xml .= " <{$key}>{$value}</{$key}>\n"; 
     } 
     else { 
      $xml .= " <loc>{$url}</loc>\n"; 
     } 
     $xml .= ' </url>' . "\n"; 
    } 
    $xml .= '</urlset>' . "\n"; 
    $this->urls = array(); 
    if (!empty($this->compress)) $xml = gzencode($xml, 9); 
    $fp = fopen(BASE_URI . $file, 'wb'); 
    fwrite($fp, $xml); 
    fclose($fp); 
} 
+0

聽起來不錯!但是,我如何將$ goto值存儲爲數組? –

+0

替換'$ goto =「http://oddsnavigator.eu/?display=0&sport=」。 $ db_field ['sportid']。 「&day = all&league =」。 $ db_field ['stageid'];'用'$ this-> url [] =「http://oddsnavigator.eu/?display=0&sport=」。 $ db_field ['sportid']。 「&day = all&league =」。 $ db_field ['stageid'];' –

+0

致命錯誤:使用$ this,而不在35上的/home/oddsnavi/public_html/sitemap.php中的對象上下文中。(以$ this開始的行...) –

0

您可以使用模板引擎,如Smarty。

這將允許您輕鬆循環創建XML。

或者你可以使用[http://php.net/manual/en/book.simplexml.php SimpleXML]。

如果您已經使用模板引擎,那可能是最快最簡單的解決方案。否則,我會使用SimpleXML。

+0

我在找做這樣的事情:http://www.seopher.com/articles/writing_a_php_google_sitemap_generator_without_using_fopen –

0

這裏是解決方案的完整代碼,供將來參考,如果任何人有同樣的問題。該代碼使用SQL查詢從數據庫中提取信息,然後將其傳遞到XML文件中。

<?PHP 

$SQL="boring query"; 

$result = mysql_query($SQL); 

//assigning the value of the URL which will be moved to sitemap.xml 
while($db_field=mysql_fetch_assoc($result)) { 
$urls[] = "http://oddsnavigator.eu/?display=0&sport=" . $db_field['sportid'] . "&day=all&league=" . $db_field['stageid']; 
} 

mysql_close($db_handle); 

$compress = true; 
//setting the sitemap.xml header 
$xml = "<?xml version='1.0' encoding='UTF-8'?>" . "\n"; 
$xml .= "<urlset xmlns='http://www.sitemaps.org/schemas/sitemap/0.9'>" . "\n"; 

//adding each element 
foreach ($urls as $url) 
{ 
$xml .= ' <url>' . "\n"; 
if (is_array($url)) { 
foreach ($url as $key => $value) $xml .= " <{$key}>{$value}</{$key}>\n"; 
} 
else { 
$xml .= " <loc>{$url}</loc>\n"; 
$xml .= " <changefreq>hourly</changefreq>\n"; 
} 
$xml .= ' </url>' . "\n"; 
} 
$xml .= '</urlset>' . "\n"; 
$urls = array(); 

//writing to file 
$fp = fopen('sitemap.xml', 'wb'); 
fwrite($fp, $xml); 
fclose($fp); 
?>