What I ended up doing is adding "path" field to the table and a pretty
simple function to build the path for each category.

 

It needs to be cleaned up some for contain and cache but initial foundation
appears to be in place. So this will build out the actual path no matter how
deep the tree is.

buildPath() was just to build the initial paths for the new field in the db.
When a category is created / modified the path will be automatically created
on save.

 

Controller:

$this->Category->build_path();

 

Model:

public function build_path(){

                $categories = $this->find('all');

                                

                foreach ($categories as $k => $v){

                                $path = '';

                                $nest =
$this->getPath($v['Category']['id']);

 

                                foreach($nest as $kk => $vv){

                                                $path .=
$vv['Category']['slug'] . '/';

                                }

                $this->id = $v['Category']['id'];

                $this->saveField('path', $path);

                }

                                

}

 

And for the breadcrumbs:

<?php foreach ($path as $k['Category'] => $v):?>

                

<?php $this->Html->addCrumb($v['Category']['name'], array('controller' =>
'categories', 'action' => 'view', $v['Category']['path']));?>

 

<?php endforeach; ?>

 

So in the end I get my respective paths such as:

'all/'

'all/men/'

'all/men/shoes/'

'all/men/sweaters/'

'all/men/watches/'

'all/men/jackets/'

'all/men/jeans/'

'all/men/accessories/'

'all/women/'

'all/women/shoes/'

'all/women/accessories/'

'all/women/jackets/'

'all/women/sweaters/'

'all/women/watches/'

'all/women/jeans/'

'all/men/shirts/'

'all/children/'

'all/children/shoes/'

'all/children/jackets/'

'all/children/jeans/'

'all/children/shirts/'

'all/women/shirts/'

'all/men/jackets/leather/'

'all/men/jackets/leather/black/'

'all/men/jackets/leather/brown/'

 

Still open to other ideas if there is something better or suggestions.

 

Thanks,

 

Dave

 

 

From: [email protected] [mailto:[email protected]] On Behalf
Of Salines
Sent: Saturday, March 30, 2013 11:13 AM
To: [email protected]
Subject: Re: Product / Category Tree Help

 

Create the following db tables:

 

table nodes, where you will have a minimum of the following fields: 

id, title, path, parent_id, lft, rght, type

 

In the field: path, save the full path on which you will find your posts.

Field: type, is reserved for storing content types, eg '1 '. categories, '2
'. products,..

 

 

table closures, view presentation

 

table posts, where you store the product description, etc

 

table atachments, where you store the product pictures..

 

 

Routing like this

 

Router::connect('/:path/*', array('admin'=>false,'controller' => 'nodes',
'action' => 'show'),array('pass'=>array('path','page'),'page' =>'[0-9]+'));

 

 

Node::show();

 

            public function show() {

                        $path = func_get_args();

                        //debug($path);

                        $last_arg = end(array_values($path));

 

                        if (is_numeric($last_arg)) {

                                    $page = $last_arg;

                                    //debug($page);

                                    array_pop($path);

                                    $path = implode("/", $path);

                                    $this -> request ->
params['named']['page'] = $last_arg;

                        } else {

                                    $path = implode("/", $path);

                        }

....

}

Regards, Nikola

 

 

-- 
Like Us on FaceBook https://www.facebook.com/CakePHP
Find us on Twitter http://twitter.com/CakePHP
 
--- 
You received this message because you are subscribed to the Google Groups
"CakePHP" group.
To unsubscribe from this group and stop receiving emails from it, send an
email to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/cake-php?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.
 
 

-- 
Like Us on FaceBook https://www.facebook.com/CakePHP
Find us on Twitter http://twitter.com/CakePHP

--- 
You received this message because you are subscribed to the Google Groups 
"CakePHP" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/cake-php?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to