[PHPTAL] PHPTAL_RepeatController and PDOStatement
Iván -DrSlump- Montes
drslump at pollinimini.net
Sat Feb 2 12:15:24 CET 2008
As far as I know a PDOStatement object implements the Countable
interface for the number of columns not the rows. This means that the
repeat controller will give a 'wrong' value for the 'end' attribute in
the loop.
To solve it either you need to modify the RepeatController to detect
PDOStatement objects and fetch all the rows at instantiation time and
count them, or you manually preprocess the statement and convert it to
an array or an iterable object before using it.
Another option would be to rewrite the Repeat attribute to only work
with and Iterator object (using ArrayObject for arrays) and change the
logic it uses to detect the last item in the set by pre-fetching the
next item at the end of the loop and checking its validity.
Iván
On Feb 1, 2008 2:12 PM, Julien Fredon <julien.fredon at imaginance.com> wrote:
>
> Hello phptal users,
>
> I have a problem with PHPTAL and PDO (www.php.net/pdo) when i use
> tal:repeat.
> PHPTAL_RepeatController seems angry with PDOStatement.
>
> PDOStatement is not "Iterator" but it's "Traversable"
> I changed the following code (RepeatController line 58) :
>
> if ($source instanceof IteratorAggregate) $source =
> $source->getIterator();
> else if (!is_array($source) && !($source instanceof Iterator))
> $source = array();
>
> with
>
> if ($source instanceof IteratorAggregate) $source =
> $source->getIterator();
> else if (!is_array($source) && !($source instanceof Iterator) &&
> !($source instanceof Traversable)) $source = array();
>
> but i'm not sure that it's the good or the best solution.
>
>
>
> --
>
>
>
> Julien
>
> _______________________________________________
> PHPTAL mailing list
> PHPTAL at lists.motion-twin.com
> http://lists.motion-twin.com/mailman/listinfo/phptal
>
>
More information about the PHPTAL
mailing list