2011-10-24 13 views
0

私は商品説明を含むeccomerceサイトを持っています。商品にはサイト上の別の商品が記載されることがありますので、説明に<a>タグを手作業で入れなくても他の商品にリンクしてください。言葉を商品説明のリンクに変換する

私の製品データベースと比較して、商品名と一致するかどうかを確認するための説明があるかもしれないと思っていましたが、その方法についてはわからないし、mysqlデータベースに多くの負荷がかかる場合ページが読み込まれるたびに確認してください。

私はexplodeの説明に空白があると考えていましたが、いくつかの製品にはスペースが入っていて、うまくいかないと思います。

+0

は、多くの偽陽性がないだろうと十分にユニークな製品名はありますか?単純なstr_replaceループは簡単に単語/フレーズをリンクにすることができます。 –

+0

私の答えはそのようなアプローチをとっています。 – middus

答えて

0

次のようにこれにアプローチできます。

アレイ内のすべての製品名の一覧があります。ページをレンダリングするたびにデータベースを照会したくない場合は、APCmemcacheなどを使用してキャッシュすることができます。

サイトをレンダリングするときに、単純な文字列の置換を行います。結果は、テンプレートシステムのキャッシング機能の助けを借りて上記のメカニズムを使用してキャッシュすることも、キャッシュを使用することもできます。

しかし、過度に広い製品名に起因する誤検出に注意してください。

単純な例:

// product names and links (from db or cache) 
$products = array('Flux Capacitor' => 'http://example.com/fluxcapacitor/'); 
// unprocessed content 
$content = 'Lorem ipsum Flux Capacitor bla foo bar flux.'; 
// TODO apply htmlspecialchars, htmlentities or whatever you 
// (this needs to be done BEFORE you insert links) 
foreach($products as $name => $link){ 
    $content = str_replace($name, '<a href="'.$link.'">'.$name.'</a>', $content); 
} 
// 'Flux Capacitor' now should link to its product site. Let's echo the content. 
echo $content; 
+0

私はそれを試してみましょう感謝! – tuurbo

+0

"ただし、過度に広い製品名による誤検出に注意してください。今問題が起きています。 – tuurbo

+0

だから、すべての製品ではなく、特定の名前を持つ人だけにしてください。あるいは、何らかの種類のマーカーを使用します。 '#Flux Capacitor#'(これはあなたのすべてのレガシーコンテンツを編集する必要があります)。 – middus

関連する問題