[cgiapp] Adding a div of fixed content to evey page. Possible?

Brad Van Sickle bvansickle3 at gmail.com
Fri Oct 30 16:22:27 EDT 2009


I see what your problem is now..

I have had to deal with this in the past the way I handled it was to 
split up my rm content, save one of them to a cgi::app parameter and 
then pull it back out in postrun

runmode
    {
    #generate content1
    $self->param('Content1',$Content1);

    #generate content 2
    return $Content2;
    }

postrun
    {
    my $Content1=$self->param('Content1');
    my $Content2=$$output_ref;
    my $LoginForm=&Get_LoginForm_HTML;

   $template->param(
          CONTENT1 => $Content1,
          LOGINFORM =>$LoginForm,
          CONTENT2 => $Content2,
          );
      }

I then used a <TMPL_IF> statements to only show CONTENT1 if it's populated.

It seemed a little hackish and messy to me at the time, but it was the 
best I could think of.  There probably is a much better way.   Let me 
know what method you end up going with.




   

Gurunandan R. Bhat wrote:
> <div>Banner</div>
> <div>Left Column</div>
> <div>
>     Some Business Content
>     <div>Login Box Here</div>
>     More Business Content
> </div>
>
>
>
>
> On Fri, 2009-10-30 at 16:04 -0400, Brad Van Sickle wrote:
>   
>> I have a hard time imagining a scenario where you couldn't make it work 
>> with some clever templating, but you certainly know your requirements 
>> better than I do.  Perhaps if you could provide me an example of HTML 
>> layout I might have a better idea about what you're talking about?
>>
>> Hopefully this is at least useful to you in a future project.
>>     
>>>
>>> Gurunandan R. Bhat wrote:
>>>       
>>>> Now I get it! Thanks for staying with me. 
>>>> However my point is that I cannot do this: 
>>>>
>>>>   
>>>>         
>>>>>     # Fill in template parameters
>>>>>     $template->param(
>>>>>              WIDGET1 => $widget1,
>>>>>              WIDGET2 => $widget2,
>>>>>              RUNMODE_CONTENT => $$output_ref,
>>>>>              );
>>>>>     
>>>>>           
>>>> for any layout - specifically where the design (HTML) of the page is such that it does not allow cleanly separating the widgets from the surrounding content. 
>>>> Unfortunately I have a layout where the business output from the runmodes cannot be cleanly separated from the fixed content (in my case a login form).
>>>>
>>>> However in situations where such a separation in possible, yours is an excellent and preferred solution, So Thanks
>>>>  
>>>>
>>>>
>>>> On Fri, 2009-10-30 at 15:25 -0400, Brad Van Sickle wrote:
>>>>   
>>>>         
>>>>> My postrun sits in a superclass, so I have one "postrun" that serves the 
>>>>> entire application.
>>>>>
>>>>>  From within that postrun I do something similar to the following:
>>>>>
>>>>> postrun
>>>>>     {
>>>>>     #load page framework template
>>>>>     my $template = $self->load_tmpl(       
>>>>>                   $TemplateFile,
>>>>>                   cache => 1,
>>>>>                   die_on_bad_params =>0,
>>>>>                   );   
>>>>>
>>>>>     #get "widget" content
>>>>>     my $widget1=&Get_Widget1; #return html to insert into widget1
>>>>>     my $widget2=$Get_Widget2;  #return html to insert into widget2
>>>>>
>>>>>     # Fill in template parameters
>>>>>     $template->param(
>>>>>              WIDGET1 => $widget1,
>>>>>              WIDGET2 => $widget2,
>>>>>              RUNMODE_CONTENT => $$output_ref,
>>>>>              );
>>>>>   
>>>>>     #overwrite the output with the output of the template
>>>>>     $$output_ref= $template->output;
>>>>>     }
>>>>>
>>>>> Then in my runmode:
>>>>>
>>>>> runmode
>>>>>     {
>>>>>     ################
>>>>>     #get output
>>>>>     ################
>>>>>
>>>>>     #load rumode template that has only the html for this section, not 
>>>>> the full page
>>>>>     my $template = $self->load_tmpl(       
>>>>>                   $RMTemplateFile,
>>>>>                   cache => 1,
>>>>>                   die_on_bad_params =>0,
>>>>>                   );   
>>>>>
>>>>>     # Fill in template parameters
>>>>>     $template->param(
>>>>>              WHATEVER1 => $var1
>>>>>              WHATEVER2 => $var2
>>>>>              );
>>>>>
>>>>>     #return formatted runmode content content to postrun
>>>>>     return $template->output;
>>>>>     }
>>>>>    
>>>>> This allows me to control the format of my runmode output, and then 
>>>>> stick that formatted content into an overall page template.   Since I 
>>>>> have postrun in a superclass, and it services my entire application, I 
>>>>> only have one piece of code to track. 
>>>>>
>>>>> I'm sure this isn't the only option, (in fact the other responses seem 
>>>>> like they would work as well) but for the projects I've used this method 
>>>>> on I've been really pleased with the combination of flexibility and 
>>>>> centralized code management it provides.
>>>>>
>>>>>
>>>>>
>>>>> Gurunandan R. Bhat wrote:
>>>>>     
>>>>>           
>>>>>> First, Thanks for responding.
>>>>>>
>>>>>> Are you suggesting that I populate a template variable with another
>>>>>> HTML::Template-tagged piece and then populate that piece in postrun?  If
>>>>>> yes, wouldn't I have to do that in every runmode - something that I
>>>>>> wanted to avoid? 
>>>>>>
>>>>>> Would it not be better if I called $app->param(LOGINFORM => 'Content of
>>>>>> Form') (as opposed to $tpl->param()) in prerun and have it set for every
>>>>>> runmode without doing so explicitly in each runmode? 
>>>>>>
>>>>>> I am not getting it. My bad, obviously
>>>>>>
>>>>>>
>>>>>> On Fri, 2009-10-30 at 14:55 -0400, Brad Van Sickle wrote:
>>>>>>   
>>>>>>       
>>>>>>             
>>>>>>>  You can initialize and populate your template in postrun as well.
>>>>>>>
>>>>>>> The way I do it is I typically load the framework of the page using 
>>>>>>> HTML::Template in postrun, and then insert the output of my runmode into 
>>>>>>> the template where required.
>>>>>>>
>>>>>>> If your runmode output is complex enough to require being templated 
>>>>>>> itself, there isn't anything stopping you from using HTML::Template 
>>>>>>> within the runmode to format the output and then inserting the output of 
>>>>>>> that template into the overall template in postrun.
>>>>>>>
>>>>>>> You can even move postrun up into a superclass to centralize all of this 
>>>>>>> content and keep a coherent look on your site.
>>>>>>>
>>>>>>> At least that's the easiest and most flexible solution I found when I 
>>>>>>> was faced with a similar problem...
>>>>>>>
>>>>>>>
>>>>>>>     
>>>>>>>         
>>>>>>>               
>>>>>>>> Gurunandan R. Bhat wrote:
>>>>>>>>       
>>>>>>>>           
>>>>>>>>                 
>>>>>>>>> Yes thats what I want to do. To be specific, I want to insert a login
>>>>>>>>> form on every page or a logged-in status depending on whether
>>>>>>>>> $app->authen->username is defined or not (I am using
>>>>>>>>> CAP-Authentication). 
>>>>>>>>>
>>>>>>>>> But when I am in post-run, HTML::Template has done its job and no
>>>>>>>>> template variables are available any more - unless I use another
>>>>>>>>> templating system that will process the plain text available in postrun.
>>>>>>>>> In the light of this I am not sure how your suggestion will work. 
>>>>>>>>>
>>>>>>>>> Unless I haven't really understood what is available to postrun.
>>>>>>>>>
>>>>>>>>> REgards
>>>>>>>>> Gurunandan
>>>>>>>>>   
>>>>>>>>>
>>>>>>>>> On Fri, 2009-10-30 at 14:40 -0400, Brad Van Sickle wrote:
>>>>>>>>>
>>>>>>>>>   
>>>>>>>>>         
>>>>>>>>>             
>>>>>>>>>                   
>>>>>>>>>> In postrun you can populate a variable with a subroutine call and then 
>>>>>>>>>> substitute that variable anywhere in your template, or even insert it 
>>>>>>>>>> into your runmode output if desired.
>>>>>>>>>>
>>>>>>>>>> Is that what you are looking for, or am I way off base?
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> Gurunandan R. Bhat wrote:
>>>>>>>>>>     
>>>>>>>>>>           
>>>>>>>>>>               
>>>>>>>>>>                     
>>>>>>>>>>> Hi, 
>>>>>>>>>>>
>>>>>>>>>>> Is it possible to add the output of a template to every page/run-mode
>>>>>>>>>>> without going through assigning it to a template->param in each
>>>>>>>>>>> run-mode? 
>>>>>>>>>>>
>>>>>>>>>>> I am aware of using cgi-postrun to wrap the output of a run-mode, but it
>>>>>>>>>>> seems not possible to *insert* a div of content in an arbitraty (but
>>>>>>>>>>> fixed position) using this trick. Or is it? 
>>>>>>>>>>>
>>>>>>>>>>> I would also like to avoid another template processor (like HTML::Mason
>>>>>>>>>>> or Text::Template) to do this if there is an easier way. 
>>>>>>>>>>>
>>>>>>>>>>> Thanks for your attention
>>>>>>>>>>> Gurunandan
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> #####  CGI::Application community mailing list  ################
>>>>>>>>>>> ##                                                            ##
>>>>>>>>>>> ##  To unsubscribe, or change your message delivery options,  ##
>>>>>>>>>>> ##  visit:  http://lists.openlib.org/mailman/listinfo/cgiapp    ##
>>>>>>>>>>> ##                                                            ##
>>>>>>>>>>> ##  Web archive:   http://lists.openlib.org/pipermail/cgiapp/   ##
>>>>>>>>>>> ##  Wiki:          http://cgiapp.erlbaum.net/                 ##
>>>>>>>>>>> ##                                                            ##
>>>>>>>>>>> ################################################################
>>>>>>>>>>>
>>>>>>>>>>>   
>>>>>>>>>>>       
>>>>>>>>>>>             
>>>>>>>>>>>                 
>>>>>>>>>>>                       
>>>>>>>>>> #####  CGI::Application community mailing list  ################
>>>>>>>>>> ##                                                            ##
>>>>>>>>>> ##  To unsubscribe, or change your message delivery options,  ##
>>>>>>>>>> ##  visit:  http://lists.openlib.org/mailman/listinfo/cgiapp    ##
>>>>>>>>>> ##                                                            ##
>>>>>>>>>> ##  Web archive:   http://lists.openlib.org/pipermail/cgiapp/   ##
>>>>>>>>>> ##  Wiki:          http://cgiapp.erlbaum.net/                 ##
>>>>>>>>>> ##                                                            ##
>>>>>>>>>> ################################################################
>>>>>>>>>>
>>>>>>>>>>     
>>>>>>>>>>           
>>>>>>>>>>               
>>>>>>>>>>                     
>>>>>>>>> #####  CGI::Application community mailing list  ################
>>>>>>>>> ##                                                            ##
>>>>>>>>> ##  To unsubscribe, or change your message delivery options,  ##
>>>>>>>>> ##  visit:  http://lists.openlib.org/mailman/listinfo/cgiapp    ##
>>>>>>>>> ##                                                            ##
>>>>>>>>> ##  Web archive:   http://lists.openlib.org/pipermail/cgiapp/   ##
>>>>>>>>> ##  Wiki:          http://cgiapp.erlbaum.net/                 ##
>>>>>>>>> ##                                                            ##
>>>>>>>>> ################################################################
>>>>>>>>>
>>>>>>>>>   
>>>>>>>>>         
>>>>>>>>>             
>>>>>>>>>                   
>>>>>>> #####  CGI::Application community mailing list  ################
>>>>>>> ##                                                            ##
>>>>>>> ##  To unsubscribe, or change your message delivery options,  ##
>>>>>>> ##  visit:  http://lists.openlib.org/mailman/listinfo/cgiapp    ##
>>>>>>> ##                                                            ##
>>>>>>> ##  Web archive:   http://lists.openlib.org/pipermail/cgiapp/   ##
>>>>>>> ##  Wiki:          http://cgiapp.erlbaum.net/                 ##
>>>>>>> ##                                                            ##
>>>>>>> ################################################################
>>>>>>>
>>>>>>>     
>>>>>>>         
>>>>>>>               
>>>>>> #####  CGI::Application community mailing list  ################
>>>>>> ##                                                            ##
>>>>>> ##  To unsubscribe, or change your message delivery options,  ##
>>>>>> ##  visit:  http://lists.openlib.org/mailman/listinfo/cgiapp    ##
>>>>>> ##                                                            ##
>>>>>> ##  Web archive:   http://lists.openlib.org/pipermail/cgiapp/   ##
>>>>>> ##  Wiki:          http://cgiapp.erlbaum.net/                 ##
>>>>>> ##                                                            ##
>>>>>> ################################################################
>>>>>>
>>>>>>   
>>>>>>       
>>>>>>             
>>>>> #####  CGI::Application community mailing list  ################
>>>>> ##                                                            ##
>>>>> ##  To unsubscribe, or change your message delivery options,  ##
>>>>> ##  visit:  http://lists.openlib.org/mailman/listinfo/cgiapp    ##
>>>>> ##                                                            ##
>>>>> ##  Web archive:   http://lists.openlib.org/pipermail/cgiapp/   ##
>>>>> ##  Wiki:          http://cgiapp.erlbaum.net/                 ##
>>>>> ##                                                            ##
>>>>> ################################################################
>>>>>
>>>>>     
>>>>>           
>>>>
>>>> #####  CGI::Application community mailing list  ################
>>>> ##                                                            ##
>>>> ##  To unsubscribe, or change your message delivery options,  ##
>>>> ##  visit:  http://lists.openlib.org/mailman/listinfo/cgiapp    ##
>>>> ##                                                            ##
>>>> ##  Web archive:   http://lists.openlib.org/pipermail/cgiapp/   ##
>>>> ##  Wiki:          http://cgiapp.erlbaum.net/                 ##
>>>> ##                                                            ##
>>>> ################################################################
>>>>
>>>>   
>>>>         
>> #####  CGI::Application community mailing list  ################
>> ##                                                            ##
>> ##  To unsubscribe, or change your message delivery options,  ##
>> ##  visit:  http://lists.openlib.org/mailman/listinfo/cgiapp    ##
>> ##                                                            ##
>> ##  Web archive:   http://lists.openlib.org/pipermail/cgiapp/   ##
>> ##  Wiki:          http://cgiapp.erlbaum.net/                 ##
>> ##                                                            ##
>> ################################################################
>>
>>     
>
>
>
> #####  CGI::Application community mailing list  ################
> ##                                                            ##
> ##  To unsubscribe, or change your message delivery options,  ##
> ##  visit:  http://lists.openlib.org/mailman/listinfo/cgiapp    ##
> ##                                                            ##
> ##  Web archive:   http://lists.openlib.org/pipermail/cgiapp/   ##
> ##  Wiki:          http://cgiapp.erlbaum.net/                 ##
> ##                                                            ##
> ################################################################
>
>   


More information about the cgiapp mailing list