Re: Product / Category Tree Help

2013-03-30 Thread Salines
Hi,

You need to build and implement closure table,

look at this excellent presentation 
http://www.slideshare.net/billkarwin/models-for-hierarchical-data (page 40),

I have recently implemented similar to www.farm.ba , where I now have the 
ability to create unlimited number of levels.

Save your full path in the db, and find posts by path exmp 

for all products path is products
for mens : products/mens
for mens shoes: products/mens/shoes
for model products/mens/shoes/some-model

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 cake-php+unsubscr...@googlegroups.com.
To post to this group, send email to cake-php@googlegroups.com.
Visit this group at http://groups.google.com/group/cake-php?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.




Re: Product / Category Tree Help

2013-03-30 Thread Salines
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 cake-php+unsubscr...@googlegroups.com.
To post to this group, send email to cake-php@googlegroups.com.
Visit this group at http://groups.google.com/group/cake-php?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.




RE: Product / Category Tree Help

2013-03-30 Thread Advantage+
Thanks,

I will explore it and see how it turns out.

 

Dave

 

From: cake-php@googlegroups.com [mailto:cake-php@googlegroups.com] On Behalf
Of Salines
Sent: Saturday, March 30, 2013 11:13 AM
To: cake-php@googlegroups.com
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 cake-php+unsubscr...@googlegroups.com.
To post to this group, send email to cake-php@googlegroups.com.
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 cake-php+unsubscr...@googlegroups.com.
To post to this group, send email to cake-php@googlegroups.com.
Visit this group at http://groups.google.com/group/cake-php?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.




RE: Product / Category Tree Help

2013-03-30 Thread Advantage+
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: cake-php@googlegroups.com [mailto:cake-php@googlegroups.com] On Behalf
Of Salines
Sent: Saturday, March 30, 2013 11:13 AM
To: cake-php@googlegroups.com
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 cake-php+unsubscr...@googlegroups.com.
To post to this group, send email to cake-php@googlegroups.com.
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 cake-php+unsubscr...@googlegroups.com.
To post to this group, send email to cake-php@googlegroups.com.
Visit this group at http://groups.google.com/group/cake-php?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.