POPSブログ

BaserCMSブログに機能を付加する/3

15

  Category:  basercms2012/02/06 pops 

BaserCMSブログに、シリーズ記事、関連記事、のリンクをつけた案内を下段につけてみました。


BaserCMSブログに機能を付加する/3


関連記事、シリーズ記事のタイトル(リンク付き題目)を表示する

関連記事、関連すると思われる記事などを検索表示するには、色々なテスト結果から、「規則をつくり検索すればよい」とわかりまし た。実際には、BaserCMS Helper 「記事一覧の出力」を旨く利用すれば良いと思います。要点は「キーワード検索」の精度を上げるような 仕組みを作ることです。
処理はブログ記事の中では出来ませんので、記事を出力した後にして、表示させて見ることにします。


短い文章ほど検索率が良いし、記事の中で規則を作るよりタイトルに規則をつけたほうが忘れない。

記事の中では、先頭にある、独立して表示されている、前後にスペースがある、などの場合は少し検索率が良い見たいで す。


シリーズ記事を表示する

題目例 BaserCMSの機能について/1 BaserCMSの機能について/2 ...........

規則として、同じタイトルにして最後に番号をつける、必ずカテゴリーを同じにすること

必ず / で区切り番号を入れる。

タグ規則 series を必ず入れる シリーズ記事だからそのほかのタグも同じはず

実際の表示例は、このページの下部をご覧ください。使用されています。


関連記事を表示する

題目例 CMSの機能について[basercms] BaserCMSの構造とファイル[basercms] ...

タイトルの後ろに共通の[キーワード]を書き込む、必ず[ ]で囲むこと。


区分 タイトル例 カテゴリー キーワード タグ規則
シリーズ記事 シリーズ記事だよ/1 同一 キーワード[タイトル]
同タイトル/番号
series 設定
同一複数設定
関連記事 色々なタイトル[keyword] 同一 タイトル自由
後ろに[キーワード]書込
同一複数設定

「シリーズ記事を表示する」の処理に、番号を削除した「タイトル文字」を[キーワード]で絞りこみしました。
結果、同一記事タイトルを持ち、タグ名seriesを持つものに絞りこまれます。
但し、検索の精度が良くないために、他のシリーズ記事の詳細に「タイトル文字」と同じ「文字」が存在した場合に「同一と判断」して誤 表示する場合もありえます。


一連の同一記事は 10 記事位を想定しています。10 記事以上の場合は、また名前なりをかえて新たに作ります。検索の表示数を増やせ ばいくらでも表示しますが、あまり多くても見栄えがよくないので、、、


追記、当初は 10 記事表示にしていましたが、記事を書いてゆくうちに「参考リンク」などの記事内部での必要性がでて くると、「キーワード」でそこも捕らえてしまうので、20 記事表示に修正しました。絞込みも可能ですが遅くなるので現行ではこのまま で使用します。(2012/03/22)


BaserCMS Helper 「記事一覧の出力」を活用する

【参考】basercms.net/reference: ブログ記事一覧出力

この機能をつかって「絞込み」の検索表示をします。


リンクつきの形式で作る場合 single.ctp のPHP

注意、 修正箇所をメモする、ルートをメモする、またはテーマの中にコピーしておくなどの対処が必要です。
baser/plugins/views/blog/default/single.ctp


baser/plugins/views/blog/default/single.ctp

---------------------------------------------------------------
<!-- blog title contents-head -->
<h2 class="blog-head"><?php $blog->title() ?></h2>

<!-- begin post class -->
<div class="post">
<?php $blog->postContent($post) ?>
<div class="meta"></div>

</div><!-- end post class -->

postが終了した所で処理を書く

<?php
//共通処理/タイトル、カテゴリー抽出
$categ=$post['BlogCategory']['title'];//カテゴリー
$posttitle=$post['BlogPost']['name'];//記事タイトル
$blog_name=$post['BlogContent']['name'];//ブログの名前ここで取れる、未使用

