[Radiant] Incorporating Radiant and site functionality

Matthew Denner matt.denner at gmail.com
Mon Jul 24 08:59:39 CDT 2006


Hi,

Just a question about whether I'm doing this correctly as I'm a new
Radiant user.

I have a client (as in person, not software!) who wants to use a Rails
CMS (I've recommended Radiant) but wants to build a site around it
that has extra functionality (filling in forms and having structured
data saved).  The UI for this extra functionality needs to be managed
under the CMS so I've done a bit of a test and, by using a Rails
Engine, I can add the controller and model as an engine.  In my engine
controller I then have:

class MyController < ApplicationController
  def new
    render_view(:new, Thing.new)
  end
  def save
    render_view(:save, Thing.create!(params[:thing]))
  end
  def view
    render_view(:view, Thing.find(params[:id]))
  end
  def render_view(view, thing)
    render_component :controller => 'site', :action => 'show_page',
:params => { :url => "/my_controller_views/#{ view }", :thing => thing
}
  end
end

Essentially delegating the rendering of the page by using components
because I cannot render a normal Rails RHTML page.

In my config/routes.rb I ensure that MyController is configured
*before* the default site controller:

  # MyController handling
  map.with_options(:controller => 'my') do |my_controller|
    my_controller.my_controller_new    'my_controller/new',
            :action => 'new'
    my_controller.my_controller_save   'my_controller/save',
            :action => 'save'
    my_controller.my_controller_view   'my_controller/view/:id',
            :action => 'view'
  end

  # Site URLs
  .... rest of normal routes.rb

This all seems to work wonderfully as I've added some Radius tags
(directly into PageContext for the moment!) for accessing the 'thing'.

But I do have a serious question on top of this: I assume that the
"preferred" method for adding these tags is to build a behaviour?
What happens when you want to have a standard set of tags available
(for example, I have a click-through link engine too that counts
clicks through to URLs) and you want these to be available to all
pages; I can't have two behaviours for each page (the click-through
links *and* the 'thing' tags), nor can I easily extend the PageContext
class.

Matt



More information about the Radiant mailing list