bronto has asked for the wisdom of the Perl Monks concerning the following question:

Hello monks

I've just made an httpd daemon script that I use to remotely start and stop services. When contacted, it displays a small form on the browser, using information that is stored on a couple of variables.

I managed to move all the configuration on a file using AppConfig; now I'd like to move the template page out of the script, too, so that one could customize the appearence of the page without having to edit the source code of the script.

How could I solve this problem?

Subroutine's source code follows

sub show_form { my $c = shift ; my $status = status() ; my $message = get_message() ; my $page = <<END_OF_PAGE ; <html> <head> <title>$service_name controls</title> </head> <body> <h1 align="center">$service_name controls</h1> <div align="center"> <table style="border-width: 2px ; border-style: solid"> <tr align="center"> <td> <form action="/start" method="post"> <input type="submit" value=" Start " > </form> </td> <td> <form action="/stop" method="post"> <input type="submit" value=" Stop " > </form> </td> <td> <form action="/restart" method="post"> <input type="submit" value=" Restart " > </form> </td> </tr> <tr align="center"> <td colspan="3"> <form action="/status" method="post"> <input type="submit" value=" Update status " > </form> </td> <tr> <tr> <td colspan="3" align="center">$message</td> <tr> <tr> <td colspan="3">Status: $service_name is $status</td> <tr> </table> </div> </body> </html> END_OF_PAGE reset_message ; my $resp = HTTP::Response->new ; $resp->content($page) ; $c->send_response($resp) ; }

Thanks in advance

Ciao!
--bronto


The very nature of Perl to be like natural language--inconsistant and full of dwim and special cases--makes it impossible to know it all without simply memorizing the documentation (which is not complete or totally correct anyway).
--John M. Dlugosz

Replies are listed 'Best First'.
Re: Web page template for an HTTP daemon script
by benn (Vicar) on Aug 13, 2003 at 12:04 UTC
    A reply falls below the community's threshold of quality. You may see it by logging in.
Re: Web page template for an HTTP daemon script
by bm (Hermit) on Aug 13, 2003 at 12:39 UTC
    Hmm. Unless I am missing something, can't you just include a reference to a cascading style sheet in your generated html:

    <LINK href="http://server/path/to/stylesheet.css" rel=stylesheet>

    and then edit that file to customise the appearance of your page?

    hth
    --
    bm

      It's not a CSS problem: i want the HTML code itself to be customizable

      Ciao!
      --bronto


      The very nature of Perl to be like natural language--inconsistant and full of dwim and special cases--makes it impossible to know it all without simply memorizing the documentation (which is not complete or totally correct anyway).
      --John M. Dlugosz
        Oh. I missed now I'd like to move the template page out of the script and somehow concentrated on change the appearance without edit the source. As mentioned, templating..
        --
        bm
Re: Web page template for an HTTP daemon script
by bronto (Priest) on Aug 13, 2003 at 16:49 UTC

    In the end, I did the most obviuous thing: wrote an html file with tags in it, and substituted values with s///. Thanks a lot, larsen. How is it that I didn't think it myself?


    The very nature of Perl to be like natural language--inconsistant and full of dwim and special cases--makes it impossible to know it all without simply memorizing the documentation (which is not complete or totally correct anyway).
    --John M. Dlugosz
      Before you run off and start using your templating system on all of your HTTP daemons, ask yourself these questions:
      • How will be able to have conditional branches?
      • How will be able to loop?
      • How will i be able to restrict scope?
      • How will i be able to include other files?
      • How will i know when to escape certain variables?
      Sure, you don't need them now ... but you will ;)

      Do me a favor. Read my reply OOPS! my reply (hopefully) again and compare the code i submitted to your hand rolled solution above. The template itself is mostly the same, you may like your 'tags' better, but HTML::Template's have the features i listed above. The code also looks mostly the same - these are reasons to use HTML::Template ... or Text::Template. I get the feeling that you did not play around with these modules and get a real feel for them. There is nothing wrong with reinventing wheels for your own education, but there is everything wrong with reinventing wheels because you are too hasty to 'see results now'. Invest time in research, it pays big. ;)

      jeffa

      L-LL-L--L-LL-L--L-LL-L--
      -R--R-RR-R--R-RR-R--R-RR
      B--B--B--B--B--B--B--B--
      H---H---H---H---H---H---
      (the triplet paradiddle with high-hat)
      

        Hello jeffa

        First, thanks a lot for replying with constructive arguments: I apreciate it a lot

        About your comments:

        • How will be able to have conditional branches?
        • How will be able to loop?
        • How will i be able to restrict scope?
        • How will i be able to include other files?
        • How will i know when to escape certain variables?

        The answer to all questions is no

        Read my reply (hopefully)

        jeffa, I read your answer, as I did with all the other ones (the right, one, not the one you linked, anyway: you missed the final digit in the ID :-). Your solution is good, and mine isn't surely better, nor it is flexible. The reason why I chose an handmade solution is the footprint that my script has in memory: it's about 5300 kbytes at startup. Simply adding a use HTML::Template, without instanciating any object, makes it go to about 6000 kbytes...

        I get the feeling that you did not play around with these modules and get a real feel for them.

        Your feeling is right. I am an AxKit guy. :-) I found that it is such a great tool that I definitely abandoned any other template approach for web site management. Until yesterday.

        There is nothing wrong with reinventing wheels for your own education, but there is everything wrong with reinventing wheels because you are too hasty to 'see results now'. Invest time in research, it pays big. ;)

        Well, actually I don't like reinventing the wheels, mainly because I assume that there is someone that did the job better than me, unless the contrary is proven; in this sense, perlmonks often confirmed that my assumptions were right.

        Thanks again for your help
        --bronto


        The very nature of Perl to be like natural language--inconsistant and full of dwim and special cases--makes it impossible to know it all without simply memorizing the documentation (which is not complete or totally correct anyway).
        --John M. Dlugosz