Skip to content

Instantly share code, notes, and snippets.

@LaffinToo
Created December 31, 2011 08:05
Show Gist options
  • Save LaffinToo/1543326 to your computer and use it in GitHub Desktop.
Save LaffinToo/1543326 to your computer and use it in GitHub Desktop.
Simple Breadcrumb system - dynamicly built, Use with Cache
<?php
if(!$db=sqlite_open(':memory:'))
die('DB Open failure');
sqlite_exec('CREATE TABLE category(id INTEGER PRIMARY KEY, Name TEXT, Parent Integer)',$db);
$data =array(
'Family/Events/Birthdays',
'Family/Events/Holidays/Halloween',
'Family/Events/Holidays/Thanksgiving',
'Family/Events/Holidays/Christmas',
'Family/Relatives',
'Friends/Family',
'Friends/Events'
);
foreach($data as $tree)
{
$cats=explode('/',$tree);
$Parent=0;
foreach($cats as $cat)
{
$res=sqlite_query($db,'SELECT id FROM category WHERE Name=\''. sqlite_escape_string($cat) .'\' AND Parent='. $Parent);
if(sqlite_num_rows($res))
{
$Parent=sqlite_fetch_single($res);
} else {
sqlite_exec($db,$sql='INSERT INTO category (Name,Parent) VALUES (\''. sqlite_escape_string($cat) .'\','. $Parent .')',$err) or die("<br />$err<br />$sql");
$Parent=sqlite_last_insert_rowid($db);
}
}
}
$res=sqlite_query($db,'SELECT * FROM category');
$cats=array();
while($row=sqlite_fetch_array($res,SQLITE_NUM))
{
echo print_r($row,true).'<br />'.PHP_EOL;
$cats[$row[0]] = array($row[1],$row[2]);
}
$breadcrumbs=array();
foreach($cats as $idx=>$cat)
{
$bc=array();
$pcat=$cat;
$ok=true;
do
{
$bc[]=$pcat;
if($pcat[1])
$pcat=$cats[$pcat[1]];
else
$ok=FALSE;
} while($ok);
$breadcrumbs[$idx]=array_reverse($bc);
}
foreach($breadcrumbs as $bc)
{
$bcc = count($bc);
for($i=0;$i<$bcc;$i++)
{
echo $bc[$i][0];
if(($i+1)<$bcc) echo ' -> ';
}
echo '<br />'.PHP_EOL;
}
?>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment