Neues Hauptmenu (Sven) jetzt mit Modul waagerechter Navig.

Gesperrt
detlev
Beiträge: 156
Registriert: Mi 18. Sep 2002, 08:05
Wohnort: Bochum
Kontaktdaten:

Neues Hauptmenu (Sven) jetzt mit Modul waagerechter Navig.

Beitrag von detlev » Di 22. Okt 2002, 10:20

Fortführung der Navigation von Sven:
"Wer sich mit PHP auskennt, wird feststellen, dass hier eine 2. Abfrage ist, die auch die Seiten abruft. Diese wird für die Hauptnavigation noch nicht benötigt. Ist aber hilfreich, wenn man eine noch bessere Navigation schaffen will."
-------------------------------------------
Ich habs mal versucht:
(Dieses Modul liefert Links auf die Seiten innerhalb der gleichen Ebene des Strukturbaums)

Also: In die Datei front_content.php der jeweiligen Clients wird folgende Abfrage von Sven reinkopiert
(vor die Zeile mit "if (!$idcatside) {" ):


// Seiten einlesen //
$sql = "SELECT A.idcat, A.idside, A.is_start, B.title, B.summary, C.public FROM $cfgTab_cat_side AS A, $cfgTab_side_lang AS B, $cfgTab_cat_lang AS C, $cfgTab_cat AS D WHERE A.idside=B.idside AND A.idcat=C.idcat AND C.idcat=D.idcat AND B.online='1' AND C.visible='1' AND D.idclient='$client' order by B.title asc";
$db->query($sql);
while($db->next_record()){
$con_side[$db->f("idcat")][$db->f("idside")][idcat] = $db->f("idcat");
$con_side[$db->f("idcat")][$db->f("idside")][idside] = $db->f("idside");
$con_side[$db->f("idcat")][$db->f("idside")][is_start] = $db->f("is_start");
$con_side[$db->f("idcat")][$db->f("idside")][title] = $db->f("title");
$con_side[$db->f("idcat")][$db->f("idside")][summary] = $db->f("summary");
$con_side[$db->f("idcat")][$db->f("idside")][public] = $db->f("public");
$con_side[$db->f("idcat")][$db->f("idside")][link] = $sess->url("front_content.php?client=".$client."&lang=".$lang."&idcat=".$db->f("idcat")."&idside=".$db->f("idside")."");
};



Neues Modul waagerechte Subnavigation:

Sourcecode für den Output-Teil des Moduls "waagerechte Subnavigation":

if(count($con_side[$idcat])>1){
echo"<div align=\"center\">
<hr size=\"1\" noshade>
<span class = \"meinfont\">|";
while (list($key) = each($con_side[$idcat])) {
echo" <a href = \"".$con_side[$idcat][$key][link]."\">";
if($con_side[$idcat][$key][idside]==$idside) echo"<b>";
echo " ".$con_side[$idcat][$key][title]." ";
if($con_side[$idcat][$key][idside]==$idside) echo"</b>";
echo "</a> |";
}
echo " </span><hr size=\"1\" noshade>
</div>";
}


Gruß
Detlev

Knuds
Beiträge: 52
Registriert: Di 8. Okt 2002, 10:37
Kontaktdaten:

Beitrag von Knuds » Do 3. Apr 2003, 21:18

hi detlev,

ich wollte in meine navi dein super seitenm od einbauen, aber bei mir ist trotz vorhandener seiten (online) auf der gleichen ebene

Code: Alles auswählen

count($con_side[$idcat])
immer 0 ?!?
ich werd noch verrückt... :cry:

sonst läuft svens hauptmenü bei mir ohne probleme.

hast du noch eine idee? :D
hat der code bei dir funzt?

grüsse
knud

detlev
Beiträge: 156
Registriert: Mi 18. Sep 2002, 08:05
Wohnort: Bochum
Kontaktdaten:

Beitrag von detlev » Fr 4. Apr 2003, 07:29

Hier mein ganzes Modul:

Modulname:
Sub-Navigation waagerecht

/////////////////////////////////
Beschreibung:
verlinkt die Seiten auf der gleichen Navigationsebene(abschaltbares Modul)
Gibt den Seitentitel als Link raus, taucht nur auf, wenn mehr als eine Seite in der gleichen Strukturebene liegen

/////////////////////////////////
Input
echo "<table align=\"left\" cellpadding=\"0\" cellspacing=\"0\">
<tr valign=\"top\">
<td width=\"202\">Subnavigation waagerecht?</td>
<td><select name=\"CMS_VAR[0]\" size=\"1\">";
if ("CMS_VALUE[0]" == "") {
echo "<option selected>Ja</option>";
echo "<option>Nein</option>";
}
if ("CMS_VALUE[0]" != "") {
echo "<option selected>CMS_VALUE[0]</option>";
echo "<option>Ja</option>";
echo "<option>Nein</option>";
}
echo "</select></td>
</tr></table>";


/////////////////////////////////
Output:

if ("CMS_VALUE[0]" != "Nein") {
if(count($con_side[$idcat])>1){
echo"<div align=\"center\">
<hr size=\"1\" noshade>
<span class = \"font\">|";
while (list($key) = each($con_side[$idcat])) {
echo" <a href = \"".$con_side[$idcat][$key][link]."\">";
if($con_side[$idcat][$key][idside]==$idside) echo"<b>";
echo " ".$con_side[$idcat][$key][title]." ";
if($con_side[$idcat][$key][idside]==$idside) echo"</b>";
echo "</a> |";
}
echo " </span><hr size=\"1\" noshade>
</div>";
}
}//end if !="nein"

