Re: template toolkit .. one more kwestion solved

2001-01-29 Thread Robin Szemeti

On Mon, 29 Jan 2001, you wrote:

  Sounds like your dereferencing function may be returning a SCALAR instead
  of an ARRAY when there's only one result?
 
 could be ... I had :
 
 my($data)=$sth-fetchall_arrayref;
 return @{$data};
 
 which I thought should return a flat list of references to arrays ... ??
 nope?

so .. after a quick fiddle .. 

It seem T::T automagically assumes that if you pass it a reference to
something then you probably didn;t want that, you prolly wanted the thingy
itself so it dereferences it for you.. it will only do this down one
level.

so by passing it a list of references it sees a list .. does a foreach
down them and then sees what it gets (in this case an array ref ) .. it
dereferences that and bingo you can now access the row of stuff.

however when the list jsut contains 1 item, it sees a reference to an
array ( whicj is the row) and then proceeds to do a foreach over the
elements of the row ..

by simply not passing it the thing in list format  but passing the plain
reference (ie return $data instead of @{$data}) it always gets an arrayref
and works for both cases of 1 or n items in the array.

solved .. it just took me a while to twig what was going on.

-- 
Robin Szemeti

The box said "requires windows 95 or better"
So I installed Linux!



Re: template toolkit .. one more kwestion solved

2001-01-29 Thread Paul Makepeace

On Mon, Jan 29, 2001 at 05:31:52PM +0100, Philip Newton wrote:
 Reminds me of fits I had when doing Vignette/Tcl with lists of lists that I
 passed to another template with HTTP POST. When the list of lists contained
 only one element, it didn't wrap that list in extra {} so the foreach say a
 list of lists all right -- but the "sublists" were only one element long
 (since {} are optional around lists if there are not spaces). Caused me a

Try creating a JavaScript array of length one whose first
element is initialised to 1.  Aaargh. [1]

Paul


[1]

# These numbers get turned into a JavaScript array later on that
# looks like new Array (1,1,0); Owing to JavaScript1.0 braindeadedness
# new Array (1) is interpreted as "created a one element list" not
# "create a one element list with [0]=1". However this is achievable
# if the number is given as a string like new Array("1");

@time_names = sort {$a = $b} keys %time_names;
foreach my $i_list (keys %time_cache) {
$time_cache{$i_list} =
join ',', map {$time_cache{$i_list}{$_} ? 1 : 0} @time_names;
$time_cache{$i_list} =~ s/^(.)$/"$1"/;
}