[Templates] Auto-increment?
Roderick A. Anderson
raanders@acm.org
Tue, 12 Sep 2006 14:00:39 -0700
Thanks Josh and Paul. Looking at these solutions I think I'll stick
with the, [% tabidx = tabidx + 1 %] plus [% tabidx %] method I'm
currently using. Looking forward to TT3 and unable to take the time to
do your solutions.
Rod
--
Josh Rosenbaum wrote:
> Roderick A. Anderson wrote:
>
>> Is there a method to increment a value and have it return that value?
>> I've been through the Badger Book but didn't quite see what I was
>> needing though MACRO seemed close. This is for a View for a Catalyst
>> based application if that makes a difference.
>>
>> I'm looking to accomplish something line this.
>>
>> [% tabidx = 81 %]
>>
>> <input name="DoIt" tabindex="[% tabidx++ %]"
>> type="submit" />
>> <input name="TryIt" tabindex="[% tabidx++ %]"
>> type="submit" />
>> <input name="IGiveUp" tabindex="[% tabidx++ %]"
>> type="reset" />
>>
>> It didn't work when I tried it. I have ended up doing this. ( It just
>> seems WRONG :-)
>>
>> [% tabidx = 81 %]
>>
>> <input name="DoIt" tabindex="[% tabidx %]"
>> type="submit" />
>> [% tabidx = tabidx + 1 %]
>> <input name="TryIt" tabindex="[% tabidx %]"
>> type="submit" />
>> [% tabidx = tabidx + 1 %]
>> <input name="IGiveUp" tabindex="[% tabidx %]"
>> type="reset" />
>
>
>
> Rod,
>
> I do not believe there is a way to do this, although you could do:
> [% tabidx; tabidx = tabidx + 1 %]
>
> Another idea might be to make tabidx a list ref, and then add a list
> virtual method.
>
> [% tabidx = [81] %]
> [% tabidx.inc() %] <-- will return 81 for display, and increment the
> value to 82
>
> $Template::Stash::LIST_OPS->{ inc } = sub {
> my $list = shift;
> return $list->[0]++;
> };
>
> Might want to call that .pinc for "post increment" since you want it
> done after the fact. A .inc() should really return an already
> incremented value probably.
>
> I would've suggested using a scalar here instead, but I don't think
> scalars are passed by ref, so I don't think your value would ever be
> updated.
>
> -- Josh
>