1

この質問は紛らわしい、または重複した質問のように思えるかもしれません。以前の質問を検索しましたが、自分のケースに合った質問が見つかりませんでした。

コードイグナイターを使用しています。上司から、サイトの sitemap.xml を自動生成するコントローラー (または、可能であれば PHP のアプリケーション) を作成するように依頼されました。サイトマップは次の構造に従う必要があります。

<url>
  <loc></loc>
  <changefreq></changefreq>
</url>

また、ウェブ上ではなくデータベース上にある情報も含める必要があります。私が知っている限り、サイトマップはサイトからのリンクに基づいているため、これについて混乱しています。(繰り返しますが、私はxmlについて何も知らないので、それが私の混乱の理由です)。

たとえば、サイトの一部に「ニュースフィード」があり、データベースから最新の 5 つのニュースが表示されます。私の上司が望んでいるのは、古いニュースも索引付けすることです。

このサイトは 2 つの異なるデータベースを使用していることに注意してください。1 つはニュースフィードのニュース用で、もう 1 つはサイト内の残りの製品用です。(各製品には独自のリンクがあり、一部の製品はサイトに掲載されておらず、データベースのみに掲載されており、上司はそれらの製品をサイトマップに掲載することを望んでいます)。

どこから始めればよいか分からないので、これを行う方法についてのアイデアは大歓迎です。

御時間ありがとうございます

4

3 に答える 3

2

それが構造です: a) sitemap.xml が存在しないか、b) 既に存在するファイルの作成から一定の時間が経過したかをチェックする関数を作成します。

a) または b) 新しいファイル sitemap.xml を作成する場合。これは常に次のように始まります。

$xml_data = '   <?xml version="1.0" encoding="UTF-8"?>  ';
$xml_data .= '  <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" ';
$xml_data .= '  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   ';
$xml_data .= '  xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd">   ';

次に、サイトマップに含めたいすべての投稿とページを db から読み取るクエリを作成します。以下を含むループを使用します。

$xml_data .= '  <url><loc>'.$_SERVER['SERVER_NAME'].'/'.$recLink.'</loc>    ';
$xml_data .= '  <lastmod>'.$recDate.'</lastmod> ';
$xml_data .= '  <changefreq>daily</changefreq>  ';
$xml_data .= '  <priority>1.00</priority></url> ';
}
$xml_data .= ' </urlset> ';

最後に、ファイルを作成して保存します。

$fh = fopen($file,'w');
fwrite($fh, ltrim($xml_data));
fclose($fh);

コードに合わせることを忘れないでください。コピー&ペーストではありません。

于 2013-04-02T22:08:30.757 に答える
1

ここでの他の回答に加えて、サイトのルートで名前がxml付けられたファイルを探す多くの検索エンジンに照らして。sitemap.xmlその URL を、それを生成するコントローラーにマップするルートを持つことができます。

$route['sitemap.xml'] = 'sitemap_controller/generate_method';
于 2013-04-02T22:23:16.813 に答える
-1

XML サイトマップを生成するためのこの既存の Code Ignighter ライブラリに興味があるかもしれません。

http://www.mikesimagination.net/blog/post/29-Aug-12/Codeigniter-auto-XML-sitemap

独自のコードを開発するよりも、この既存のコードを変更する方がはるかに優れている/高速である可能性があります。

于 2013-04-02T22:19:08.510 に答える