Knuds
Beiträge: 52
Registriert: Di 8. Okt 2002, 10:37
Kontaktdaten:

Beitrag von Knuds » Fr 4. Apr 2003, 07:41

hi detlev,
hab irgendwie ein mysql problem, denn im $con_side-array ist nix drin, hab dann mal die sql abfrage zum füllen gecheckt und im phpmyadmin direkt probiert.
kommt folgende fehler meldung:

The SELECT would examine too many records and probably take a very long time. Check your WHERE and use SET OPTION SQL_BIG_SELECTS=1 if the SELECT is ok) - Invalid SQL: SELECT A.idcat, A.idside, A.is_start, B.title, B.summary, C.public FROM con_cat_side AS A, con_side_lang AS B, con_cat_lang AS C, con_cat AS D WHERE A.idside=B.idside AND A.idcat=C.idcat AND C.idcat=D.idcat AND B.online='1' AND C.visible='1' AND D.idclient='1'

bullshit mit der angegebenen option big_... krieg ich auch keine einzige zeile ergebnis...nur der fehler ist weg.

kann ich das irgendwie debuggen, wo der fehler liegen könnte?

kann ich die anfrage irgendwie abspecken? is ja wirklich recht heftig 4 tabellen in einer sqlabfrage. respekt an sven777b :D

grüsse
knud

Knuds
Beiträge: 52
Registriert: Di 8. Okt 2002, 10:37
Kontaktdaten:

Beitrag von Knuds » Fr 4. Apr 2003, 08:07

ich glaub ich hab das problem gefunden.

die site ist einfach zu gross. 95 kategorien, auch wenn noch gar keine seiten drin sind sind wohl doch zu fett für contenido. werd meine struktur mal überdenken. und lieber mehr seiten und weniger kat. machen.

auf ner kleineren site gehts ohne probleme.
da kann man ruhig auf mehr performance bei der-dirigent hoffen.

grüsse
knuds

detlev
Beiträge: 156
Registriert: Mi 18. Sep 2002, 08:05
Wohnort: Bochum
Kontaktdaten:

Beitrag von detlev » Fr 4. Apr 2003, 08:24

Ich würde die Abfrage so umstellen, das erst viel aus der Abfrage ausgeklammert wird, wie visible=1, online=1, dann vielleicht mal über indexe bei einigen Tabellen nachdenken.

Aber die Aussage "invalid SQL ... " sollte dir zu denken geben, da steckt ein Fehler in der Abfrage....

Bei meinem Krankenhaus-Intranet hat einer von 40 Clients 290 Seiten geschrieben, damit kommt die Haupt-Navigation zurecht, ohne zu zögern. Die Größe des Datenbankdumps liegt zur Zeit bei 27MB.
Was langsam wird, ist das Clientübergreifende Newsmodul, das braucht schon mal 10-30 Sekunden um aus allen Clients die News-Seiten rauszufiltern.

Gruß
Detlev

Knuds
Beiträge: 52
Registriert: Di 8. Okt 2002, 10:37
Kontaktdaten:

Beitrag von Knuds » Fr 4. Apr 2003, 09:26

naja die betroffene sql-abfrage ist von dir :D (die normale vom seitenauslesen aus svens hauptmenü von dir gebugfixed in der front_content.php.)

die sollte doch gehen, oder?

Sven777b
Beiträge: 503
Registriert: Mi 18. Sep 2002, 00:00
Wohnort: Sachsen
Kontaktdaten:

Beitrag von Sven777b » Mo 7. Apr 2003, 12:44

ich häng mich auch mal mit rein... ;)

also die SQL-Abfrage kann je nach Server unterschiedlich lang sein. Auf einem eigenen Server , wo man die DB alleine nutzt, können 100 Kategorien kein Problem sein. Auf einem Str*to-Server z.b. , wo über 50 Domains auf einen MySQL-Server zugreifen , dauert die Abfrage zu lange und MySQL gibt die von dir genannte Crashmeldung aus (von wegen und Abfrage zu groß) - desweiteren hat die Abfrage noch ein anderes Performanceproblem , was sich aber auch absolut nicht lösen lässt: die Arrays werden zu groß. d.h. es kann durchaus passieren, dass die php-Speichergrenze erreicht wird - und das geschieht relativ schnell. Leider.

Als ich die Navi geschrieben habe, hab ich leider nicht auf sowas geachtet. man hat also die Alternative entweder seinen Speicher zu killen - oder die Abfrage der Seiten im Modul zu gestalten (ohne Array) , was natürlich weniger möglichkeiten bietet (Sortierung) und auch die geschwindigkeit durch die vielen SQL-Abfragen massiv senkt.
Module zum anschauen:
bei Sven: http://contenido-module.de
bei Pulk : http://spielwiese.pulk.net

Der-Dirigent: http://der-dirigent.de

detlev
Beiträge: 156
Registriert: Mi 18. Sep 2002, 08:05
Wohnort: Bochum
Kontaktdaten:

Beitrag von detlev » Do 24. Apr 2003, 07:09

Ich habe für meine Site mittlerweile die Abfragezeiten durch Indizierung der Tabellen drastisch reduziert:
http://www.contenido.de/forum/viewtopic.php?t=808

Gruß
Detlev

Gesperrt