我们如何列出SilverStripe中最受欢迎(浏览次数最多)的页面?
我想列出网站中浏览次数最多的博文.
我尝试了以下代码,但它无法正常工作:
public function MostPopularBlogArticles($num = 5) {
return DataObject::get(
"BlogPostPage",
"Status = 'Published'",
"`PageCounter`.Counter DESC",
"INNER JOIN PageCounter ON `PageCounter`.PageID = `BlogPostPage`.ID",
$num
);
}
Run Code Online (Sandbox Code Playgroud)
模板:
<ul>
<% control MostPopularBlogArticles(5) %>
<li>
<a href="$Link" title="$Title.XML">$MenuTitle.XML</a>
</li>
<% end_control %>
</ul>
Run Code Online (Sandbox Code Playgroud)
以下内容基于Infobiro网站上的SilverStripe CMS页面命中/查看计数器和 SilverStripe - 最热门文章博客文章.这些说明适用于SilverStripe 3.4,使用当前版本的SilverStripe博客模块.
首先,我们创建一个PageView DataObject跟踪每个页面的页数.
class PageView extends DataObject {
private static $db = array(
'Count' => 'Int'
);
private static $has_one = array(
'Page' => 'Page'
);
}
Run Code Online (Sandbox Code Playgroud)
在我们的Page课程中,我们创建了一个$belongs_to关系,PageView以便我们可以轻松地检索相关PageView对象.
class Page extends SiteTree {
private static $belongs_to = array(
'PageView' => 'PageView'
);
}
Run Code Online (Sandbox Code Playgroud)
在我们的Page_Controller init函数中,我们增加页面视图计数.每次用户在前端访问页面时都会调用此方法.首先,我们检索或创建相关PageView计数.然后我们增加Count值.
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();
}
}
Run Code Online (Sandbox Code Playgroud)
在Page_Controller我们还创建了一个MostViewedBlogPosts获取观看次数最多的一个列表BlogPosts.
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);
}
}
Run Code Online (Sandbox Code Playgroud)
可以轻松更改此功能以获取任何页面类型的列表.例如,要获取查看次数最多的页面列表:
public function MostViewedPages($limit = 5) {
return Page::get()
->innerJoin('PageView', '`Page`.`ID` = `PageView`.`PageID`')
->sort('PageView.Count', 'DESC')
->limit($limit);
}
Run Code Online (Sandbox Code Playgroud)
在我们的模板中,我们检索MostViewedBlogPosts列表如下:
<% if $MostViewedBlogPosts %>
<ul>
<% loop $MostViewedBlogPosts %>
<li><a href="$Link">$Title</a></li>
<% end_loop %>
</ul>
<% end_if %>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
266 次 |
| 最近记录: |