Beefy Boxes and Bandwidth Generously Provided by pair Networks
more useful options
 
PerlMonks  

CatalystX::Comments - RFC

by zby (Vicar)
on Jun 21, 2009 at 09:59 UTC ( #773350=perlmeditation: print w/ replies, xml ) Need Help??

This is a repost from my blog. In Packaging cross cutting Catalyst features I promised to start developing a generic Catalyst comment sub-system. Now I have incorporated the code samples into another experiment - ravlog (a blog engine by Gerda Shank), and I would like to ask you what you think about it before releasing it to CPAN.

Here is the current API - any comments are welcome. First you need to declare the controller using the new Moose style:

package RavLog::Controller::View; use Moose; BEGIN { extends 'Catalyst::Controller'; with 'CatalystX::Comments::ControllerFormRole'; } has model_name => ( is => 'ro', isa => 'Str', default => 'DB' );
The important part for us is of course with 'CatalystX::Comments::ControllerFormRole', the model_name attribute should hold the name of the model CatalystX::Comments will use to store the comments. After the declarations you can use CatalystX::Comments to put the comment form on the stash:
sub view : Chained('base') PathPart('view') Args(0) { my ( $self, $c, $id ) = @_; ... $self->stash_comment_form( $c, $self->article->id ); }
That's the whole controller part - what it handles is generating the form for display and saving the submitted comments. In the view templates you need to add:
[% comment_form.render %]
For displaying the comments themselves ravlog already had some template code and I did not change it.

Next is the model part. The library assumes that the DBIC model contains a Comment Result class like that one in ravlog. Of course it does not need to have all of the columns, and can also have other columns - but these are the columns that will be filled by the CatalystX::Comments form. Ideally that model part should be a Result base class - so that it can be subclassed and adapted to local needs (for example the belongs_to relationship to article needs to be changed), but for now I don't know how to do that.

Now some more details. Thanks to html_prefix all parameters sent from this form are prefixed with the form name - so this form can be added to pages with other forms, it will recognize it's parameters. The comments are saved only when the HTTP method used is POST, and after a successful comment creation the user is redirected to the same page (this seems a bit constraining - but see next paragraph - this is only meant to be temporary solution - I try to keep the API simple).

Of course I understand that this can never cover the needs of a comment sub-system in a mature social web site. I am thinking about it as more of scaffolding - code that let's you quickly develop a feature, see how it integrates with the rest of the user experience, formulate a more complete requirements list - and replace it part by part.

Comment on CatalystX::Comments - RFC
Select or Download Code
Replies are listed 'Best First'.
Re: CatalystX::Comments - RFC
by stonecolddevin (Vicar) on Jun 23, 2009 at 22:32 UTC

    has model_name => ( is => 'ro', isa => 'Str', default => 'DB' );

    Probably don't want 'DB' as default. That's the perl debug namespace as I'm sure you're aware.

    I think it looks pretty good. Mind shooting me an email at my GSoC hiveminder address as to what you'd like for scaffolding?

    meh.
Re: CatalystX::Comments - RFC
by stonecolddevin (Vicar) on Jun 23, 2009 at 22:34 UTC

    Quick note on the namespace - wouldn't CatalystX::Blog::Comments be more appropriate? That way you can stuff more associated classes in under ::Blog

    meh.
      Thanks for your input. The application of this module is not limited to blogs - comments are rather common feature for websites.

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: perlmeditation [id://773350]
Approved by McDarren
Front-paged by Arunbear
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others rifling through the Monastery: (15)
As of 2015-07-31 12:25 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (277 votes), past polls