So eine Navigation ist aber auch ein Seitenelement, das man gut cachen kann.
PHP - Galerien Listung - REKURSION
Einklappen
X
-
Original geschrieben von PHP-Desaster
So eine Navigation ist aber auch ein Seitenelement, das man gut cachen kann.
Nested Set ist auch sehr schnell beim Abruf.
SHM.
Oder halt eben plain simple old include(...html).
Aber bei 3 Seitenaufrufen in der Stunde sollte man eher Arbeitszeit gering halten, als darauf zu achten, dass der Server 99% statt 98%idle-time hat
Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!
bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
Wie man Fragen richtig stellt
Kommentar
-
Ok Jungenz! Und was heißt das jetzt für mich!? Ich mein mal ehrlich...
Eure Ansätze haben beide eine Begründung, aber ich will mir den Kopf nicht drüber zerbrechen welcher Server jetzt was zu berechnen hat, sondern ich brauch irgendwie ne Lösung für mein Problem.
Also allein hab ich es nach wie vor noch immer nicht geschafft; Trotzdem mir zwei, drei Posts schon echt ein schönes Stück weiter geholfen haben, darum bitte back to topic; ja!?WHILE (!$asleep) { $sheep++; }
Kommentar
-
Du nimmst einfach die Lösung die du jetzt hast und korrigierst die.
Dafür liest du die Tutorials zu Rekursion so oft, bis du es selbst hin kriegst.
Thema beendet.
In nem Jahr wenn deine Website größer ist sprechen wir uns wieder~
Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!
bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
Wie man Fragen richtig stellt
Kommentar
-
Also ich lese das von get_categories() zurückgelieferte array jetzt rekursiv aus und lass mir das mal einfach per OL und LI formatieren...
Trotz modifizierter Bedingungen bekomme ich nach wie vor zu viele array-levels zuück... *grummel*
PHP-Code:function get_categories() {
$return = array();
$result = mysql_query("SELECT id,name FROM site_galleries WHERE issub=0");
while ($row = mysql_fetch_assoc($result)) {
IF (get_sub($row['id'])) {
$return[] = array($row, "SUB" => get_sub($row['id']));
} else {
$return[] = array($row);
}
}
return $return;
}
function get_sub($parent) {
$return = array();
$result = mysql_query("SELECT id,name FROM site_galleries WHERE issub=1 AND subof='".$parent."'");
while ($row = mysql_fetch_assoc($result)){
IF (get_sub($row['id'])) {
$return[] = array($row, 'SUB' => get_sub($row['id']));
} else {
$return[] = array($row);
}
}
return $return;
}
WHILE (!$asleep) { $sheep++; }
Kommentar
-
WHERE issub=0 <<--- Was ist das denn?
Du hast do wohl nicht in der DB jeden Menupunkt markiert, ob er ein SUB ist, oder?
Wenn ja, dann ist das wohl unnötig komliziert.
Wenn du rekursiv arbeiten willst, verwende das parent id Konzept. Dann ergibt sich das automatisch. Elemente mit parent=0 sind Wurzelelemente. Die andern haben die ID Parent in dieser Spalte.
Kommentar
-
@combie: Da hast du recht! Also ich hab mal die DB-Spalte "issub" entfernt. Die veränderten Queries:
PHP-Code:function get_categories() {
$return = array();
$result = mysql_query("SELECT id,name FROM site_galleries WHERE subof=0");
while ($row = mysql_fetch_assoc($result)) {
IF (get_sub($row['id'])) {
$return[] = array($row, "SUB" => get_sub($row['id']));
} else {
$return[] = array($row);
}
}
return $return;
}
function get_sub($parent) {
$return = array();
$result = mysql_query("SELECT id,name FROM site_galleries WHERE subof='".$parent."'");
while ($row = mysql_fetch_assoc($result)){
IF (get_sub($row['id'])) {
$return[] = array($row, 'SUB' => get_sub($row['id']));
} else {
$return[] = array($row);
}
}
return $return;
}
WHILE (!$asleep) { $sheep++; }
Kommentar
-
Es ist ganz ungünstig get_sub mehrmals für die gleiche id aufzurufen! Speichere das Ergebnis in einer Variablen und benutze diese.
Funktioniert es jetzt?
Ansonsten poste einen DB-Dump und die Ausgabe von
<pre> print_r(get_categories, 1) . </pre>
Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!
bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
Wie man Fragen richtig stellt
Kommentar
-
Ok! Habe das jetzt mal abgeändert und die Variable "therow" gesetzt...
PHP-Code:while ($row = mysql_fetch_assoc($result)){
$therow = get_sub($row['id']);
IF ($therow) {
$return[] = array($row, 'SUB' => $therow);
} else {
$return[] = array($row);
}
}
Hier mal der gewünschte DB-Dump:
PHP-Code:CREATE TABLE `site_galleries` (
`id` int(11) NOT NULL auto_increment,
`name` varchar(100) character set latin1 collate latin1_german1_ci NOT NULL default 'N/A',
`info` text character set latin1 collate latin1_german1_ci NOT NULL,
`issub` int(11) NOT NULL default '0',
`subof` int(11) NOT NULL default '0',
`owner` int(10) NOT NULL,
`linked` int(10) default NULL,
`viewerlvl` int(2) default NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=18 ;
INSERT INTO `site_galleries` (`id`, `name`, `info`, `issub`, `subof`, `owner`, `linked`, `viewerlvl`) VALUES
(1, 'Schuljahr 2005/2006', 'Das gesammelte Bildmaterial aus dem Schuljahr 2005/2006', 0, 0, 3, NULL, NULL),
(2, 'Schuljahr 2006/2007', 'Das gesammelte Bildmaterial aus dem Schuljahr 2006/2007', 0, 0, 3, NULL, NULL),
(3, 'Schuljahr 2007/2008', 'Das gesammelte Bildmaterial aus dem Schuljahr 2007/2008', 0, 0, 3, NULL, NULL),
(4, 'Schuljahr 2008/2009', 'Das gesammelte Bildmaterial aus dem Schuljahr 2008/2009', 0, 0, 3, NULL, NULL),
(5, 'TEST', 'sadsadasd', 0, 0, 3, NULL, NULL),
(6, 'sdsadas', 'dsadsadsadsad', 0, 0, 3, NULL, NULL),
(7, 'asdsad', 'asdasdasd', 1, 6, 3, NULL, NULL),
(8, 'Eröffnungsgottesdienst', 'Eröffnungsgottesdienst beim Bründl', 1, 4, 3, 4, NULL),
(9, 'TEST SUBSUB', '', 1, 7, 3, NULL, NULL),
(10, 'TEST SUBSUBSUB', '', 1, 9, 3, NULL, NULL),
(11, 'TEST SUBSUBSUBSUB', '', 1, 10, 3, NULL, NULL),
(12, 'BOR 4a', 'Berufsinformation für die 4a im September 2008', 1, 4, 3, NULL, NULL),
(13, 'TEST SUBSUBSUB', '', 1, 9, 3, NULL, NULL),
(14, 'mumu', 'haha', 1, 1, 3, NULL, NULL),
(15, 'SUBSUBSUB HAHA', 'I lold because it works fine!', 0, 0, 3, NULL, NULL),
(16, 'Next episode....', 'The loling was funny because i loled verry much!', 1, 11, 3, NULL, NULL),
(17, 'Another Brick in the Wall', 'Hehe! I'm testin' this shit extensively...', 1, 10, 3, NULL, NULL);
http://www.marianum-steinberg.at/2009/test/gall.phpWHILE (!$asleep) { $sheep++; }
Kommentar
-
Das Array entspricht deinem Dump.
Deine Ausgabe muss falsch sein, oder du hast nicht das in die DB eingespeist was du haben willst.
Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!
bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
Wie man Fragen richtig stellt
Kommentar
-
Das war idT etwas tricky, weil wir den Daten keinen Key zugewiesen haben.
PHP-Code:// statt
$return[] = array($row, ...);
// besser
$return[] = array("daten" => $row, ...);
PHP-Code:function echoarray($var) {
echo "<ul>\n";
foreach ($var as $val) {
echo "<li>" . $val[0]["name"];
if (isset($val["SUB"])) {
echo "<br />\n";
echoarray($val["SUB"]);
}
echo "</li>";
}
echo "</ul>\n";
}
Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!
bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
Wie man Fragen richtig stellt
Kommentar
Kommentar