I believe that the variables in the %args block don't get bound until after the %shared sections run (I'm sure some Mason expert can explain exactly why this is so), but the workaround I've used is to just get them from the Mason object's request_args hash, ala:
<%shared> my $item_id = $m->request_args->{'item_id'}; ... On Nov 13, 2007, at 5:11 PM, Dave Brown wrote: > Please bear with me as I've just started working with Mason. I'm > working on a legacy Mason-built web-app which lets users search and > view details of my company's area rugs. Unfortunately the original > developer didn't take the time to create the presentational logic > necessary to give each page it's own title; at first every html page > generated by Mason had the same title tag. > > Following the advice on the Masonhq site, I defined a default title > method in the autohandler and called it like so <& SELF:title &>, > then defined custom title methods in the detail page files. The > problem is, I need dynamic content in the product title, and the > variables I have to work with in product-detail.mhtml (declared in an > init blovk) don't have the right scope to be used in the method > definition. > > I thought I had found the answer when I read that you can take your > content from the <%init> block and put it in a <%shared> block, > instead, thus making the variable/s available to any method > definitions whithin that file. > > The problem is, I get this error after wrapping the init block in a > shared block instead: > > Global symbol "$item_id" requires explicit package name > > I figure I must be missing something major about how the init and > shared blocks work. Here are the files in question: > > ----------------Autohandler----------- > > ..some html... > > <title><& SELF:title &></title> > > ..some more html... > > % $m->call_next(); > > <%method db_connect> > % $dbh = RugUtil::db_connect(...db details...); > % return 1; > </%method> > > ..call the footer... > > <%method title> > Default Title > </%method> > > -----------DetailPage.mhtml----------- > > <%method title> > Product Detail Page > </%method> > > ..some html and embedded <% ... %> tags ... > > <%init> > > my $drl = &RugOps::retrieve_rug($dbh, item_id => $item_id, _public > => 1) > ->{results}; > ref $drl and scalar @$drl == 1 > or die("No such rug '$item_id'.\n"); > my $item = $drl->[0]; > > # Figure out if this rug is already in user's gallery, so we know > which > # button to display. > my $in_gallery = 0; > if (my $user = $session{public_user}) { > # Heresy! > my $real_id = $item->{_real_id}; > my $q_user = $dbh->quote($user); > my $sql = qq/SELECT COUNT(*) FROM user_item INNER JOIN user > ON user_item.User = user.ID > WHERE user.Name = $q_user AND user_item.Item = $real_id/; > if ($dbh->selectcol_arrayref($sql)->[0]) { > $in_gallery = 1; > } > } > > </%init> > > <%args> > $item_id > </%args> > > ---------------------------------------------------------------------- > --- > This SF.net email is sponsored by: Splunk Inc. > Still grepping through log files to find problems? Stop. > Now Search log events and configuration files using AJAX and a > browser. > Download your FREE copy of Splunk now >> http://get.splunk.com/ > _______________________________________________ > Mason-users mailing list > Mason-users@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/mason-users > ------------------------------------------------------------------------- This SF.net email is sponsored by: Splunk Inc. Still grepping through log files to find problems? Stop. Now Search log events and configuration files using AJAX and a browser. Download your FREE copy of Splunk now >> http://get.splunk.com/ _______________________________________________ Mason-users mailing list Mason-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/mason-users