What is it?
Nested sets or Nested Set Model is a way to effectively store hierarchical data in a relational table. The main features are:
- Generation of select elements for forms
- Generation of lists (ul) consistent with Twitters Bootstrap framework
- Generation of raw nested (multidimensional) arrays so everyone can extend the script if needed without much trouble
As an bonus you get a Database class which makes use of PHP’s PDO for communication with the database. You can
easily get rid of it and implement your own database class.
Example #1: Creating nodes
The following code
// $root stores the id of the new node
$root = Mptt::factory()->create_root('Root node');
Mptt::factory()->create_child('Child node 1', $root);
Mptt::factory()->create_child('Child node 2', $root);
$child = Mptt::factory()->create_child('Child node 3', $root);
Mptt::factory()->create_child('Child node 4', $root);
Mptt::factory()->create_child('Child node 5', $root);
$sibling = Mptt::factory()->create_child('Child of child', $child);
Mptt::factory()->create_sibling('Sibling of child', $sibling);
Please analyze the code carefully…it will generate a data structure similar to the one on the screenshot bellow:
Example #2: Generating form elements
To make a select element simply pass the id of the desired node to the factory method and then call as_select() on the returned object
// Calling as_select will generate a valid select element
$root = 1;
echo Mptt::factory($root)->as_select('node_id');

Example #3: Getting the path of a node
// Calling get_path will generate a path to the desired node echo Mptt::factory()->get_path(7);
You can than print the path with a simple loop.
Array
(
[1] => Array
(
[id] => 1
[title] => Root node
[lft] => 1
[rgt] => 16
)
[4] => Array
(
[id] => 4
[title] => Child node 3
[lft] => 6
[rgt] => 11
)
[7] => Array
(
[id] => 7
[title] => Child of child
[lft] => 7
[rgt] => 8
)
)
Example #4: Deleting
To delete a node and it’s chidlren simply call the delete method and pass the id of the node you want to delete to it
// don't forget to do some validation after you get the id $node_id = $_POST['node_id']; Mptt::factory()->delete_id($node_id); ?>
Example #4: Check if node is leaf
A leaf node is a node which has no child nodes. Checking this factor can be usefull if you want the user to specify exactly what’s requested from him.
// don't forget to do some validation after you get the id
$node_id = $_POST['node_id'];
if( Mptt::factory()->is_leaf($node_id) )
{
// it is leaf ... do whatever you want
}
else
{
// it has child nodes, show an error message
}
Example #4: Configuration
There is a number of things you can do to make the returned list more suited for your purposes. Please take a look at the config parameters bellow:
echo Mptt::factory(array('only_leaf' => TRUE, 'limit' => 5))->as_select('node_id');
List of configuration parameters, their description, default and expected values
| key | default | type | description |
| only_leaf | false | boolean (true/false) | Select only leaf nodes from the database? |
| only_leaf_select | false | boolean (true/false) | Make nodes with children unselectable when using as_select()? |
| limit | NULL | integer | Limit the number of returned nodes (only usefull in combination with the only_leaf parameter) |
| indenter | ` `(four spaces) | string | The bit of text that makes depth of the node visible in select elements |
| prefix_leaf | ⊢ | string | Sign that is prepended to the title of leaf items |
| prefix_non_leaf | ∟ | string | Sign that is prepended to the title of non-leaf items |
Complete list of functions and their description
| as_array() | Returns raw array |
| as_html() | Creates a multi-level menu compatible with the Bootstrap css framework |
| as_select() | Creates a HTML form select element of the whole tree |
| create_child() | Creates a new child node of the node with the given id |
| create_root() | Creates a root node |
| create_sibling() | Creates a new sibling next to the given node |
| delete_node() | Deletes a node and all it’s children |
| factory() | Sets config and returns Mptt object |
| get_items() | Gets items depending on provided criteria and stores them in a local array |
| get_node() | Gets an object with all data of a node |
| get_path() | Gets a array containing the path to defined node |
| is_descendant() | Checks whether the node is a descendant of another |
| is_leaf() | Checks whether the node is leaf or not (A node is leaf when it has no child nodes) |
Questions
If you have any questions before buying, please don’t hesitate to send me contact me.

