Как превратить карту сайта PHP в файл XML - PullRequest
1 голос
/ 20 января 2012

Я разработал PHP-версию файла Sitemap для моего динамического сайта, который имеет только index.php.Вот результат: http://www.oddsnavigator.eu/sitemap.php

Теперь мне нужен способ либо экспортировать эти результаты в файл 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>";
}
?>

Есть идеи?

Ответы [ 3 ]

1 голос
/ 20 января 2012

В вашем коде $goto содержит URL-адреса, сохраните все эти URL-адреса в массиве $ urls, а затем используйте следующую функцию.
Я ожидаю, что код входит в class, если не заменить $this->variable на $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);
}
1 голос
/ 20 января 2012

А вот полный код решения, для дальнейшего использования, если у кого-то возникнет такая же проблема. Код использует запрос 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);
?>
0 голосов
/ 20 января 2012

Вы можете использовать шаблонизатор, такой как Smarty.

Это позволит вам легко выполнить цикл создания XML.

Или вы можете использовать [http://php.net/manual/en/book.simplexml.php SimpleXML].

Если вы уже используете шаблонизатор, это, вероятно, будет самым быстрым и простым решением. В противном случае я бы использовал SimpleXML.

...