[Radiant] custom controllers displaying a page from radiant
Alexander Horn
alex.horn at gmail.com
Fri Oct 13 10:46:38 CDT 2006
> What id like to do is call my controller directly using routes (or default
> routes), then render the page by calling radiant classes / methods. The
> radiant page dispatcher would not even come into play until after the custom
> controller runs (if I understand you correctly).
That is exactly what John is working on. He will be back next week.
But I recall he is not planning until next month to get his advanced
plugin system rolled out. Nevertheless your feedback is important.
On 10/13/06, orff <proudestmonkey at gmail.com> wrote:
> You are correct. I would like a simple way to display radiant pages, but
> also a simple way to run my own rials code without having to bother with
> coding up a behavior. Coming into this project what I really wanted was a
> simple CMS for my users to put in content, but still leverage my rails
> knowledge to create functionality for the site. I already know how to get
> forms, email, calendars, etc. working in rails. I love the way the
> behaviors extend radiant and I think they are great for giving a 'non-coder'
> type admin a way to add functionality, but I think there are also going to
> be a lot of admins who already know rails and are going to be a bit
> frustrated having to learn the radiant codebase just to add simple
> functionality to their radiant driven site (also debugging behaviors is slow
> due to server restarts).
>
> What id like to do is call my controller directly using routes (or default
> routes), then render the page by calling radiant classes / methods. The
> radiant page dispatcher would not even come into play until after the custom
> controller runs (if I understand you correctly).
>
> In other words URL ://mysite.com/contact
> would call the radiant page controller and render the page, but
> //mysite/forms/contact
> would call my forms controller and render the page using the radiant layout
> of choice and then render and forms I decide in my controller by passing in
> partial(s).
> //mysite/forms/contact_create
> would use my rails code to create the contact entry in the model, then could
> redirect back to a radiant page
> with the confirmation details
>
> my forms controller would handle the interaction with the models, do the
> validation, etc. In my perfect world, all I need from the radiant code is
> way to display a page with a custom partial, see the contact_create method
> below:
>
> class FormsController < ApplicationController
>
> def index
> contact_new
> end
>
> def contact_new
> @page = Page.find_by_url ('contact/form_holder_page') # this is a
> hidden radiant page ??
> custom_content = render_partial ('contact_form') # this form has a
> placeholder to display validation errors
> @page.render_with_custom_page_part( :page_part =>
> custom_content ) # this would be brilliant!! :-)
> end
>
> def contact_create
> @contact = Contact.new( params[:contact] )
> if @contact.save
> flash[:notice] = 'Contact info info saved.'
> redirect_to '/contact/thanks'
> else
> flash[:error] = 'Contact info could not be saved.'
> render :action => 'contact_new'
> end
> end
>
> end
>
> thanks for the swift reply. I am on vacation next week, but then I look
> forward to installing and checking out the corex branch, I like where it is
> going ..
>
> Mr out of the box, Mike
>
>
> On 10/12/06, Alexander Horn <alex.horn at gmail.com> wrote:
> >
> > > def index
> > > @page = Page.find (1)
> > > custom_content = render_partial 'some_partial'
> > > @page.page_parts << PagePart.new( :name=>'form',
> > > :content=>custom_content )
> > > process_page # this is the part I really cant remember, it was
> three
> > > lines or so of code
> > > end
> >
> > If I understand correctly you are trying to decompose your "behavior"
> > into a model, and a controller. I like the fact that you are thinking
> > outside the box. You are right. Certain things could be done more
> > easily in a controller.
> >
> > As part of the "corex" branch, I have done a few experiments of
> > similar kinds: the goal is to create a separation of model and
> > controller logic.
> >
> > Here are couple observations I have made:
> >
> > A hypothetical SiteController#process_page() method may look so:
> >
> > class SiteController < ApplicationController
> > ...
> >
> > def process_page
> > if @page.layout
> > content_type = @page.layout.content_type.to_s.strip
> > @response.headers['Content-Type'] = content_type unless
> > content_type.empty?
> > end
> > headers.each { |k,v| @response.headers [k] = v }
> > @response.body = render
> > end
> > ...
> > end
> >
> > It seems the biggest challenge with this approach is the coordination
> > of the dispatcher process. Consider a situation where someone would
> > like to overwrite this process_page() method in a subclass.
> >
> > Example:
> >
> > class MySiteController < SiteController
> > def process_page
> > ...
> > super
> > end
> > end
> >
> > Now how does this MySiteController get called. Clearly we must first
> > find the page by the given url [ find_page_by_url() ] before we can
> > make the decision what controller would be appropriate to handle the
> > page request. That's a problem I am facing. I am not quite sure how to
> > solve the issue of finding the page (which is a model) and directing
> > the program flow to the controller (i.e. SiteController or a subclass
> > thereof).
> >
> > Clearly, it would be beneficial to be able to write your own
> > controller. However, how does the dispatcher know which controller
> > goes with what page? .... I am still contemplating on this....
> >
> > --
> > Alexander Horn
> > http://www2.truman.edu/~ah428
> >
> >
> >
> > On 10/12/06, orff < proudestmonkey at gmail.com> wrote:
> > > I would love to just be able to call methods in my own custom controller
> to
> > > display the CMS content, but do things like form handling / database
> > > interaction using rails proper and not have to write behaviors to add
> > > functionality. I have successfully written my own behavior based off of
> the
> > > mailer behavior to submit form data to a model, but the whole time what
> I
> > > really wanted to do was just display a certian page from the CMS with my
> own
> > > forms / validation / etc happening as rails code.
> > >
> > > I played around with a new controller on my dev version calling render
> with
> > > an injected page part, but could not get it to work without committing
> the
> > > page part to the database first. I have since deleted it, but the code
> was
> > > similar to this (sorry, I dont have the exact code, but I think you can
> get
> > > the idea)
> > >
> > > def index
> > > @page = Page.find (1)
> > > custom_content = render_partial 'some_partial'
> > > @page.page_parts << PagePart.new( :name=>'form',
> > > :content=>custom_content )
> > > process_page # this is the part I really cant remember, it was
> three
> > > lines or so of code
> > > end
> > >
> > > Is there anyone from the development team that could give me a hint as
> to
> > > how to do this, or convince me that custom controllers are a really bad
> idea
> > > and I should just write behaviors ? I understand fully there are lots
> of
> > > things that can do wrong with modifying the page real-time, but it would
> be
> > > nice to just do my forms in rails with validations, activerecord
> > > relationships, etc. etc.
> > >
> > > Debugging behaviors is a real pain because I keep having to re-start my
> web
> > > server to see new results (even in development mode). Maybe if someone
> can
> > > tell me how to fix just this problem I'd be a little more happy to write
> > > behaviors.
> > >
> > > -mike
> > >
> > >
> > > _______________________________________________
> > > Radiant mailing list
> > > Post: Radiant at lists.radiantcms.org
> > > Search: http://radiantcms.org/mailing-list/search/
> > > Site:
> > > http://lists.radiantcms.org/mailman/listinfo/radiant
> > >
> > >
> > _______________________________________________
> > Radiant mailing list
> > Post: Radiant at lists.radiantcms.org
> > Search: http://radiantcms.org/mailing-list/search/
> > Site:
> http://lists.radiantcms.org/mailman/listinfo/radiant
> >
>
>
> _______________________________________________
> Radiant mailing list
> Post: Radiant at lists.radiantcms.org
> Search: http://radiantcms.org/mailing-list/search/
> Site:
> http://lists.radiantcms.org/mailman/listinfo/radiant
>
>
--
Alexander Horn
http://www2.truman.edu/~ah428
More information about the Radiant
mailing list