Hello,

In our upcoming project we've decided to give Mason 2.0 a go - we'll be
completly rewritting pretty big web portal with over 10 years of history
which had previously been written in old Mason/mod_perl.

I checked documentation and I really like the direction of 2.0 version, but
considering our needs I have one important question: biggest problem with
old Mason was using infromation from top page component (the one which was
accessed from browser, like index.m) in upper "wrappers" that decided on
things like meta data, HTML header and base layout.

To give an example (pardon pseudo code but I just want to make it clear as
quick as possible) in Mason 1.x:

----------------------------------------
*/index.m*
<%init>
   my $article = Article::get_article(...);
   my $title = "Article: " . $article->{title};
</%init>
<h1><% $article->{title}</h1>
<% $article->{body} %>


----------------------------------------
*/autohandler*
<%init>
  my $title = "Default title";
</%init>
<html>
<head>
<title><% $title %></title>     // $title should be either default or
                                // overriden by base components like index.m
</head>
<body>
<% $m->call_next %>

In Mason 1.x it was quite hard (if not impossible) to get that $title from
base component (index.m) up to autohandler which required that information
to set up <title></title> of web page. <%attr> block worked a bit like
this, but it was static and could not be changed depending on some logic
(like setting title of fetched article etc.)

My question is - how can this be achieved in Mason 2.0 - I suppose that
having components as classes help here a lot? I couldn't find the exact
example of such "passing" of attributes. If Base.mc is some kind of
autohandler (if I'm correct) then it will become a parent of index.mc
component,
right? If so, can I define

*/Base.mc*
<%class>
  has 'title'
</%class>
<html>
<head>
<title><% $self->title %></title>
</head>
<body>
<% inner() %>

and then in index.mc do this:

/index.mc
<%init>
  $self->title('New title');
</%init>

And it will cause the Base.mc component class to display the title set by
its child? Or should we approach this more in a OO manner defining some
virtual method in Base.mc like GetPageTitle() and override it in other
components with a method returning a specific title?

I'd be really grateful for some short examples of good practices of doing
this in Mason 2.0 :)

Thanks,

KN
------------------------------------------------------------------------------
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and 
threat landscape has changed and how IT managers can respond. Discussions 
will include endpoint security, mobile security and the latest in malware 
threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
_______________________________________________
Mason-users mailing list
Mason-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mason-users

Reply via email to