Skip to main content

This site requires you to update your browser. Your browsing experience maybe affected by not having the most up to date version.

General Questions /

General questions about getting started with SilverStripe that don't fit in any of the categories above.

Moderators: martimiz, Sean, biapar, Willr, Ingo, swaiba, simon_w

How to update page witout versioning or how to add view counter?


Reply


2 Posts   1120 Views

Avatar
jjeziorski

Community Member, 11 Posts

6 July 2009 at 12:38am

Hey all,

I would like to track number of views of each page, so i wrote:

class Page extends SiteTree {
   public static $db = array(
    'Viewed' => 'Int'
   );
}
class Page_Controller extends ContentController {
   
public function init() {
parent::init();
if ($this->ID) {
   if (!Session::get('Visited_'.$this->ID)) {
$page = DataObject::get_by_id('Page', $this->ID);

if ($page) {
$page->Viewed++;
$page->writeToStage("Stage");
$page->publish("Stage", "Live");
}
Session::set('Visited_'.$this->ID, true);
}
}
}


This solution works however i end up with huge amount of version copies (each for one view increment)

Is there any way to avoid versioning on save? Or is there a better solution?

Thanks,

Avatar
jjeziorski

Community Member, 11 Posts

6 July 2009 at 6:19pm

I've got this (i used solution from forum module) :)

$this->Viewed++;
$SQL_numViews = Convert::raw2sql($this->Viewed);
DB::query("UPDATE Page_live SET Viewed = '$SQL_numViews' WHERE ID = $this->ID");

Well, i don't mind using sql, however this approach is database specific and might be broken. It might be a good idea to have function like unversionedWrite or write() with boolean param.

Or am i missing something? Any other ideas?

Thanks