Ik ben bezig met een website, en moet nu een media-album maken. Dat is een gewone boomstructuur, en kunnen eindeloze subalbums in komen. Zoiets:
id | int
title | varchar
parent | int
Dat kan verder prima, het enige is dat ik gebruik maak van breadcrumps (home > videoalbum > album > subalbum > subsubalbum > etc.). Ik zou niet weten hoe ik kan zorgen dat ik alle parents op kan halen, iemand een idee?
Je moet dan een recursieve functie maken die steeds de parent van elke element zoekt. Op een gegeven moment kom je bij een element met parent NULL, en dat is dus de bovenste.
Ik kom er even niet uit. Ik gebruik de volgende functie:
<?php
function getParents($iAlbum)
{
$aParent = array();
$sQuery = " SELECT
title,
parent
FROM
c_album
WHERE
id = '" . $iAlbum . "'";
$result = mysql_query($sQuery);
if ($result && mysql_num_rows($result))
{
$row = mysql_fetch_assoc($result);
$aParent[] = array
(
'id' => $iAlbum,
'title' => $row['title']
);
$aParent[] = getParents($row['parent']);
return $aParent;
}
else
{
return false;
}
}
?>
En nu is dit het resultaat:
<?php
Array
(
[0] => Array
(
[id] => 4
[title] => test4
)
Euhm, ik weet het niet zeker, maar kan ik die manier van Herjan wel gebruiken aangezien ik onderaan begin? Ik kan er zelf even niet op komen hoe dat zou moeten...
Dan wil ik dus als ik bijvoorbeeld in album 4 zit, een array krijgen als:
<?php
Array
(
[3] => 'Test3',
[2] => 'Test2',
[1] => 'Test1'
)
?>
De volgorde mag ook andersom, dat maakt niet uit.
Wil iemand a.u.b. even meedenken?
Edit:
Ik heb het inmiddels:
<?php
function getParents($iAlbum)
{
$aParent = array();
$sQuery = " SELECT
title,
parent
FROM
c_album
WHERE
id = '" . $iAlbum . "'";
$result = mysql_query($sQuery);
if ($result && mysql_num_rows($result))
{
$row = mysql_fetch_assoc($result);
$aParent[] = array
(
'id' => $iAlbum,
'title' => $row['title']
);
$aTParent = getParents($row['parent']);
if ($aTParent)
{
foreach ($aTParent as $aTArray)
{
$aParent[] = array
(
'id' => $aTArray['id'],
'title' => $aTArray['title']
);
}
}
return $aParent;
}
else
{
return false;
}
}
?>
Maar als jullie weten hoe dit op een nettere manier kan, dan hoor ik het graag.