このブログ、昔 sqlite と PHP で作ってから、そのままだったのですが、久しぶりに関連記事機能を追加してみました。(個別の記事ページだけに追加)
本当は記事同士の関連度を記事内容から判定して、関連度上位の記事一覧を表示するのがいいのですが、とりあえず以下のような感じで簡易的に実装しました。
- sqlite データベースに記事ごとのタグを手動で登録
- 最新の記事から順番にタグがひとつでも一致する記事を検索して 5 つを表示
本当はオフラインでこの辺を事前にやっておいて、html 作っておくのがいいんですが、そこまでやると大変そうだったので、とりあえず毎度構築する感じになっているので、少しブログ重いかもしれません..
しばらくはこれで運用しつつ、また気が向いたら改善しようと思います。
あまり参考にならないと思いますが、一応 PHP の関連記事作成部分だけ貼っておきます。
関連記事の作成
private function areRelatedEntry($entry0, $entry1)
{
foreach ($entry0->tagList as $tag0)
{
foreach ($entry1->tagList as $tag1)
{
if ($tag0 == $tag1)
{
return true;
}
}
}
return false;
}
private function createRelatedArticles()
{
$maxRelatedEntryCount = 5;
for ($i=$this->size-1; $i >= 0; --$i)
{
$entry0 = $this->data[$i];
if (count($entry0->tagList) == 0)
{
continue;
}
for ($j=$i - 1; $j >= 0; --$j)
{
$entry1 = $this->data[$j];
if (count($entry1->tagList) == 0)
{
continue;
}
if ($this->areRelatedEntry($entry0, $entry1))
{
if (count($entry0->relatedEntries) < $maxRelatedEntryCount)
{
array_push($entry0->relatedEntries, $entry1);
}
if (count($entry1->relatedEntries) < $maxRelatedEntryCount)
{
array_push($entry1->relatedEntries, $entry0);
}
}
}
}
}
関連記事の html タグ作成
public function getRelatedEntriesTag()
{
$tags = '';
$tags .= '関連記事';
foreach ($this->relatedEntries as $relatedEntry)
{
$tags .= '- '.$relatedEntry->title."
";
}
$tags .= '
';
return $tags;
}