以下はInfobiroのウェブサイト上のSilverStripe CMS Page Hit/View Counterと SilverStripe - Most Popular Articlesブログ記事をオフに基づいています。これらの手順は、現在のバージョンのSilverStripe blog moduleを使用しているSilverStripe 3.4用です。
まず、各ページのページ数を記録するためにPageView
DataObject
を作成します。私たちのPage
クラスで
class PageView extends DataObject {
private static $db = array(
'Count' => 'Int'
);
private static $has_one = array(
'Page' => 'Page'
);
}
我々は簡単に関連PageView
オブジェクトを取得できるように、我々はPageView
に$belongs_to
関係を作成します。私たちは、ページビュー数をインクリメント当社Page_Controller
init
機能で
class Page extends SiteTree {
private static $belongs_to = array(
'PageView' => 'PageView'
);
}
。これは、ページがフロントエンドでユーザーによってアクセスされるたびに呼び出されます。まず、関連するPageView
件を取得または作成します。次に、Count
の値をインクリメントします。 Page_Controller
で
class Page_Controller extends ContentController {
public function init() {
parent::init();
$pageView = $this->PageView();
if (!$pageView) {
$pageView = PageView::create();
$pageView->PageID = $this->ID;
$pageView->write();
}
$pageView->Count = $pageView->Count + 1;
$pageView->write();
}
}
我々はまた、最も閲覧BlogPosts
のリストを取得するMostViewedBlogPosts
を作成します。
class Page_Controller extends ContentController {
// ...
public function MostViewedBlogPosts($limit = 5) {
return BlogPost::get()
->innerJoin('PageView', '`BlogPost`.`ID` = `PageView`.`PageID`')
->sort('PageView.Count', 'DESC')
->limit($limit);
}
}
この機能は、任意のページタイプのリストを取得するように簡単に変更できます。例えば、最も閲覧されたページのリストを取得するには:私達のテンプレートで
public function MostViewedPages($limit = 5) {
return Page::get()
->innerJoin('PageView', '`Page`.`ID` = `PageView`.`PageID`')
->sort('PageView.Count', 'DESC')
->limit($limit);
}
を次のように我々はMostViewedBlogPosts
リストを取得:
<% if $MostViewedBlogPosts %>
<ul>
<% loop $MostViewedBlogPosts %>
<li><a href="$Link">$Title</a></li>
<% end_loop %>
</ul>
<% end_if %>
は、あなたの質問を改善する必要があります。リンクからコードを追加しましたが、あなたが試したコードを正確に表示するためにこれを編集してください。また、その記事のリンクからページビューカウンターコードを追加しましたか?もしそうなら、あなたの質問にそれを加えてください。 SilverStripeの最新バージョンのこのコード/テンプレートを更新しましたか?どのようなブログモジュールを使用していますか?あなたの質問にこのような情報を記入し、コミュニティがあなたを助けるのを助けてください。 – 3dgoo
私の質問を修正していただきありがとうございました:)、私はブログアドオンの最新バージョンを使用しています。[リンク](https://github.com/silverstripe/silverstripe-blog) – Misagh90
はい私はページビューカウンタを使用しますが、このように ' - > innerJoin( 'PageView'、 '' 'BlogPost'.'ID' =' PageView'.'PageID'') 'あなたの助けてくれてありがとうございましたコード体系でもう一度試してみます – Misagh90