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 have payed Members only pages?


Reply


3 Posts   1452 Views

Avatar
purplespider

Community Member, 83 Posts

31 January 2010 at 11:49pm

I'm really excited about using SilverStripe for my web development projects, but I have one site though which I'm not sure how easy it would be to accomplish in SS.

It is an educational website, where you have to pay a yearly/monthly fee to view most of the pages.

The main aspect I am worried about is how to deal with "members" in SilverStripe. I need the ability:

- for members to register and pay and have immediate access to members only pages
- need to be able to have different categories of membership, some will get it cheaper, some for free etc

Can someone please point me in the right direction for how I could accomplish this in SilverStripe? Is it possible without too much extra coding?

Many Thanks!
James

Avatar
carlos

Community Member, 41 Posts

5 February 2010 at 4:09pm

Edited: 05/02/2010 4:10pm

Hi

Sure you can do this with SS.

- First create a registration form (we will need to create the logic to connect to a online payment gateway, or use payment module).

- Once you sorted payment, you need to create a new member and save it into a group (you can create different groups).

function registerAction($data,$form) { //you call this function when user submit registation form (or after you check payment)
      $member=DataObject::get_one('Member',"Email = '" . mysql_real_escape_string($data['Email']) . "'"); //check if the email is in the DB already
      if(!$member) { // if email is not in DB create a new member
         $member = new Member();
         $form->saveInto($member); //insert new member value from the form
         $member->RegistrationHash = md5(uniqid(rand(), true));
         $member->write(); //save new member
      }
$member->Groups()->add('myGroup');

- Add a check box to your pages so you can choose if the page is members only.
Page.php

function getCMSFields() {
       $fields = parent::getCMSFields();
$fields->addFieldToTab("Root.Content.Main", new CheckboxField('MemberOnly', 'For member only?'), 'Content');
...

- create a function in Page.php to check if the page is members only and check if the visitor is logged in.
Page.php

function canView($member = null) {   // this function gets called when you load the page.
      if($this->MemberOnly) {
         $member = Member::currentUser();
         if (!$member) return false;
      }
      
      return parent::canView($member);
   }

Avatar
purplespider

Community Member, 83 Posts

6 February 2010 at 2:21am

Amazing! I shall give this a go, thank you very much!