Avatar billede Slettet bruger
04. marts 2003 - 10:01 Der er 6 kommentarer og
1 løsning

Udskrive sitemap med værdier fra DB

Hej!

Jeg prøver at lave en funktion der kan udskrive et sitemap, med værdier fra en database.

Alle sider har en plads i databasen, med en anden side som ejerid.

Eksempevis kunne den se således ud:

id    |    overskrift    |    ejerid
1      |    Side 1              0
2      |    Side 2              0
3      |    Underside 1.1      1
4      |    Underside 1.2      1
5      |    Underside 1.3      1
6      |    Underside 2.1      2
7      |    Underside 2.2      2
8      |    Underside 2.3      2
9      |    Underside 2.3.1    8

Det sitemap jeg vil udskrive skal så se sådan her ud:

Side 1
Underside 1.1
Underside 1.2
Underside 1.3
Side 2
Underside 2.1
Underside 2.2
Underside 2.3
  Underside 2.3.1

Foreløbig har jeg indlæst sidernes id, ejerid og titel i 3 arrays, men hvordan løber jeg dem igennem og sortere dem rigtigt?

$sql = "SELECT id, overskrift, ejerid FROM kategorier ORDER BY ejerid,id";
$result = mysql_query($sql) or die(mysql_error());

while($row = mysql_fetch_array($result)) {
$id_arr = $id_arr . ',' . $row['id'];
$overskrift_arr = $overskrift_arr . ',' . $row['overskrift'];
$ejerid_arr = $ejerid_arr . ',' . $row['ejerid'];
}

$id_arr = explode(',', $id_arr);
$overskrift_arr = explode(',', $overskrift_arr);
$ejerid_arr = explode(',', $ejerid_arr);
Avatar billede Slettet bruger
04. marts 2003 - 13:56 #1
Håber det her script kan hjælpe dig.... har dog udeladt databasekaldene! Håber du kan regne dem ud... ellers må du lige råbe højt!

<?php
ini_set("max_execution_time", 10);
$sites[]=makesite(0,"Forside");
$sites[]=makesite(1,"1", 0);
$sites[]=makesite(2,"2", 0);
$sites[]=makesite(3,"1.1", 1);
$sites[]=makesite(4,"1.2", 1);
$sites[]=makesite(5,"1.3", 1);
$sites[]=makesite(6,"2.1", 2);
$sites[]=makesite(7,"2.2", 2);
$sites[]=makesite(8,"2.3", 2);
$sites[]=makesite(9,"2.3.1", 8);

$structure[0] = array(1,2);
$structure[1] = array(3,4,5);
$structure[2] = array(6,7,8);
$structure[8] = array(9);

sitemap(0, 0);

function sitemap($position=0, $level)
{
    global $sites, $structure;
    if(is_array($structure[$position]))
    {
        foreach($structure[$position] as $value)
        {
            printsite($sites[$value]["name"], $level);
            $levelnew = $level+1;
            sitemap1($sites[$value][id], $levelnew);
        }
    }
}

function sitemap1($position=0, $level)
{
    global $sites, $structure;
    if(is_array($structure[$position]))
    {
        foreach($structure[$position] as $value)
        {
            printsite($sites[$value]["name"], $level);
            $levelnew = $level+1;
            sitemap($sites[$value][id], $levelnew);
        }
    }
}

function printsite($name, $level)
{
    for($i=0;$i<$level;$i++)
    {
        echo "&nbsp;&nbsp;&nbsp;";
    }
    echo $name."<br>";
}
function makesite($id,$name, $owner="")
{
    if($owner!="")
    {
        return array(    "id" => $id,
                "name"=>$name,
                "owner"=>$owner);
    }
    else
    {
        return array(    "id" => $id,
                "name"=>$name);
    }
}
?>
Avatar billede Slettet bruger
04. marts 2003 - 14:54 #2
Hej regin!

Det var præcist sådan jeg forestillede mig det, og jeg fik da også regnet databasekaldet ud ;)

Til nysgerrige sjæle der måtte have gavn af dette fremover ser det sådan her ud:

ini_set("max_execution_time", 10);

$sites[]=makesite(0,"Forside");

$sql = "SELECT id, overskrift, ejerid FROM kategorier ORDER BY ejerid,id";
$result = mysql_query($sql) or die(mysql_error());

while($row = mysql_fetch_array($result)) {
$sites[] = makesite($row['id'], $row['overskrift'], $row['ejerid']);
$structure[$row['ejerid']][] = $row['id'];
}

Tusind tak for hjælpen, hvis du lægger et svar kan du få dine velfortjente point :)
Avatar billede Slettet bruger
04. marts 2003 - 15:10 #3
nåh ja, der var lige et lille spm...

Hvordan får jeg mit id med, så jeg kan lave det til links?

(Det burde jeg have skrevet fra starten) :/
Avatar billede Slettet bruger
04. marts 2003 - 15:10 #4
Smider lige et svar!
Lige nogle små rettelser

1: ini_set("max_execution_time", 10);
var kun for at undgå uendelige løkker for en sikkerhedsskyld!

2: Slet "function sitemap1()" og skift "function sitemap" ud med nedenstående
function sitemap($position=0, $level)
{
    global $sites, $structure;
    if(is_array($structure[$position]))
    {
        foreach($structure[$position] as $value)
        {
            printsite($sites[$value]["name"], $level);
            $levelnew = $level+1;
            sitemap($sites[$value][id], $levelnew);
        }
    }
}

3: Din løkke skal ændres til
while($row = mysql_fetch_array($result)) {
$sites[$row['id']] = makesite($row['id'], $row['overskrift'], $row['ejerid']);
$structure[$row['ejerid']][] = $row['id'];
}
For en sikkerhedsskyld!
Avatar billede Slettet bruger
04. marts 2003 - 15:14 #5
For links:

function printsite($id, $level)
{
    global $sites;
    for($i=0;$i<$level;$i++)
    {
        echo "&nbsp;&nbsp;&nbsp;";
    }
    echo "<a href=\"sidenavn.php?id=".$id."\">".$sites[$id][name]."</a><br>";
}

function sitemap($position=0, $level)
{
    global $sites, $structure;
    if(is_array($structure[$position]))
    {
        foreach($structure[$position] as $value)
        {
            printsite($value, $level);
            $levelnew = $level+1;
            sitemap1$sites[$value][id], $levelnew);
        }
    }
}
Avatar billede Slettet bruger
04. marts 2003 - 15:15 #6
Even!
function sitemap($position=0, $level)
{
    global $sites, $structure;
    if(is_array($structure[$position]))
    {
        foreach($structure[$position] as $value)
        {
            printsite($value, $level);
            $levelnew = $level+1;
            sitemap($sites[$value][id], $levelnew);
        }
    }
}
Avatar billede Slettet bruger
04. marts 2003 - 15:18 #7
Tusind tak, nu virker det!

Den færdige kode blev da meget pæn, men jeg er absolut ikke hård nok til alle de arrays til selv at regne sådan noget ud.

Det var slemt nok at lave sådan en sti med Forside >> Højttalere >> Sorte >> Baghøjttalere

;)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester