Skip to content
codeinthehole edited this page Dec 17, 2012 · 1 revision

Client's need the ability to add content to their sites to give customer's a reason to return. The types of page they want to create are varied and often domain-specific. The aim of this feature is to provide a extensible CMS component that allows pages of various forms to be created and managed. The UI should have some JS-driven-"wow"-factor as this is a key selling point in pitches.

Oscar currently uses Django's flatpages app to allow simple pages to be created. Oscar's promotions can be used to add product content to any page and can be used in combination with the managed pages. We intend to replace this with a more sophisticated CMS feature that allows hierarchical pages to be created from a set of templates.

We should try and use this exercise to provide a better UI for adding promotions to pages too.

Stories

An admin can use the dashboard to:

  • Create pages and organise them within a tree structure
  • Move pages within the tree
  • Manage page visibility via start/end dates, and draft/published/archived status.
  • Set a flag on a page so it's not visible in the navigation
  • Preview a page within the site
  • Add widgets from a pre-defined set to a section of the page

When creating a new page, the admin will be asked what "type" of page to create. The available types should include:

  • Article pages. These are effectively blog-like articles in that they have a title, body, author, date. When shown in navigation, we would sort by publication date.
  • Product showcase page. A page for highlighting a particular product
  • Product range showcase page. A page for discussing a hand-picked range of products. This will be like a product listing page (eg with pagination) except with custom HTML within the page.
  • A help page (such as T&Cs, shipping information, returns etc)

It should be possible to add new types of page to this list based on the domain. For example, in a bookstore, you might want to create "Interview with an author" pages.

Customers will see:

  • A new navigation section that shows the published pages.

Implementation details

It probably makes sense to use models that subclass a parent model. The parent model can contain core details (URL, title, etc), while the subclasses can specialise (eg add a product link for a product showcase page).

We should use a custom templatetag for the navigation.

Questions

  • Should each page type have a fixed template (configured per project)?

Notes

It's definitely worth playing around with both FeinCMS and django-CMS to see how they handle page models, and to see if integrating with one of them would solve our problems. It may be that we need to implement a WYSIWYG and e-commerce aware UI that writes back to a FeinCMS backend (rather than writing our own CMS models).