//1 シリーズ記事
if(!empty($blog->blogContent['tag_use'])) {
	//title nameを取得する(/)で分割番号を削除する
	$posttitles=split("/",$posttitle);
	$pti=$posttitles[0];
	//タグにseriesがある場合、同じカテゴリーで絞込み検索して表示、ない場合もある
	$taglist="";
	foreach($post['BlogTag'] as $tag) {
		$taglist .=$tag['name'].',';
	}
	//taglist最後の文字(,)削除していない、タイトルも検索
	$categ=$post['BlogCategory']['title'];
	if (ereg('series',$taglist)) {
		echo('<p style="margin-left:5px;">[ '.$pti.' シリーズ記事 ]</p>');
		$baser->blogPosts('pops', 20, array('category' => $categ,'tag' => 'series','keyword' => $pti));
		echo('<hr />');
	}
}

//2 KEYWORD検索
//タイトルに[文字]がある場合
//タイトルをキーワードにすることが出来るようだ
$pattern='/\[.+\]/';//注意こうしないと判別しない
$matchs=array();
$str0="";
preg_match($pattern,$posttitle,$matchs);
//1つだけだから配列0に入る
$str0=$matchs[0];
//あるかどうか判定
if ($str0) {
	//[xxxx]の文字をkeywordとして検索
	echo('<p style="margin-left:5px;">[ 関連すると思われる記事 KEYWORD:'.$str0.'で検索 ]</p>');
	$baser->blogPosts('pops', 10, array('category' => $categ,'keyword' => $str0));
	echo('<hr />');
}
?>
---------------------------------------------------------------

シリーズ記事を表示スクリプト追記


タイトルも検索/シリーズ記事10書くなら検索数は20位にしたほうが無難のようだ
$baser->blogPosts('pops', 20, array('category' => $categ,'tag' => 'series','keyword' => $pti));

タイトル検索しない/シリーズ記事のみ絞込み、シリーズが沢山あれば精度は落ちる
$baser->blogPosts('pops', 10, array('category' => $categ,'tag' => 'series'));

検索出力ctp

posts.ctpの補正

見やすいようにテーブル表示にかえました、私はBOXでは旨く組めません。

注意、 修正箇所をメモする、ルートをメモする、またはテーマの中にコピーしておくなどの対処が必要です。
baser/plugins/views/blog/default/posts.ctp


baser/plugins/views/blog/default/posts.ctp

<?php if($posts): ?>
<table class="list_table">
<?php foreach($posts as $key => $post): ?>
 <tr>
	<td class="list_td1"><?php $blog->postTitle($post) ?></td><td class="list_td2"><?php 

$blog->postDate($post, 'Y.m.d') ?></td>
 </tr>
<?php endforeach ?>
</table>
<?php else: ?>
<p class="no-data">記事がありません</p>
<?php endif ?>


検索出力テーブルのCSS



.post-list li {
width:100%;
clear:both;
}

/*table list IE以外線がでるので修正、複雑*/
.list_table {
width:98%;
padding:2px;
border-collapse:separate;
border:none;
}
.list_td1 {
border:0;
border-bottom:#F5F5F5 1px solid;
}
.list_td2 {
width:70px;
border:0;
border-bottom:#F5F5F5 1px solid;
}
/*table no-border*/
.no-border,.no-border tr,.no-border td{
border-style:none;
}

お断り、完全に全て正確に検索するものではありません。間違ったときは「知らんふり」しましょう。



[ この記事のURL ]


タグ:series , basercms , php

[ BaserCMSブログに機能を付加する シリーズ記事 ]

BaserCMSブログに機能を付加する/62012.02.10
BaserCMSブログに機能を付加する/52012.02.08
BaserCMSブログに機能を付加する/42012.02.07
BaserCMSブログに機能を付加する/32012.02.06
BaserCMSブログに機能を付加する/22012.02.05
BaserCMSブログに機能を付加する/12012.02.04

 

ブログ記事一覧

年別アーカイブ一覧



[1]