CGI::FormBuilder::Source::File - phpMan

Command: man perldoc info search(apropos)  


Sections
NAME SYNOPSIS DESCRIPTION METHODS NOTES SEE ALSO REVISION AUTHOR
NAME
    CGI::FormBuilder::Source::File - Initialize FormBuilder from external
    file

SYNOPSIS
        # use the main module
        use CGI::FormBuilder;

        my $form = CGI::FormBuilder->new(source => 'form.conf');

        my $lname = $form->field('lname');  # like normal

DESCRIPTION
    This parses a file that contains FormBuilder configuration options, and
    returns a hash suitable for creating a new $form object. Usually, you
    should not use this directly, but instead pass a $filename into
    "CGI::FormBuilder", which calls this module.

    The configuration format steals from Python (ack!) which is sensitive to
    indentation and newlines. This saves you work in the long run. Here's a
    complete form:

        # form basics
        method: POST
        header: 1
        title:  Account Information

        # define fields
        fields:
            fname:
                label:   First Name
                size:    40

            minit:
                label:   Middle Initial
                size:    1

            lname:
                label:   Last Name
                size:    60

            email:
                size:    80

            phone:
                label:    Home Phone
                comment:  (optional)
                required: 0

            sex:
                label:   Gender
                options: M=Male, F=Female
                jsclick: javascript:alert('Change your mind??')

            # custom options and sorting sub
            state:
                options:  \&getstates
                sortopts: \&sortstates

            datafile:
                label:   Upload Survey Data
                type:    file
                growable:   1

        # validate our above fields
        validate:
            email:  EMAIL
            phone:  /^1?-?\d{3}-?\d{3}-?\d{4}$/

        required: ALL

        # create two submit buttons, and skip validation on "Cancel"
        submit:  Update, Cancel
        jsfunc:  <<EOJS
      // skip validation
      if (this._submit.value == 'Cancel') return true;
    EOJS

        # CSS
        styleclass: acctInfoForm
        stylesheet: /style/acct.css

    Any option that FormBuilder accepts is supported by this configuration
    file. Basically, any time that you would place a new bracket to create a
    nested data structure in FormBuilder, you put a newline and indent
    instead.

    Multiple options MUST be separated by commas. All whitespace is
    preserved intact, so don't be confused and do something like this:

        fields:
            send_me_emails:
                options: Yes No

    Which will result in a single "Yes No" option. You want:

        fields:
            send_me_emails:
                options: Yes, No

    Or even better:

        fields:
            send_me_emails:
                options: 1=Yes, 0=No

    Or perhaps best of all:

        fields:
            send_me_emails:
                options: 1=Yes Please, 0=No Thanks

    If you're confused, please join the mailing list:

        fbusers-subscribe AT formbuilder.org

    We'll be able to help you out.

METHODS
  new()
    This creates a new "CGI::FormBuilder::Source::File" object.

        my $source = CGI::FormBuilder::Source::File->new;

    Any arguments specified are taken as defaults, which the file then
    overrides. For example, to always turn off "javascript" (so you don't
    have to in all your config files), use:

        my $source = CGI::FormBuilder::Source::File->new(
                          javascript => 0
                     );

    Then, every file parsed by $source will have "javascript => 0" in it,
    unless that file has a "javascript:" setting itself.

  parse($source)
    This parses the specified source, which is either a $file, "\$string",
    or "\@array", and returns a hash which can be passed directly into
    "CGI::FormBuilder":

        my %conf = $source->parse('myform.conf');
        my $form = CGI::FormBuilder->new(%conf);

  write_module($modname)
    This will actually write a module in the current directory which you can
    then use in subsequent scripts to get the same form:

        $source->parse('myform.conf');
        $source->write_module('MyForm');    # write MyForm.pm

        # then in your Perl code
        use MyForm;
        my $form = MyForm->new;

    You can also override settings from "MyForm" the same as you would in
    FormBuilder:

        my $form = MyForm->new(
                        header => 1,
                        submit => ['Save Changes', 'Abort']
                   );

    This will speed things up, since you don't have to re-parse the file
    every time. Nice idea Peter.

NOTES
    This module was completely inspired by Peter Eichman's
    "Text::FormBuilder", though the syntax is different.

    Remember that to get a new level in a hashref, you need to add a newline
    and indent. So to get something like this:

        table => {cellpadding => 1, cellspacing => 4},
        td    => {align => 'center', bgcolor => 'gray'},
        font  => {face => 'arial,helvetica', size => '+1'},

    You need to say:

        table:
            cellpadding: 1
            cellspacing: 4

        td:
            align: center
            bgcolor: gray

        font:
            face: arial,helvetica
            size: +1

    You get the idea...

SEE ALSO
    CGI::FormBuilder, Text::FormBuilder

REVISION
    $Id: File.pm 100 2007-03-02 18:13:13Z nwiger $

AUTHOR
    Copyright (c) Nate Wiger <http://nateware.com>. All Rights Reserved.

    This module is free software; you may copy this under the terms of the
    GNU General Public License, or the Artistic License, copies of which
    should have accompanied your Perl kit.


Generated by phpMan Author: Che Dong On Apache Under GNU General Public License - MarkDown Format
2026-05-23 05:57 @216.73.217.24 CrawledBy Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)
Valid XHTML 1.0 TransitionalValid CSS!

^_back to top