Original geschrieben von h3ll
PHP 4 wurde Ende August offiziell eingestellt. Sollte man so oder so nicht mehr benutzen.
PHP 4 wurde Ende August offiziell eingestellt. Sollte man so oder so nicht mehr benutzen.
function echoarray($var, $depth=0, &$cnt=1, $sub=0) {
function get_categories() {
$return = array();
$result = mysql_query("
SELECT id, name, subof
FROM site_galleries
WHERE issub=0
"); // element level 0
while ($row = mysql_fetch_assoc($result)) {
$therow = get_sub($row['id']);
if ($therow) { // kind(er) vorhanden
$return[] = array($row, "SUB" => $therow); // beinhaltet array mit kind(ern)
} else { // leeres parent
$return[] = array($row);
}
}
return $return;
}
function get_sub($parent) {
$return = array();
$result = mysql_query("
SELECT id, name, subof
FROM site_galleries
WHERE issub=1
AND subof='".$parent."'
"); // element level >0
while ($row = mysql_fetch_assoc($result)) {
$therow = get_sub($row['id']);
if ($therow) { // kind(er) vorhanden
$return[] = array($row, 'SUB' => $therow); // beinhaltet array mit kind(ern)
} else { // leeres element
$return[] = array($row);
}
}
return $return;
}
function echoarray($var, $depth=0, &$cnt=1, $sub=0, &$stack=array()) {
/**
* $var: array mit aktuellem knoten (& kindern)
* $depth: tiefe dieses knotens
* $cnt: zeilenbg
* $sub: anzahl entries auf gleichem level mit gleichem root
* $stack: wenn array -> line-info fuer jede div-ebene [stack[x] == 0 --> keine linie; stack[x] == 1 --> linie]
*/
$i = 0;
foreach ($var as $val) {
$i++;
/* zeilenbg abwechselnd */
if ($cnt == 0) {
$bgcolor = "#f1f5fa";
$cnt = 1;
} else {
$bgcolor = "#fff";
$cnt = 0;
}
echo "\t<div class=\"galline\" style=\"background-color: ".$bgcolor.";\">\n"; // zeilencontainer
/* vertikale linien zeichnen */
$j = 0;
while ($j < $depth) {
if ($stack[$j]) { // arraystelle = 1 --> vertikale linie
echo "\t\t<div class=\"admsubico\"><img src=\"../pics/icons/therearesubs.gif\" class=\"thesubico\"></div>\n";
} else { // arraystelle = 0 --> leeres div
if ($j) { // kein root-element
echo "\t\t<div class=\"rueck\"></div>\n";
}
}
$j++;
}
/* tree-div */
if ($sub != 0) { // mehr als ein element auf gleicher ebene
if ($i == count($var)) { // aktuelles element = anzahl der element auf ebene
echo "\t\t<div class=\"admsubico\"><img src=\"../pics/icons/itsasub.gif\" class=\"thesubico\"></div>\n"; // letztes sub
} else {
echo "\t\t<div class=\"admsubico\"><img src=\"../pics/icons/itaresub.gif\" class=\"thesubico\"></div>\n"; // zwischensub
}
}
echo "\t\t<div class=\"galname\">".$val[0]["name"]."</div>\n"; // line-text
echo "\t</div>\n"; // ende line
/* kinder der aktuellen zeile ausgeben, sofern vorhanden */
if (isset($val["SUB"])) { // element hat kind(er)
if ($sub>1 and $depth) { // mehr als 1 element in selber ebene && nicht root (-> depth=0)-element
$stack[$depth] = 1; // senkrechte linie ist zu zeichnen
} else { // entweder root oder nur ein element in ebene
$stack[$depth] = 0; // nichts zeichnen
}
echoarray($val["SUB"], $depth+1, $cnt, count($val["SUB"]), $stack); // funktion fuer kinder aufrufen
}
}
}
echo "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n";
echo "<HTML>\n";
echo "<HEAD>\n";
echo "<TITLE>TEST</TITLE>\n";
echo "<LINK REL=\"stylesheet\" type=\"text/css\" HREF=\"test.css\">";
echo "</HEAD>\n";
echo "<BODY>\n";
echoarray(get_categories());
echo "\t<BR><BR><BR><BR>\n";
// echo "\tDem Baum fehlen noch immer einige senkrechte Linien!\n";
echo "</BODY>\n";
echo "</HTML>\n";
// fat props to TEH HoaX!!! ;)
?>
function galasselect($var, $depth=0, &$cnt=1, $sub=0) {
$i = 0;
FOREACH ($var as $val) {
$i++;
$rueck = $depth * 16;
IF ($sub != 0) { // WENN ES SICH UM EINE SUBgalerie handelt...
$class = "norm";
} ELSE {
$class = "bold";
}
echo "\t\t<OPTION CLASS=\"".$class."\" STYLE=\"padding: 0 0 0 ".$rueck."px;\" VALUE=\"".$val[0]["id"]."\">".$val[0]["name"]."</OPTION>\n";
IF (isset($val["SUB"])) {
$anzahl = isset($val["SUB"]) ? count($val["SUB"]) : 0;
// echo $cnt;
galasselect($val["SUB"], $depth+1, $cnt, $anzahl);
}
}
}
echo "\t<SELECT NAME=\"gallist\" ID=\"gallist\" STYLE=\"width: 550px; border: 1px solid #abc6dd; background-color: #e5effd;\">\n";
echo "\t\t<OPTION CLASS=\"norm\" VALUE=\"nope\" SELECTED>Wählen Sie eine Galerie...</OPTION>\n";
galasselect(get_categories());
echo "\t</SELECT>\n";
Kommentar