Hallo, liebe PHPler!
Aus einem JavaScript-Code möchte ich mittels PHP HTML-Code machen. Der Ursprung des JavaScript-Codes ist ein Modul in Joomla. Dieses Modul erzeugt eine Navigation in JavaScript. Ich möchte die Navigation jedoch gerne als HTML-Liste.
Mein Problem ist hierbei, die Navigationspunkte in der HTML-Liste korrekt zu verschachteln und zu hierarchisieren.
Ausgangscode (Beispiel):
Der relevante Inhalt der Klammern hat folgende Bedeutung:
ID der Kategorie, ID der übergeordneten Kategorie, Name der Kategorie, URL der Kategorie
Im Prinzip ist also die Info vorhanden, welche Kategorie welcher anderen Kategorie untergeordnet ist.
Der Code des obigen Beispiels sollte in HTML so aussehen:
(beachte auch die Verschachtelung und die alphabetische Sortierung; die URLs lasse ich der Übersichtlichkeit halber mal weg):
Bisher kann ich die JavaScript-Zeilen schon in eine HTML-Liste umwandeln. Aber eine Logik für die korrekte Verschachtelung und Sortierung bekomme ich nicht hin.
Mein bisheriger Ansatz sieht wie folgt aus:
Konnte ich mein Problem einigermaßen verdeutlichen?
(PHP-Freaks bekommen vielleicht den einen oder anderen Anfall bei meinem laienhaften Programmierstil. Aber das ist halt meine bisherige, mühsam erarbeitete, wahrscheinlich umständliche Programmierlogik. Vereinfachungen sind natürlich auch willkommen.)
Herzliche Grüße
Marcel
Aus einem JavaScript-Code möchte ich mittels PHP HTML-Code machen. Der Ursprung des JavaScript-Codes ist ein Modul in Joomla. Dieses Modul erzeugt eine Navigation in JavaScript. Ich möchte die Navigation jedoch gerne als HTML-Liste.
Mein Problem ist hierbei, die Navigationspunkte in der HTML-Liste korrekt zu verschachteln und zu hierarchisieren.
Ausgangscode (Beispiel):
Code:
jgTreeView216.add(2, -1, 'Kostenlose Ausmalbilder für Kinder', '/kinder/ausmalbilder/ausmalbilder.html', 'false'); jgTreeView216.add(6, 2, 'Ausmalbilder Blumen', '/kinder/ausmalbilder/blumen.html', 'false'); jgTreeView216.add(3, 2, 'Ausmalbilder Fahrzeuge', '/kinder/ausmalbilder/fahrzeuge.html', 'false'); jgTreeView216.add(5, 2, 'Ausmalbilder Obst und Gemüse', '/kinder/ausmalbilder/obst-und-gemuese.html', 'false'); jgTreeView216.add(4, 2, 'Ausmalbilder Tieren', '/kinder/ausmalbilder/tiere.html', 'false'); jgTreeView216.add(9, 3, 'Ausmalbilder Autos', '/kinder/ausmalbilder/autos.html', 'false'); jgTreeView216.add(8, 4, 'Ausmalbilder Hunde', '/kinder/ausmalbilder/hunde.html', 'false'); jgTreeView216.add(10, 3, 'Ausmalbilder LKWs', '/kinder/ausmalbilder/lkws.html', 'false'); jgTreeView216.add(7, 4, 'Ausmalbilder Pferde', '/kinder/ausmalbilder/pferde.html', 'false');
ID der Kategorie, ID der übergeordneten Kategorie, Name der Kategorie, URL der Kategorie
Im Prinzip ist also die Info vorhanden, welche Kategorie welcher anderen Kategorie untergeordnet ist.
Der Code des obigen Beispiels sollte in HTML so aussehen:
(beachte auch die Verschachtelung und die alphabetische Sortierung; die URLs lasse ich der Übersichtlichkeit halber mal weg):
Code:
<ul> <li>Ausmalbilder Blumen</li> <li>Ausmalbilder Fahrzeuge <ul><li>Ausmalbilder Autos</li> <li>Ausmalbilder LKWs</li></ul></li> <li>Ausmalbilder Tiere <ul><li>Ausmalbilder Hunde</li> <li>Ausmalbilder Pferde</li></ul></li> </ul>
Mein bisheriger Ansatz sieht wie folgt aus:
PHP-Code:
<ul>
<?php
$tmpGesamt = $jgTreeviewHelper->buildTreeview($jgcat_rows); // Gesamtstruktur; Input von Joomla-Modul
$tmpZeilen = explode("\n", $tmpGesamt); // Input in Zeilen zerlegen
$tmpZeilenOK = array();
$kategorien = array();
$oberkategorienTmp = array();
foreach($tmpZeilen as $tmpZeile){ // 1. Durchlauf, um alle Kategorie-IDs zu ermitteln
$tmpSucheUrl = strpos($tmpZeile, "html"); // nur Zeilen berücksichtigen, die einen URL enthalten
if ($tmpSucheUrl !== false) {
$tmpZeilenOK[] = $tmpZeile; // Array aus relevanten Zeilen erstellen (für später)
$treffer1 = explode("(", $tmpZeile); // Kategorie-ID = zwischen erster Klammer und ...
$treffer2 = explode(",", $treffer1[1]); // ... erstem Komma
$kategorien[] = $treffer2[0]; // -> Array der Kategorie-IDs
$treffer3 = explode(",", $tmpZeile);
$oberkategorienTmp[] = str_replace(" ", "", $treffer3[1]);
$oberkategorien = array_unique($oberkategorienTmp); // -> Array der Oberkategorie-IDs
}
}
foreach($tmpZeilenOK as $tmpZeileOK){ // 2. Durchlauf, um Listenpunkte auszugeben
$tmpTeile = explode("'", $tmpZeileOK);
$KatID = explode(",", $tmpTeile[0]);
$KatIDselbst = explode("(",$KatID[0]); // ID der aktuellen Kategorie
$KatIDober = str_replace(" ", "", $KatID[1]); // ID der jeweiligen Oberkategorie
// Da ich keine korrekte Verschachtelung hinbekomme, könnte ich zumindest mit CSS-Einrückungen arbeiten. Allerdings ist dann immer noch die Sortierung der Kategorien falsch.
if (in_array($KatIDselbst[1], $oberkategorien)) {
$cssclass = "oberkategorie";
} else {
$cssclass = "unterkategorie";
}
echo "<li class=\"".$cssclass."\"><a href=\"".$tmpTeile[3]."\">".$tmpTeile[1]."</a></li>\n";
}
?>
</ul>
(PHP-Freaks bekommen vielleicht den einen oder anderen Anfall bei meinem laienhaften Programmierstil. Aber das ist halt meine bisherige, mühsam erarbeitete, wahrscheinlich umständliche Programmierlogik. Vereinfachungen sind natürlich auch willkommen.)
Herzliche Grüße
Marcel
Kommentar