[html-formfu] How to remove enclosing div for a text input element

Brian Cassidy brian.cassidy at gmail.com
Wed Apr 4 14:11:52 GMT 2012

On Wed, Apr 4, 2012 at 10:30 AM, abhishek jain
<abhishek.netjain at gmail.com> wrote:
> I don’t want the default values: i just want <div class="row ">

Ah yes, it's all becoming clear now -- this is an inherent problem
with how FormFu does its rendering.

Before I try to reason this all out, I should tell you that I'm also
playing around with Twitter's Bootstrap framework [1] in conjunction
with FormFu forms -- more on that later.

So, the way I've traditionally rendered forms was by simply using the
render() method. I was always pleased with the output. But as you've
noted, the current output does not match what Bootstrap wants.

If you look closely at the Role::Element::Field source code, you'll
see this (shortened slightly to save space):

sub _render_container_class {
    my ( $self, $render ) = @_;
    my $type = $self->type;
    $type =~ s/:://g;
    append_xml_attribute( $render->{container_attributes}, 'class',
lc($type), );

This means that no matter what you put in your config for this form,
it will *always* add a class for the type of element we're dealing
with (text, for e.g.). the "del_container_attrs" method will have no
effect due to the fact that it is called when the config file is read,
which happens before you render anything.

IMO, this means that string rendering is out.

Side bar: Also, IMHO, rendering should be done via a completely
different set of modules -- which means you could do:

my $r = HTML::FormFu::Renderer::Basic->new;
print $r->render( $form );

Or write a bootstrap specific renderer for our purposes. (Note:
render() could be a simple wrapper around the above for compatibility)

Anyway, back on track. Next we try the TT rendering method.
Unfortunately, the same data is injected into the attribute list.

Thus, we have to make our own set of templates! ...and that's where
I'm at. I have a set of custom templates that *seem* to work okay with
the bootstrap framework, in my limited testing.

I would be happy to share them with you off-list if you would like.
Eventually it would be nice to put them up on github or the like for
everyone to use.

I think the takeaway here is that if you want radically customized
templates you either have to create your own rendering method which
circumvents the built-ins, or use a custom set of templates.

Hope that helps!

[1] for those of you not aware of Bootstrap:

Brian Cassidy (brian.cassidy at gmail.com)

More information about the HTML-FormFu mailing list