列出SilverStripe站点中最受欢迎的页面

时间:2016-08-09 17:42:28

标签: php silverstripe

我们如何列出SilverStripe中最受欢迎(浏览次数最多)的页面?

我想在网站上列出浏览次数最多的博文。

我尝试了following code,但它无效:

public function MostPopularBlogArticles($num = 5) { 
    return DataObject::get(
        "BlogPostPage",
        "Status = 'Published'",
        "`PageCounter`.Counter DESC",
        "INNER JOIN PageCounter ON `PageCounter`.PageID = `BlogPostPage`.ID",
    $num
    );
}

模板:

<ul>
    <% control MostPopularBlogArticles(5) %>
    <li>
        <a href="$Link" title="$Title.XML">$MenuTitle.XML</a>
    </li>
    <% end_control %>
</ul>

1 个答案:

答案 0 :(得分:5)

以下内容基于Infobiro网站上的SilverStripe CMS Page Hit/View Counter SilverStripe - Most Popular Articles博客文章。这些说明适用于使用当前版本的SilverStripe blog module

的SilverStripe 3.4

首先,我们创建一个getIndexData PageView来跟踪每个页面的页数。

DataObject

在我们的class PageView extends DataObject { private static $db = array( 'Count' => 'Int' ); private static $has_one = array( 'Page' => 'Page' ); } 课程中,我们与Page建立$belongs_to关系,以便我们可以轻松检索相关的PageView对象。

PageView

在我们的class Page extends SiteTree { private static $belongs_to = array( 'PageView' => 'PageView' ); } 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(); } } 我们还创建了一个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);
    }
}

在我们的模板中,我们检索public function MostViewedPages($limit = 5) { return Page::get() ->innerJoin('PageView', '`Page`.`ID` = `PageView`.`PageID`') ->sort('PageView.Count', 'DESC') ->limit($limit); } 列表如下:

MostViewedBlogPosts