Hier das Diff der Änderung. Knackpunkt ist, dass jetzt die Datenbank die Termindatensätze zusammenbaut. Daher gibt es nur noch eine Zeile pro Termin zu lesen. Für unseren Fall beschleunigt das die Sache um ca. Faktor 10.
Die Änderungen gehen analog für den Teaser. Ich fände es super, wenn du diese Verbesserung in die offizielle Version der Terminliste übernehmen würdest. Ach ja, eine Sache ist noch nicht ganz optimal: Ich verwende $cfg["tab"]..., sondern direkt con_ Könnte man noch besser machen... und vielleicht sind auch noch Bugs drin...
Code: Alles auswählen
--- terminliste_universal original.php 2008-10-19 09:16:32.000000000 +0200
+++ terminliste_universal.php 2008-10-19 18:28:43.000000000 +0200
@@ -265,31 +265,70 @@
}
// Alle Artikel der Kategorie einlesen, die nicht Startartikel sind
-$MOD_TL_sql = "SELECT ARTLANG.idart, CONTENT.value, CONTENT.typeid, ARTLANG.idartlang, CONTENT.idtype ";
-$MOD_TL_sql .= "FROM ".$cfg["tab"]["cat_art"]." AS CATART,";
-$MOD_TL_sql .= " ".$cfg["tab"]["art_lang"]." AS ARTLANG,";
-$MOD_TL_sql .= " ".$cfg["tab"]["cat"]." AS CAT,";
-$MOD_TL_sql .= " ".$cfg["tab"]["content"]." AS CONTENT,";
-$MOD_TL_sql .= " ".$cfg["tab"]["cat_lang"]." AS CATLANG ";
-$MOD_TL_sql .= "WHERE ARTLANG.idart = CATART.idart ";
-$MOD_TL_sql .= "AND CATART.idcat = CAT.idcat ";
-$MOD_TL_sql .= "AND ARTLANG.idartlang = CONTENT.idartlang ";
-$MOD_TL_sql .= "AND ARTLANG.idlang = '".$lang."' ";
-$MOD_TL_sql .= "AND CAT.idcat IN (".$MOD_TL_sel_tree.") ";
-$MOD_TL_sql .= "AND CAT.idclient = '".$client."' ";
-$MOD_TL_sql .= "AND ARTLANG.online = '1' "; // nur Artikel die online sind
-$MOD_TL_sql .= "AND CATART.idcat = CATLANG.idcat ";
-
+$MOD_TL_sql = <<<EOD
+SELECT
+ARTLANG.idart AS idart,
+ARTLANG.idartlang AS idartlang,
+CONTENT_datum1.value AS datum1,
+CONTENT_zeit1.value AS zeit1,
+CONTENT_datum2.value AS datum2,
+CONTENT_zeit2.value AS zeit2,
+CONTENT_ort.value AS ort,
+CONTENT_titel.value AS titel,
+IF(CONTENT_html.value = '', 'yes', 'no') AS html_empty,
+CONTENT_teaseryn.value AS teaseryn,
+CONTENT_link.value AS link,
+CONTENT_linkframe.value AS linkframe,
+CONTENT_linkdesc.value AS linkdesc,
+CONTENT_zyklus.value AS zyklus,
+CONTENT_wtagezyklus.value AS wtagezyklus,
+CONTENT_wtagemon.value AS wtagemon,
+CONTENT_image.value AS image,
+CONTENT_imagedesc.value AS imagedesc,
+CONTENT_kategoriea.value AS kategoriea,
+CONTENT_xtag.value AS xtag,
+CONTENT_aliste.value AS aliste,
+CONTENT_hightlight.value AS hightlight,
+CONTENT_kategorieb.value AS kategorieb,
+CONTENT_zutermine.value AS zutermine
+
+FROM
+con_cat AS CAT
+INNER JOIN con_cat_art AS CATART ON (CATART.idcat = CAT.idcat AND CAT.idclient = '$client' AND CAT.idcat IN ($MOD_TL_sel_tree))
+INNER JOIN con_art_lang AS ARTLANG ON (CATART.idart = ARTLANG.idart AND ARTLANG.idlang = '$lang' AND ARTLANG.online = '1')
+INNER JOIN con_cat_lang AS CATLANG ON (CATART.idcat = CATLANG.idcat)
+INNER JOIN con_content AS CONTENT_datum1 ON (ARTLANG.idartlang = CONTENT_datum1.idartlang AND CONTENT_datum1.typeid = 0 AND CONTENT_datum1.idtype = 3)
+LEFT JOIN con_content AS CONTENT_zeit1 ON (ARTLANG.idartlang = CONTENT_zeit1.idartlang AND CONTENT_zeit1.typeid = 1 AND CONTENT_zeit1.idtype = 3)
+LEFT JOIN con_content AS CONTENT_datum2 ON (ARTLANG.idartlang = CONTENT_datum2.idartlang AND CONTENT_datum2.typeid = 2 AND CONTENT_datum2.idtype = 3)
+LEFT JOIN con_content AS CONTENT_zeit2 ON (ARTLANG.idartlang = CONTENT_zeit2.idartlang AND CONTENT_zeit2.typeid = 3 AND CONTENT_zeit2.idtype = 3)
+LEFT JOIN con_content AS CONTENT_ort ON (ARTLANG.idartlang = CONTENT_ort.idartlang AND CONTENT_ort.typeid = 4 AND CONTENT_ort.idtype = 3)
+LEFT JOIN con_content AS CONTENT_titel ON (ARTLANG.idartlang = CONTENT_titel.idartlang AND CONTENT_titel.typeid = 6 AND CONTENT_titel.idtype = 3)
+LEFT JOIN con_content AS CONTENT_html ON (ARTLANG.idartlang = CONTENT_html.idartlang AND CONTENT_html.typeid = 8)
+LEFT JOIN con_content AS CONTENT_teaseryn ON (ARTLANG.idartlang = CONTENT_teaseryn.idartlang AND CONTENT_teaseryn.typeid = 7 AND CONTENT_teaseryn.idtype = 3)
+LEFT JOIN con_content AS CONTENT_link ON (ARTLANG.idartlang = CONTENT_link.idartlang AND CONTENT_link.typeid = 9 AND CONTENT_link.idtype = 6)
+LEFT JOIN con_content AS CONTENT_linkframe ON (ARTLANG.idartlang = CONTENT_linkframe.idartlang AND CONTENT_linkframe.typeid = 9 AND CONTENT_linkframe.idtype = 7)
+LEFT JOIN con_content AS CONTENT_linkdesc ON (ARTLANG.idartlang = CONTENT_linkdesc.idartlang AND CONTENT_linkdesc.typeid = 9 AND CONTENT_linkdesc.idtype = 8)
+LEFT JOIN con_content AS CONTENT_zyklus ON (ARTLANG.idartlang = CONTENT_zyklus.idartlang AND CONTENT_zyklus.typeid = 10 AND CONTENT_zyklus.idtype = 3)
+LEFT JOIN con_content AS CONTENT_wtagezyklus ON (ARTLANG.idartlang = CONTENT_wtagezyklus.idartlang AND CONTENT_wtagezyklus.typeid = 11 AND CONTENT_wtagezyklus.idtype = 3)
+LEFT JOIN con_content AS CONTENT_wtagemon ON (ARTLANG.idartlang = CONTENT_wtagemon.idartlang AND CONTENT_wtagemon.typeid = 12 AND CONTENT_wtagemon.idtype = 3)
+LEFT JOIN con_content AS CONTENT_image ON (ARTLANG.idartlang = CONTENT_image.idartlang AND CONTENT_image.typeid = 14 AND CONTENT_image.idtype = 4)
+LEFT JOIN con_content AS CONTENT_imagedesc ON (ARTLANG.idartlang = CONTENT_imagedesc.idartlang AND CONTENT_imagedesc.typeid = 14 AND CONTENT_imagedesc.idtype = 5)
+LEFT JOIN con_content AS CONTENT_kategoriea ON (ARTLANG.idartlang = CONTENT_kategoriea.idartlang AND CONTENT_kategoriea.typeid = 13 AND CONTENT_kategoriea.idtype = 3)
+LEFT JOIN con_content AS CONTENT_xtag ON (ARTLANG.idartlang = CONTENT_xtag.idartlang AND CONTENT_xtag.typeid = 16 AND CONTENT_xtag.idtype = 3)
+LEFT JOIN con_content AS CONTENT_aliste ON (ARTLANG.idartlang = CONTENT_aliste.idartlang AND CONTENT_aliste.typeid = 17 AND CONTENT_aliste.idtype = 3)
+LEFT JOIN con_content AS CONTENT_hightlight ON (ARTLANG.idartlang = CONTENT_hightlight.idartlang AND CONTENT_hightlight.typeid = 20 AND CONTENT_hightlight.idtype = 3)
+LEFT JOIN con_content AS CONTENT_kategorieb ON (ARTLANG.idartlang = CONTENT_kategorieb.idartlang AND CONTENT_kategorieb.typeid = 21 AND CONTENT_kategorieb.idtype = 3)
+LEFT JOIN con_content AS CONTENT_zutermine ON (ARTLANG.idartlang = CONTENT_zutermine.idartlang AND CONTENT_zutermine.typeid = 22 AND CONTENT_zutermine.idtype = 3)
+EOD;
if ($cfg["is_start_compatible"] == true)
- $MOD_TL_sql .= "AND CATART.is_start = '0' ";
+ $MOD_TL_sql .= "WHERE CATART.is_start = '0';";
else
- $MOD_TL_sql .= "AND CONTENT.idartlang != CATLANG.startidartlang ";
-
-$MOD_TT_sql .= "AND CONTENT.typeid IN (0, 1, 2, 3, 4, 6, 8, 9, 10, 11, 12, 13, 16, 17, 20, 21, 22) ";
-$MOD_TL_sql .= "ORDER BY ARTLANG.idart, CONTENT.typeid ASC";
+ $MOD_TL_sql .= "WHERE ARTLANG.idartlang != CATLANG.startidartlang;";
+
+print("<!-- ".getmicrotime()."-->\n");
$db->query($MOD_TL_sql);
+print("<!-- ".getmicrotime()."-->\n");
-print(getmicrotime()."\n");
// weiter, wenn Artikel gefunden wurden werden die Felder in ein Array geschrieben
if ($db->num_rows() > 0)
{
@@ -297,104 +336,33 @@
while ($MOD_TL_datensaetze < $db->num_rows()) // alle Datensätze durchlaufen und Inhalte in Array schreiben
{
$db->next_record();
- if ($db->f("idart") > $MOD_TL_termine["idart"][$MOD_TL_zaehler])
- $MOD_TL_zaehler++;
if (isStartArticle($db->f("idartlang"),$MOD_TL_durchlaufdcat,$lang)==FALSE)
{
- $MOD_TL_linktyp = $db->f("idtype");
- switch ($db->f("typeid"))
- {
- case 0: // Anfangstermin
- if ($MOD_TL_linktyp == '3') // Text
- {
- $MOD_TL_termine["datum1"][$MOD_TL_zaehler] = $db->f("value");
- if (strlen($MOD_TL_termine["datum1"][$MOD_TL_zaehler]) < 10 ) // falsches oder kein Datum
- $MOD_TL_termine["datum1"][$MOD_TL_zaehler] = '1970-01-01';
- $MOD_TL_termine["idart"][$MOD_TL_zaehler] = $db->f("idart");
- $MOD_TL_termine["html"][$MOD_TL_zaehler] = '';
- $MOD_TL_termine["link"][$MOD_TL_zaehler] = '';
- $MOD_TL_termine["linkframe"][$MOD_TL_zaehler] = '';
- $MOD_TL_termine["kategoriea"][$MOD_TL_zaehler] = '';
- $MOD_TL_termine["kategorieb"][$MOD_TL_zaehler] = '';
- $MOD_TL_termine["zyklus"][$MOD_TL_zaehler] = 'no';
- $MOD_TL_termine["xtag"][$MOD_TL_zaehler] = '';
- $MOD_TL_termine["aliste"][$MOD_TL_zaehler] = '';
- $MOD_TL_termine["hightlight"][$MOD_TL_zaehler] = '';
- $MOD_TL_termine["zutermine"][$MOD_TL_zaehler] = '';
- }
- break;
- case 1: // Anfangsuhrzeit
- if ($MOD_TL_linktyp == '3') // Text
- $MOD_TL_termine["zeit1"][$MOD_TL_zaehler] = $db->f("value");
- break;
- case 2: // Endtermin
- if ($MOD_TL_linktyp == '3') // Text
- $MOD_TL_termine["datum2"][$MOD_TL_zaehler] = $db->f("value");
- break;
- case 3: // Enduhrzeit
- if ($MOD_TL_linktyp == '3') // Text
- $MOD_TL_termine["zeit2"][$MOD_TL_zaehler] = $db->f("value");
- break;
- case 4: // Ort
- if ($MOD_TL_linktyp == '3') // Text
- $MOD_TL_termine["ort"][$MOD_TL_zaehler] = $db->f("value");
- break;
- case 6: // Titel
- if ($MOD_TL_linktyp == '3') // Text
- $MOD_TL_termine["titel"][$MOD_TL_zaehler] = $db->f("value");
- break;
- case 8: // HTML
- $MOD_TL_termine["html"][$MOD_TL_zaehler] = $db->f("value");
- break;
- case 9: // Link, Achtung 4 Zustände
- if ($MOD_TL_linktyp == '6') // Link
- $MOD_TL_termine["link"][$MOD_TL_zaehler] = $db->f("value");
- if ($MOD_TL_linktyp == '7') // Target
- $MOD_TL_termine["linkframe"][$MOD_TL_zaehler] = $db->f("value");
- if ($MOD_TL_linktyp == '8') // Linkdescription
- $MOD_TL_termine["linkdesc"][$MOD_TL_zaehler] = $db->f("value");
- break;
- case 10: // Termin Zyklus
- if ($MOD_TL_linktyp == '3') // Text
- $MOD_TL_termine["zyklus"][$MOD_TL_zaehler] = $db->f("value");
- break;
- case 11: // Zyklus Wochentage
- if ($MOD_TL_linktyp == '3') // Text
- $MOD_TL_termine["wtagezyklus"][$MOD_TL_zaehler] = $db->f("value");
- break;
- case 12: // 1., 2., ... Wochentag im Monat
- if ($MOD_TL_linktyp == '3') // Text
- $MOD_TL_termine["wtagemon"][$MOD_TL_zaehler] = $db->f("value");
- break;
- case 13: // Terminkategorien A
- if ($MOD_TL_linktyp == '3') // Text
- $MOD_TL_termine["kategoriea"][$MOD_TL_zaehler] = $db->f("value");
- break;
- case 16: // Zyklus xten Tag
- if ($MOD_TL_linktyp == '3') // Text
- $MOD_TL_termine["xtag"][$MOD_TL_zaehler] = $db->f("value");
- break;
- case 17: // Ausschlussliste
- if ($MOD_TL_linktyp == '3') // Text
- $MOD_TL_termine["aliste"][$MOD_TL_zaehler] = $db->f("value");
- break;
- case 20: // Termin hervorheben
- if ($MOD_TL_linktyp == '3') // Text
- $MOD_TL_termine["hightlight"][$MOD_TL_zaehler] = $db->f("value");
- break;
- case 21: // Terminkategorien B
- if ($MOD_TL_linktyp == '3') // Text
- $MOD_TL_termine["kategorieb"][$MOD_TL_zaehler] = $db->f("value");
- break;
- case 22: // zusätzliche termine
- if ($MOD_TL_linktyp == '3') // Text
- $MOD_TL_termine["zutermine"][$MOD_TL_zaehler] = $db->f("value");
- break;
- }
- }
+ $MOD_TL_termine["idart"][$MOD_TL_zaehler] = $db->f("idart");
+ $MOD_TL_termine["datum1"][$MOD_TL_zaehler] = (strlen($db->f("datum1")) < 10 ) ? '1970-01-01' : $db->f("datum1");
+ $MOD_TL_termine["zeit1"][$MOD_TL_zaehler] = $db->f("zeit1");
+ $MOD_TL_termine["datum2"][$MOD_TL_zaehler] = $db->f("datum2");
+ $MOD_TL_termine["zeit2"][$MOD_TL_zaehler] = $db->f("zeit2");
+ $MOD_TL_termine["ort"][$MOD_TL_zaehler] = $db->f("ort");
+ $MOD_TL_termine["titel"][$MOD_TL_zaehler] = $db->f("titel");
+ $MOD_TL_termine["html_empty"][$MOD_TL_zaehler] = $db->f("html_empty");
+ $MOD_TL_termine["link"][$MOD_TL_zaehler] = $db->f("link");
+ $MOD_TL_termine["linkframe"][$MOD_TL_zaehler] = $db->f("linkframe");
+ $MOD_TL_termine["linkdesc"][$MOD_TL_zaehler] = $db->f("linkdesc");
+ $MOD_TL_termine["zyklus"][$MOD_TL_zaehler] = ($db->f("zyklus") === NULL) ? 'no' : $db->f("zyklus");
+ $MOD_TL_termine["wtagezyklus"][$MOD_TL_zaehler] = $db->f("wtagezyklus");
+ $MOD_TL_termine["wtagemon"][$MOD_TL_zaehler] = $db->f("wtagemon");
+ $MOD_TL_termine["kategoriea"][$MOD_TL_zaehler] = $db->f("kategoriea");
+ $MOD_TL_termine["xtag"][$MOD_TL_zaehler] = $db->f("xtag");
+ $MOD_TL_termine["aliste"][$MOD_TL_zaehler] = $db->f("aliste");
+ $MOD_TL_termine["hightlight"][$MOD_TL_zaehler] = $db->f("hightlight");
+ $MOD_TL_termine["kategorieb"][$MOD_TL_zaehler] = $db->f("kategorieb");
+ $MOD_TL_termine["zutermine"][$MOD_TL_zaehler] = $db->f("zutermine");
+ }
+ $MOD_TL_zaehler++;
$MOD_TL_datensaetze++;
}
-print(getmicrotime()."\n");
+print("<!-- ".getmicrotime()."-->\n");
// Ermittlung der zyklischen Termine und Löschen von Datensätzen, die nicht angezeigt werden müssen
$MOD_TL_zaehler2 = $MOD_TL_zaehler+1; // zweiten Zähler anlegen
@@ -417,7 +385,7 @@
$MOD_TL_termine["ort"][$MOD_TL_zaehler2] = $MOD_TL_termine["ort"][$MOD_TL_durchlauf];
$MOD_TL_termine["titel"][$MOD_TL_zaehler2] = $MOD_TL_termine["titel"][$MOD_TL_durchlauf];
$MOD_TL_termine["idart"][$MOD_TL_zaehler2] = $MOD_TL_termine["idart"][$MOD_TL_durchlauf];
- $MOD_TL_termine["html"][$MOD_TL_zaehler2] = $MOD_TL_termine["html"][$MOD_TL_durchlauf];
+ $MOD_TL_termine["html_empty"][$MOD_TL_zaehler2] = $MOD_TL_termine["html_empty"][$MOD_TL_durchlauf];
$MOD_TL_termine["link"][$MOD_TL_zaehler2] = $MOD_TL_termine["link"][$MOD_TL_durchlauf];
$MOD_TL_termine["linkframe"][$MOD_TL_zaehler2] = $MOD_TL_termine["linkframe"][$MOD_TL_durchlauf];
$MOD_TL_termine["kategoriea"][$MOD_TL_zaehler2] = $MOD_TL_termine["kategoriea"][$MOD_TL_durchlauf];
@@ -434,7 +402,7 @@
$MOD_TL_termine["ort"][$MOD_TL_zaehler2] = $MOD_TL_termine["ort"][$MOD_TL_durchlauf];
$MOD_TL_termine["titel"][$MOD_TL_zaehler2] = $MOD_TL_termine["titel"][$MOD_TL_durchlauf];
$MOD_TL_termine["idart"][$MOD_TL_zaehler2] = $MOD_TL_termine["idart"][$MOD_TL_durchlauf];
- $MOD_TL_termine["html"][$MOD_TL_zaehler2] = $MOD_TL_termine["html"][$MOD_TL_durchlauf];
+ $MOD_TL_termine["html_empty"][$MOD_TL_zaehler2] = $MOD_TL_termine["html_empty"][$MOD_TL_durchlauf];
$MOD_TL_termine["link"][$MOD_TL_zaehler2] = $MOD_TL_termine["link"][$MOD_TL_durchlauf];
$MOD_TL_termine["linkframe"][$MOD_TL_zaehler2] = $MOD_TL_termine["linkframe"][$MOD_TL_durchlauf];
$MOD_TL_termine["kategoriea"][$MOD_TL_zaehler2] = $MOD_TL_termine["kategoriea"][$MOD_TL_durchlauf];
@@ -516,7 +484,7 @@
unset ($MOD_TL_termine["ort"][$MOD_TL_durchlauf]);
unset ($MOD_TL_termine["titel"][$MOD_TL_durchlauf]);
unset ($MOD_TL_termine["idart"][$MOD_TL_durchlauf]);
- unset ($MOD_TL_termine["html"][$MOD_TL_durchlauf]);
+ unset ($MOD_TL_termine["html_empty"][$MOD_TL_durchlauf]);
unset ($MOD_TL_termine["link"][$MOD_TL_durchlauf]);
unset ($MOD_TL_termine["linkframe"][$MOD_TL_durchlauf]);
unset ($MOD_TL_termine["kategoriea"][$MOD_TL_durchlauf]);
@@ -540,7 +508,7 @@
$MOD_TL_termine["idart"],
$MOD_TL_termine["ort"],
$MOD_TL_termine["titel"],
- $MOD_TL_termine["html"],
+ $MOD_TL_termine["html_empty"],
$MOD_TL_termine["link"],
$MOD_TL_termine["linkframe"],
$MOD_TL_termine["hightlight"] );
@@ -554,7 +522,7 @@
$MOD_TL_termine["idart"],
$MOD_TL_termine["ort"],
$MOD_TL_termine["titel"],
- $MOD_TL_termine["html"],
+ $MOD_TL_termine["html_empty"],
$MOD_TL_termine["link"],
$MOD_TL_termine["linkframe"],
$MOD_TL_termine["hightlight"] );
@@ -753,7 +721,7 @@
}
else
{
- if ($MOD_TL_termine["html"][$MOD_TL_durchlauf] != '' )
+ if ($MOD_TL_termine["html_empty"][$MOD_TL_durchlauf] == 'no' )
{
$MOD_TL_navmod_link = 'front_content.php?idart='.$MOD_TL_termine["idart"][$MOD_TL_durchlauf].'';
$MOD_TL_link ='<a '.$MOD_TL_titelclass.' href="'.$sess->url("$MOD_TL_navmod_link").'" >'.$MOD_TL_termine["titel"][$MOD_TL_durchlauf].'</a>';