after setting $galleries in my view with 'findAllThreaded() <?php foreach ($galleries as $row): ?> <tr> <td style="text-align:left;"><?php echo $html->link($row['Gallery']['title'],'/galleries/edit/' . $row['Gallery']['id'])?></td> <td> _root </td> </tr>
<?php if(!empty($row['children'])): foreach ($row['children'] as $subGal): ?> <tr> <td style="text-align:left;margin-left:20px;"><?php echo $html->link($subGal['Gallery']['title'],'/galleries/edit/' . $subGal['Gallery']['id'])?></td> <td> <?php echo $subGal['Galleries']['title']; ?> </td> </tr> <?php endforeach; endif; ?> <?php endforeach; ?> Since I have only one level, it's all I need. Any suggestions from the hardcore coders, to make a n-level loop ? Spark On 6/15/06, Olivier Percebois-Garve <[EMAIL PROTECTED]> wrote: > > How do you use the array returned by $this->Model->findAllThreaded() ? > > > DJ Spark wrote: > I use this in my Gallery Model: > > var $hasMany = array( > 'Galleries' => array( > 'className' => 'Gallery', > 'order' => 'Galleries.ord ASC', > 'foreignKey' => 'parent_id')); > var $belongsTo = array( > 'Galleries' => array( > 'className' => 'Gallery', > 'order' => 'Galleries.ord ASC', > 'foreignKey' => 'parent_id')); > > First, note the 'Galleries' (you change that association name for any > other, just dont use the model name). Second, you might want to know > more about $this->Model->findAllThreaded() . It returns a *VERY* > useful array , with ['child'] and everything. I *heart* CakePHP :) > > spakr > > > On 6/15/06, I. E. Smith-Heisters <[EMAIL PROTECTED]> wrote: > > > Hi all, > > I've found a few threads on related subjects, but none of them offer a > solution: > > http://groups.google.com/group/cake-php/browse_thread/thread/8ad0ebbb9171b5a4/82f28d0b433191be?q=finderSQL&rnum=7#82f28d0b433191be > http://groups.google.com/group/cake-php/browse_thread/thread/ed9f11b62fd2d223/c46ddbf9860e0be6?q=finderSQL&rnum=3#c46ddbf9860e0be6 > http://groups.google.com/group/cake-php/browse_frm/thread/aba68ec53a2ae064/9988348a93f13d1e#9988348a93f13d1e > > I have a table that looks like this: > > +-----------+------------------+------+-----+---------+----------------+ > | Field | Type | Null | Key | Default | Extra > | > +-----------+------------------+------+-----+---------+----------------+ > | id | int(10) unsigned | | PRI | NULL | auto_increment > | > | name | varchar(255) | YES | | NULL | > | > | ui_name | varchar(50) | | | | > | > | parent_id | int(10) unsigned | YES | | NULL | > | > +-----------+------------------+------+-----+---------+----------------+ > > which represents nested menus. I would think it would be trivial to > allow each MenuItem to have children (whose parent_id is equal to its > id) by using hasMany. > > So, first I tried this: > class MenuItem extends AppModel { > var $name = 'MenuItem'; > var $useTable = 'tester'; > > var $validate = array ( > 'name' => VALID_NOT_EMPTY, > ); > var $hasMany = 'MenuItem'; > } > > but that just overwrites the main node, > $this->MenuItem->read(): > array(1) { > ["MenuItem"]=> > array(0) { > } > } > > so I tried something like this instead: > > var $hasMany = array ( > 'child' => array ( > 'className' => 'MenuItem', > ) > ); > > which at least doesn't overwrite the main object, but still doesn't > populate the child array: > array(2) { > ["MenuItem"]=> > array(4) { > ["id"]=> > string(1) "4" > ["name"]=> > string(9) "community" > ["ui_name"]=> > string(9) "Community" > ["parent_id"]=> > NULL > } > ["child"]=> > array(0) { > } > } > So then I tried a finderSQL parameter > > var $hasMany = array ( > 'child' => array ( > 'className' => 'MenuItem', > 'finderSQL' => 'SELECT * FROM tester AS one LEFT JOIN tester AS two > ON one.id = two.parent_id' > ) > ); > > but that has the same output on read() as the attempt with finderSQL > undefined. Unfortunately, I haven't found a single successful example > of using finderSQL, so it's hard to tell what sort of output the SQL > statement should have. I just grabbed and modded this statement from > one of the other threads I mentioned. > > Okay, so then there's findAllThreaded and guiListTree. The former seems > to work (albeit it's kind of uncontrollable), but I really think this > part of the model belongs in the model definition.. The latter, > guiListTree doesn't seem to work as expected and is marked as > deprecated in the documentation.. > > So, does anyone have any suggestions for building a tree out of a > self-joining table? > > Thanks much, > Ian Smith-Heisters > > > > > > > > > > > -- [web] http://synapsisdi.com.br [livesets] http://djspark.com.br --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Cake PHP" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/cake-php -~----------~----~----~----~------~----~------~--~---
