2012-01-20 44 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); 
?>