function makeMenu($parent = 0)
{
$query = mysql_query("SELECT PageID, PageName FROM Pages WHERE ParentID ='".$parent."'") or die(mysql_error());
if (mysql_num_rows($query) > 0)
{
$list = "<ul>";
while ($res = mysql_fetch_assoc($query))
{
$list .= "<li>".$res['PageName'];
$list .= makeMenu($res['PageID']);
$list .= "</li>";
}
$list .= "</ul>";
}
else
{
$list = "<p>Inga rader kunde hämtas</p>";
}
return $list;
}
Du kan få en knuff i rätt riktning. Låt 0 betyda grundnivå, i stället för NULL alltså. Nu får du lägga in <a href=""></a> där de ska vara, jag orkade inte tänka ut det på rak arm. *Funderar* Det kan bli lite trixigt om du vill att grundnivåerna ska vara klickbara. Då får du lägga in lite if-satser i koden. Lek med den och se vad du får fram.
Tackar .. just den biten har jag fått att fungera men jag skulle vilja ha sqlfrågan. Har testar denna men får inte riktigt ihop det
CREATE PROC dbo.ShowHierarchy
(
@Root int
)
AS
BEGIN
SET NOCOUNT ON
DECLARE @pageID int, @EmpName varchar(30)
SET @EmpName = (SELECT menutitle FROM dbo.pages WHERE pageid = @Root)
SET @pageID = (SELECT MIN(pageid) FROM dbo.pages WHERE pageid = @Root)
WHILE @pageID IS NOT NULL
BEGIN
EXEC dbo.ShowHierarchy @pageID
SET @pageID = (SELECT MIN(pageid) FROM dbo.pages WHERE parentid = @Root AND parentid \> @pageID)
END
Eh... fast "just den biten" gör allt du behöver för att skriva ut en lista till webläsaren. Gör om min kod till asp eller vad det är du kör så är det bara att sql-fråga efter parent, id och namn från dbo.pages så ska du se att det löser sig.
Så här fick det bli, tack för hjälpen. Du fick mig i rätt riktning
Private Sub IterateThroughParentNodes(ByVal SelectedPageID As Integer)
dt = GetListForSiteMap() '//Hämtar en datatable
Dim ParentRows() As DataRow = dt.Select("[Parentid] is null ")
For Each dRow As DataRow In ParentRows
If CInt(dRow("pageid")) = SelectedPageID Then
'//Om topnoden är den valda sidan
IsParent = True
SelectedParentNodeID = dRow("pageid")
End If
sb.Append("<b>" & dRow("menutitle") & "</b><br>" & vbCrLf)
IterateThroughChildrenNodes(dRow("pageid"), SelectedPageID)
If ISParent Then
SelectedParentNodeID = dRow("pageid")
End If
Next
Me.Literal1.Text = sb.ToString
End Sub
Private Sub IterateThroughChildrenNodes(ByVal ParentID As Integer, ByVal SelectedPageID As Integer)
Dim rootRows() As DataRow = dt.Select("[Parentid] = " & ParentID & "")
For Each dr As DataRow In rootRows
If CInt(dr("pageid")) = SelectedPageID Then
IsParent = True
End If
sb.Append(dr("menutitle"))
IterateThroughChildrenNodes(dr("pageid"), SelectedPageID)
Next
End Sub
Har du någon backup, ifall det inte går att få kontakt med databasen? Testa genom att köra meny-scriptet utan kontakt med databasen. Jag gjorde själv en meny som fick ligga helt och hållet i en sql-tabell. Webbhotellet är helt okej, men ett par tre gånger om året strular det med kontakten. Vad jag kan se så har du inget stop vad fel, så din sida visas nog, men utan meny. Besökarna kommer att bli förvirrade om det strular med databasen.