Op deze website gebruiken we cookies om content en advertenties te personaliseren, om functies voor social media te bieden en om ons websiteverkeer te analyseren. Ook delen we informatie over uw gebruik van onze site met onze partners voor social media, adverteren en analyse. Deze partners kunnen deze gegevens combineren met andere informatie die u aan ze heeft verstrekt of die ze hebben verzameld op basis van uw gebruik van hun services. Meer informatie.

Akkoord

Vraag & Antwoord

Webprogrammeren & scripting

[PHP] Goede nested <UL>'s parsen

Gooly
2 antwoorden
  • Ik heb een functie geschreven die een directory uitleest en alles als één lange string teruggeeft, inclusief HTML tags om er een unordered list van te maken.

    (Bewust geen array, omdat ik dan nog een tweede functie moet schrijven om deze array weer om te zetten naar HTML, dus nu gebeurt het allemaal in één keer)

    Ik wil rekening houden met eventuele subdirectories dus ik heb hem recursief gemaakt.

    Nu werkt hij prima, maar er is één probleem: In het geval van de aanwezigheid van subdirectories parsed het invalid HTML.

    Deze ziet er namelijk als volgt uit:
    [code:1:a4bf625c7a]
    <ul>
    <li>Filenaam</li>
    <li>Filenaam</li>
    <ul>
    <li>Filenaam</li>
    <li>Filenaam</li>
    </ul>
    </ul>
    [/code:1:a4bf625c7a]
    En dat is uiteraard niet goed, want dat moet zijn:
    [code:1:a4bf625c7a]
    <ul>
    <li>Filenaam</li>
    <li>Filenaam</li>
    <li><ul>
    <li>Filenaam</li>
    <li>Filenaam</li>
    </ul>
    </li>
    </ul>
    [/code:1:a4bf625c7a]
    En ik pieker me suf hoe ik dat moet herstellen, maar ik kom er niet echt uit. Dus ik vraag me af of er iemand anders een idee over heeft :-)

    De functie:
    [code:1:a4bf625c7a]
    function readfiles($dirpath)
    {

    if ($fileDirectory = opendir($dirpath)) // Open directory
    {
    $dir2html = <ul>."
    ";

    while($entryName = readdir($fileDirectory)) { // read each entry

    if(is_dir($dirpath.'/'.$entryName) && substr("$entryName", 0, 1) != ".") // Is this a directory?
    {
    $dir2html .= readfiles($dirpath.$entryName); // Yes it is! Call the function recusively and store dir content in a new array
    }
    elseif (substr("$entryName", 0, 1) != ".") // No directory, but is this a hidden file?
    {
    $dir2html .= <li>.$entryName.</li>."
    "; // A regular file and not hidden. So let's store it!
    }
    }
    $dir2html .= </ul>."
    "; // Done! Add the closing tag
    closedir($fileDirectory); // close directory

    }
    else {
    $dir2html = false; // The directory could not be opened
    }
    return $dir2html;
    }
    [/code:1:a4bf625c7a]


  • Kan je niet altijd '<li>' en '</li>' toevoegen aan $dir2html en dit dan niet meer doen als het een gewoon bestand is?

Beantwoord deze vraag

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.