2012-01-20 13 views
1

index.phpだけのダイナミックサイト用のPHPサイトマップファイルを思いつきました。結果は次のようになります。http://www.oddsnavigator.eu/sitemap.phpPHPサイトマップを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にコードが入り、$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); 
} 
+0

がいいですねhttp://www.seopher.com/articles/writing_a_php_google_sitemap_generator_without_using_fopen!しかし、$ gotoの値を配列としてどのくらい保存するのですか? –

+0

'$ goto =" http://oddsnavigator.eu/?display=0&sport= "を置き換えてください。 $ db_field ['sportid']。 "&day = all&league =" $ db_field ['stageid']; '$ this-> urls [] =" http://oddsnavigator.eu/?display=0&sport= "としてください。 $ db_field ['sportid']。 "&day = all&league =" $ db_field ['stageid']; ' –

+0

致命的なエラー:行35の/home/oddsnavi/public_html/sitemap.phpのオブジェクトコンテキストにないときに$ thisを使用する($ this ...で始まる行) –

0

Smartyなどのテンプレートエンジンを使用できます。

これにより、XMLの作成を簡単にループすることができます。

[http://php.net/manual/en/book.simplexml.php SimpleXML]を使用することもできます。

すでにテンプレートエンジンを使用している場合は、おそらく最も簡単で簡単な方法です。それ以外の場合は、SimpleXMLを使用します。

+0

は、私はそれをこのような何かを探しています: –

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); 
?> 
関連する問題