Jump to content

creating categories inside a combo box


karthikanov24

Recommended Posts

Hi,

In the following codes,i could not understand these lines..

 

$categories[$id] = array('name' => $name, 'children' => array());

$categories[$parentId]['children'][] = array('id' => $id, 'name' => $name);

$name    = $value['name'];

$children = $value['children'];

 

Could u explain me clearly with an example.....?

 

function buildCategoryOptions($catId = 0)
{
$sql = "SELECT cat_id, cat_parent_id, cat_name
		FROM tbl_category
		ORDER BY cat_id";
$result = dbQuery($sql) or die('Cannot get Product. ' . mysql_error());

$categories = array();
while($row = dbFetchArray($result)) {
	list($id, $parentId, $name) = $row;

	if ($parentId == 0) {
		// we create a new array for each top level categories
		$categories[$id] = array('name' => $name, 'children' => array());
	} else {
		// the child categories are put int the parent category's array
		$categories[$parentId]['children'][] = array('id' => $id, 'name' => $name);	
	}
}	

// build combo box options
$list = '';
foreach ($categories as $key => $value) {
	$name     = $value['name'];
	$children = $value['children'];

	$list .= "<option value=\"$key\"";
	if ($key == $catId) {
		$list.= " selected";
	}

Link to comment
Share on other sites

if ($parentId == 0) {
    // we create a new array for each top level categories
    $categories[$id] = array('name' => $name, 'children' => array());
}

 

This code creates an array for every top-level category (every record in your database that a 0 as a parent_id). Which will give you something like:

 

Cat 1
Cat 2
Cat 3

 

else {
    // the child categories are put int the parent category's array
    $categories[$parentId]['children'][] = array('id' => $id, 'name' => $name);   
}

 

This code retrieves the earlier set $id (== $parentId) and fills the 'children' => array() part with the $id and name of the child categories. Which will give you something like:

 

Cat 1
Cat 1.1
Cat 1.2
Cat 1.3
Cat 2
..

 

But it is also possible that a child becomes a parent like:

 

Cat 1 (parent of 1.1 and ancestor of 1.1.1)
Cat 1.1 (child of 1)
Cat 1.1.1 (child of 1.1 and descendant of 1)

Link to comment
Share on other sites

foreach ($categories as $key => $value) {

$name    = $value['name'];

$children = $value['children'];

 

$name is the name of the category and $children are the children of the parent category presumably they afterwards create another foreach loop going over the children categories.

- write a query to fetch all categories and their id

- in html use <optgroup>code to display categories here</optgroup>...after you display categories, inside optgroup write a query to fetch products related to that category..and use <option>//code to display products</option>

Link to comment
Share on other sites

hi

if i am typing the following codes to see the array output..

print_r $categories;

print_r $categories[$id];

 

at the above posted codings as like this...i am not getting the out put..so how can i see those array output..?

 

if ($parentId == 0) {
		// we create a new array for each top level categories
		$categories[$id] = array('name' => $name, 'children' => array());
	} else {
		// the child categories are put int the parent category's array
		$categories[$parentId]['children'][] = array('id' => $id, 'name' => $name);	
	}
}	
print_r $categories;
print_r $categories[$id];

 

 

Link to comment
Share on other sites

hi

if i am trying to print this

print_r ($categories[$parentId]['children']);

in the  above posted code..i get the output as:

 

Array ( [0] => Array ( [id] => 16 [name] => Naruto ) [1] => Array ( [id] => 17 [name] => Hunter X Hunter ) ) 

 

 

Here 'Naruto' and 'Hunter x Hunter'  are the two sub categories(children) of the 'Manga' category

 

But I have other 2 sub categories(children) 'volvo','mercedes benz' for cars(first level category) which is not displayed here..when running the file.

 

can u say me the reason and how to display it....

 

Link to comment
Share on other sites

It contains 'children' if you would print $categories you would get:

 

Array (
    $parentId => Array (
        'children' => Array (
            0 => Array ( 'id' => $id, 'name' => $name),
            1 => Array ( 'id' => $id, 'name' => $name),
            ..
        )
    )
)

 

I used $parentId, $id and $name these would translate to what they hold at that time ofcourse.

Link to comment
Share on other sites

hi

In the following codes,

 

1.I tried to echo $children;below the following line of code

$children=$value['children'];

echo $children;

  it gives output as"array array".whats the reason?

  How to see the output of $children ?

 

if ($parentId == 0) {
		// we create a new array for   each top level categories
		$categories[$id] = array('name' => $name, 'children' => array());
	} else {
		// the child categories are put int the parent category's array
		$categories[$parentId]['children'][] = array('id' => $id, 'name' => 

$name);	
	}
}	

// build combo box options
$list = '';
foreach ($categories as $key => $value) {
	$name     = $value['name'];
	$children = $value['children'];

	$list .= "<option value=\"$key\"";
	if ($key == $catId) {
		$list.= " selected";
	}

	$list .= ">$name</option>\r\n";

	foreach ($children as $child) {
		$list .= "<option value=\"{$child['id']}\"";
		if ($child['id'] == $catId) {
			$list.= " selected";
		}

		$list .= ">  {$child['name']}</option>\r\n";
	}
}

return $list;
}

 

2. <optgroup>and </optgroup> displays -cat1 and cat 2

How the children categories cat.1 ,cat1.2,cat  .1,cat2.2)  in <option></option> is matched to categories cat 1  and cat2 in the foreach loop.?

Link to comment
Share on other sites

hi

in the above posting,when i printed $categories using,

print_r ($categories);

I get output as,

 

Array ( [12] => Array ( [name] => Cars [children] => Array ( [0] => Array ( [id] => 14 [name] => Volvo ) [1] => Array ( [id] => 15 [name] => Mercedes-Benz ) ) ) [13] => Array ( [name] => Manga [children] => Array ( [0] => Array ( [id] => 16 [name] => Naruto ) [1] => Array ( [id] => 17 [name] => Hunter X Hunter ) ) ) )

 

But when i printed the key of [name] which is 12 using

print_r ($key[name]);

and value of 12 which is [name],[children], etc..using

print_r ($value[12]);

 

i am not getting the output..

So how can i get above said outputs..what is the codings..?

Thanks in advance..

 

 

 

 

Link to comment
Share on other sites

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.