Terminkalender-Modul - welchen Code denn nun?

Gesperrt
creamcandy
Beiträge: 34
Registriert: Di 13. Jun 2006, 17:10
Wohnort: Frankfurt am Main
Kontaktdaten:

Terminkalender-Modul - welchen Code denn nun?

Beitrag von creamcandy » So 25. Jun 2006, 15:35

Hi, ich bastle und suche nun seit Tagen, aber meine Verwirrung nur immer größer.

Was ich will (für Version 4.6.8):
Eine Terminseite mit Übersicht nur der noch aktuellen Termine und auf der Startseite der Homepage die aktuellsten 3 oder so in einem Container.

Ich weiß, dass es das gibt, aber es gibt 1000 Threads mit 1000 verschiedenen Codes zum Kopieren - und Änderungen und dann noch wieder Änderungen - ich blick nicht mehr durch.

Kann mir jemand mitteilen, wo ich einen sicher korrekten Code für meine Bedürfnisse finde? Vor allem, wie ich die Anzeige im Teaser hinbekomme?

Grüße von der verwirrten
Susanne

tono
Beiträge: 574
Registriert: Mo 25. Apr 2005, 20:51
Wohnort: Frankfurt am Main
Kontaktdaten:

Beitrag von tono » Mo 26. Jun 2006, 21:07

Ich habe das so im Einsatz unter hessen.vcp.de. Die Module (ursprünglich von AGON) habe ich allerdings stark angepasst (um mehrere Eigenschaften erweitert). Als Basis für eigene Experimente können sie aber durchaus herhalten.

Und dann fand ich noch diesen Thread: http://www.contenido.org/forum/viewtopi ... ght=termin unter 4.4.x sollte mit wenigen anpassungen auch auf 4.6.x laufen.

Findest du da was, oder soll ich meine Module mal posten?

creamcandy
Beiträge: 34
Registriert: Di 13. Jun 2006, 17:10
Wohnort: Frankfurt am Main
Kontaktdaten:

Beitrag von creamcandy » Di 4. Jul 2006, 13:40

Hi,

ja, es wäre sehr nett, wenn du die Module posten würdest - so wie du sie verwendest, d.h. Termineingabe, Terminübersicht und Terminteaser f.d. Startseite.

In den Wirrwarr von Versionen, Änderungen, Anpassungen usw. usf. find ich mich nicht zurecht. :(

Wenn irgendwann die für Version 4.6.8 gültigen Module irgendwo zusammen gestellt sind, ist das vermutlich einfacher für einen PHP-Deppen wie mich ...

Grüße, Susanne

tono
Beiträge: 574
Registriert: Mo 25. Apr 2005, 20:51
Wohnort: Frankfurt am Main
Kontaktdaten:

Beitrag von tono » Di 4. Jul 2006, 20:41

Hier die von mir verwendeten Module. Sie basieren auf den Modulen von Agon, funktionieren mit 4.6.8.5, und haben mehr Eingabefelder z.B. "Veranstalter", "Anmeldeschluss", "Teilnehmer", "Anmelden bei".

Termineingabe:

Input:leer
Output:

Code: Alles auswählen

<?php
/***********************************************
* CONTENIDO MODUL - OUTPUT
*
* Modulname   :     Termineingabe
* Author      :     agon
* Modified    :     tono
* Copyright   :     Contenido - four for business
* Created     :     22-08-2002
************************************************/


if($edit) // überprüfen, ob im Editiermodus aufgerufen
{
 $submit="";
 echo " <script language=\"JavaScript\" src=\"".$cfg['path']['contenido_fullhtml']."scripts/calendar1.js.php?contenido=".$sess->id."\"></script>"; // Kalender einbinden
 $sql = "SELECT ARTLANG.idartlang, CONTENT.idtype, CONTENT.typeid, CONTENT.value, CONTENT.idcontent
  FROM ".$cfg["tab"]["art_lang"]." AS ARTLANG, ".$cfg["tab"]["content"]." AS CONTENT
  WHERE ARTLANG.idart = ".$idart." AND ARTLANG.idartlang = CONTENT.idartlang
  ORDER BY CONTENT.typeid ASC";
 $db->query($sql); // Artikelangaben einlesen
 if ($db->num_rows() != 0)
 {
  $termin = array();
  $exists = array();
  $db->next_record();
  $idartlang = $db->f("idartlang");
  for ($i=0; $i<$db->num_rows(); $i++)
  {
   if ( $db->f("idtype") == 3 )
   {
    $j = $db->f("typeid");
    $termin[$j] = $db->f("value");
    $exists[$j] = 1;
   }
  $db->next_record();
  }
 }
 if($termin[6]=="") // falls noch kein Titel eingetragen, Seitentitel einlesen
 {
  $sql = "SELECT ARTLANG.title
   FROM ".$cfg["tab"]["art_lang"]." AS ARTLANG
   WHERE ARTLANG.idart = ".$idart."";
  $db->query($sql);
  $db->next_record();
  $termin[6] = $db->f("title");
 }
 if($senden==1) // falls das Terminformular abgeschickt wurde, Daten in Datenbank schreiben
 {
  $senden=0;
  $date = date("Y-m-d H:i:s");
  $author = $auth->auth["uname"];
  if (strlen($datum1)==10)
  {
   $termin[0] = $datum1;
  } else
  {
   $termin[0] = "";
  }
  $termin[1] = $zeit1;
  if (strlen($datum2)==10 && $datum2 >= $datum1)
  {
   $termin[2] = $datum2;
  } else
  {
   $termin[2] = "";
  }
  $termin[3] = $zeit2;
  $termin[4] = $ort1;
  $termin[5] = $ort2;
  $termin[6] = $titel;
  $termin[7] = $veranstalter;
  $termin[8] = $anmeldeschluss;
  $termin[9] = $anmeldung;
  $termin[10] = $kosten;
  $termin[11] = $teilnehmer;
  for ($i=0; $i<=11; $i++)
  {
   if($exists[$i]==1)
   {
    $sql = "UPDATE ".$cfg["tab"]["content"]."
     SET value='".$termin[$i]."', lastmodified='".$date."'
     WHERE idartlang = ".$idartlang." AND idtype='3' AND typeid='".$i."'";
    $db->query($sql);
   } else
   {
    $sql = "INSERT INTO ".$cfg["tab"]["content"]."
     (idcontent, idartlang, idtype, typeid, value, author, created, lastmodified)
      VALUES('".$db->nextid($cfg["tab"]["content"])."', '".$idartlang."', '3', '".$i."', '".$termin[$i]."', '".$author."', '".$date."', '".$date."')";
    $db->query($sql);
   }
  }
 }
 // ab hier das Formular für die Editieransicht
 echo "<form action=\"http://web12.vcp.de".$REQUEST_URI."\" method=\"post\" name=\"eintrag\">
<table border=0 cellspacing=2 cellpadding=1>
 <tr>
  <td>Titel</td>
  <td><input type=\"text\" name=\"titel\" value=\"".urldecode(stripslashes($termin[6]))."\" size=27 class=Input></td>
 </tr>
 <tr>
  <td nowrap>Startdatum <b class=klein>jjjj-mm-tt</b></td>
  <td><input type=\"text\" name=\"datum1\" value=\"".$termin[0]."\" size=11 class=Input>
   <a href=\"javascript:startcal.popup('','".$cfg['path']['contenido_fullhtml']."templates/standard/');\">
   <img src=\"".$cfg['path']['contenido_fullhtml']."images/calendar.gif\" width=16 height=16 border=0 alt=\"Startzeitpunkt w&auml;hlen\"></a></td>
 </tr>
 <tr>
  <td>Start-Uhrzeit <b class=klein>hh:mm</b></td>
  <td><input type=\"text\" name=\"zeit1\" value=\"".$termin[1]."\" size=6 class=Input></td>
  <td class=klein>(kann auch leer bleiben)</td>
 </tr>
 <tr>
  <td>Enddatum <b class=klein>jjjj-mm-tt</b></td>
  <td><input type=\"text\" name=\"datum2\" value=\"".$termin[2]."\" size=11 class=Input>
   <a href=\"javascript:endcal.popup('','".$cfg['path']['contenido_fullhtml']."templates/standard/');\">
   <img src=\"".$cfg['path']['contenido_fullhtml']."images/calendar.gif\" width=16 height=16 border=0 alt=\"Startzeitpunkt w&auml;hlen\"></a></td>
  <td class=klein>(kann auch leer bleiben)</td>
 </tr>
 <tr>
  <td>End-Uhrzeit <b class=klein>hh:mm</b></td>
  <td><input type=\"text\" name=\"zeit2\" value=\"".$termin[3]."\" size=6 class=Input></td>
  <td class=klein>(kann auch leer bleiben)</td>
 </tr>
 <tr>
  <td>Ort</td>
  <td><input type=\"text\" name=\"ort1\" value=\"".urldecode(stripslashes($termin[4]))."\" size=20 class=Input></td>
  <td class=klein>(erscheint <i>auch</i> in der &Uuml;bersicht)</td>
 </tr>
 <tr>
  <td>Ort - Detail</td>
  <td><input type=\"text\" name=\"ort2\" value=\"".urldecode(stripslashes($termin[5]))."\" size=27 class=Input></td>
  <td class=klein>(erscheint <i>nicht</i> in der &Uuml;bersicht)</td>
 </tr>
 <tr>
  <td>Veranstalter</td>
  <td><input type=\"text\" name=\"veranstalter\" value=\"".urldecode(stripslashes($termin[7]))."\" size=27 class=Input></td>
  <td class=klein>(erscheint <i>nicht</i> in der &Uuml;bersicht)</td>
 </tr>
 <tr>
  <td>Teilnehmer</td>
  <td><input type=\"text\" name=\"teilnehmer\" value=\"".urldecode(stripslashes($termin[11]))."\" size=27 class=Input></td>
  <td class=klein>(erscheint <i>nicht</i> in der &Uuml;bersicht)</td>
 </tr>
 <tr>
  <td>Anmeldeschluss <b class=klein>jjjj-mm-tt</b></td>
  <td><input type=\"text\" name=\"anmeldeschluss\" value=\"".$termin[8]."\" size=11 class=Input>
   <a href=\"javascript:schlusscal.popup('','".$cfg['path']['contenido_fullhtml']."templates/standard/');\">
   <img src=\"".$cfg['path']['contenido_fullhtml']."images/calendar.gif\" width=16 height=16 border=0 alt=\"Anmeldeschluss w&auml;hlen\"></a></td>
  <td class=klein>(kann auch leer bleiben)</td>
 </tr>
 <tr>
  <td>Anmeldung bei</td>
  <td><input type=\"text\" name=\"anmeldung\" value=\"".urldecode(stripslashes($termin[9]))."\" size=27 class=Input></td>
  <td class=klein>(erscheint <i>nicht</i> in der &Uuml;bersicht)</td>
 </tr>
 <tr>
  <td>Kosten</td>
  <td><input type=\"text\" name=\"kosten\" value=\"".urldecode(stripslashes($termin[10]))."\" size=27 class=Input></td>
  <td class=klein>(erscheint <i>nicht</i> in der &Uuml;bersicht)</td>
 </tr>
  <td colspan=3 align=center>
   <input type=\"submit\" value=\" Absenden \" class=InputButton>&nbsp;&nbsp;<input type=\"hidden\" name=\"senden\" value=1>
   <input type=\"reset\" value=\" Abbrechen \" class=InputButton>
  </td>
 </tr>
</table>
</f"."orm>
<p>Beschreibung / Inhalte: CMS_HTML[7]</p>
<p>Link zum Artikel: <a href=\"CMS_LINK[1]\">CMS_LINKDESCR[1]</a><p>
<script language=\"JavaScript\">
 var startcal = new calendar1(document.forms['eintrag'].elements['datum1']);
 startcal.year_scroll = true;
 startcal.time_comp = false;
 var endcal = new calendar1(document.forms['eintrag'].elements['datum2']);
 endcal.year_scroll = true;
 endcal.time_comp = false;
 var schlusscal = new calendar1(document.forms['eintrag'].elements['anmeldeschluss']);
 endcal.year_scroll = true;
 endcal.time_comp = false;
</script>";
} else // ab hier Terminausgabe für Frontend-Ansicht bzw. Vorschau
{
 $tag1 = substr("CMS_TEXT[0]",8,2);
 $monat1 = substr("CMS_TEXT[0]",5,2);
 $jahr1 = substr("CMS_TEXT[0]",0,4);
 $tag2 = substr("CMS_TEXT[2]",8,2);
 $monat2 = substr("CMS_TEXT[2]",5,2);
 $jahr2 = substr("CMS_TEXT[2]",0,4);
 $tag3 = substr("CMS_TEXT[8]",8,2);
 $monat3 = substr("CMS_TEXT[8]",5,2);
 $jahr3 = substr("CMS_TEXT[8]",0,4);
 $datum1 = $tag1.".".$monat1.".".$jahr1;
 $datum2 = $tag2.".".$monat2.".".$jahr2;
 $datum3 = $tag3.".".$monat3.".".$jahr3;
 $date1 = getdate(mktime(0,0,0,$monat1,$tag1,$jahr1));
 $date2 = getdate(mktime(0,0,0,$monat2,$tag2,$jahr2));
 $date3 = getdate(mktime(0,0,0,$monat3,$tag3,$jahr3));
 $wday1=$date1[wday];
 $wday2=$date2[wday];
 $wday3=$date3[wday];
 $wochentag = array("Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag");
 echo "<h1>CMS_TEXT[6]</h1>
<p>&nbsp;&nbsp;".$wochentag[$wday1].", ".$datum1;
if ( "CMS_TEXT[1]"!=="" )
{
 echo ", CMS_TEXT[1]";
 if ( "CMS_TEXT[3]"=="" )
 {
  echo " Uhr";
 }
}
if ( strlen($datum2)==10 || "CMS_TEXT[3]"!=="" )
{
 echo " - ";
 if ( strlen($datum2)==10 )
 {
  echo $wochentag[$wday2].", ".$datum2;
 }
 if ( strlen($datum2)==10 && "CMS_TEXT[3]"!=="" )
 {
  echo ', ';
 }
 if ( "CMS_TEXT[3]"!=="" )
 {
  echo "CMS_TEXT[3] Uhr";
 }
}
echo "</p>
<p>&nbsp;&nbsp;<b>CMS_TEXT[4]</b>";
if ( "CMS_TEXT[5]" )
{
 echo ", CMS_TEXT[5]";
}
echo "</p>";

if ( "CMS_TEXT[7]"!=="" )
 {
  echo "<p>&nbsp;&nbsp;<b>Veranstalter:&nbsp;</b>";
  echo "CMS_TEXT[7]</p>";
 }

if ( "CMS_TEXT[11]"!=="" )
 {
  echo "<p>&nbsp;&nbsp;<b>Teilnehmer:&nbsp;</b>";
  echo "CMS_TEXT[11]</p>";
 }

if ( strlen($datum3)==10 )
 {
  echo "<p>&nbsp;&nbsp;<b>Anmeldeschluss:&nbsp;</b>";
  echo $wochentag[$wday3].", ".$datum3."</p>";
 }

if ( "CMS_TEXT[9]"!=="" )
 {
  echo "<p>&nbsp;&nbsp;<b>Anmeldung bei:&nbsp;</b>";
  echo "CMS_TEXT[9]</p>";
 }

if ( "CMS_TEXT[10]"!=="" )
 {
  echo "<p>&nbsp;&nbsp;<b>Kosten:&nbsp;</b>";
  echo "CMS_TEXT[10]</p>";
 }

echo" <p><br />CMS_HTML[7]</p>";
if ("CMS_LINK[1]" != "http://")
  echo "<p><a href=\"CMS_LINK[1]\">Der Artikel zu dieser Veranstaltung</a></p>";
$navmod_link ="front_content.php?client=".$client."&lang=".$lang."&idcat=".$idcat."";
echo '<p><a href="'.$sess->url("$navmod_link").'" id="font">Zur&uuml;ck zur Termin&uuml;bersicht</a></p>';
}

?>
Terminausgabe:

Input: leer

Output:

Code: Alles auswählen

/***********************************************
* CONTENIDO MODUL - OUTPUT
*
* Modulname   :     Terminausgabe
* Author      :     agon
* Modified    :     tono
* Copyright   :     Contenido - four for business
* Created     :     22-08-2002
************************************************/


<?php
$gefunden=0; // um zu überprüfen, ob überhaupt Termine vorliegen
$date = date("Y-m-d");
echo "<h1>CMS_HEAD[1]</h1>"; // Überschrift der Seite mit der Termin-Übersicht


if ($edit)
{
   echo "<br />";
   echo '<img src="CMS_IMG[1]" height="50" width="50" />';
   echo "CMS_IMGDESCR[1]";
}

echo '<table class="terminausgabe">';

$sql = "SELECT ARTLANG.idart, CONTENT.value, CONTENT.typeid, ARTLANG.idartlang
FROM ".$cfg["tab"]["cat_art"]." AS CATART, ".$cfg["tab"]["art_lang"]." AS ARTLANG, ".$cfg["tab"]["cat"]." AS CAT, ".$cfg["tab"]["content"]." AS CONTENT
WHERE ARTLANG.idart = CATART.idart AND CATART.idcat = CAT.idcat AND ARTLANG.idartlang = CONTENT.idartlang
AND ARTLANG.idlang = '".$lang."' AND CAT.idcat = '".$idcat."' AND CAT.idclient = '".$client."'
AND ARTLANG.online = '1' AND CATART.is_start='0'
ORDER BY ARTLANG.idart, CONTENT.typeid ASC"; // Alle Artikel der Kategorie einlesen, die nicht Startartikel (= Terminübersicht) sind
$db->query($sql);
$j=0; $anz=0;
if ($db->num_rows() != 0)
{
 $termin = array(array()); // Array erzeugen, in dem die Termine abgelegt werden;
 while ($j < $db->num_rows()) // alle Datensätze durchlaufen
 {
  $db->next_record();
  if ($db->f("idart") > $termin["idart"][$anz])
  {
   $anz++;
  }
  if (isStartArticle($db->f("idartlang"),$idcat,$lang)==FALSE) {
      switch ($db->f("typeid")) {
       case 0: // Anfangstermin
        $termin["datum1"][$anz] = $db->f("value");
        $termin["jahr1"][$anz] = substr($db->f("value"),0,4);
        $termin["monat1"][$anz] = substr($db->f("value"),5,2);
        $termin["tag1"][$anz] = substr($db->f("value"),8,2);
        $termin["idart"][$anz] = $db->f("idart");
       break;
       case 1: // Anfangsuhrzeit
        $termin["zeit1"][$anz] = $db->f("value");
        $termin["datum1"][$anz] = $termin["datum1"][$anz]." ".$termin["zeit1"][$anz];
       break;
       case 2: // Endtermin
        $termin["datum2"][$anz] = $db->f("value");
        $termin["jahr2"][$anz] = substr($db->f("value"),0,4);
        $termin["monat2"][$anz] = substr($db->f("value"),5,2);
        $termin["tag2"][$anz] = substr($db->f("value"),8,2);
       break;
       case 3: // Enduhrzeit
        $termin["zeit2"][$anz] = $db->f("value");
        $termin["datum2"][$anz] = $termin["datum2"][$anz]." ".$termin["zeit2"][$anz];
       break;
       case 4: // Ort
        $termin["ort"][$anz] = $db->f("value");
       break;
       case 6: // Titel
        $termin["titel"][$anz] = $db->f("value");
       break;
      }

  }
  $j++;
 }
 array_multisort ( $termin["datum1"], SORT_ASC, SORT_STRING, $termin["datum2"], SORT_ASC, SORT_STRING,
  $termin["jahr1"], $termin["monat1"], $termin["tag1"], $termin["zeit1"],
  $termin["jahr2"], $termin["monat2"], $termin["tag2"], $termin["zeit2"],
  $termin["idart"], $termin["ort"], $termin["titel"] ); // nach Datum sortieren
 for ($i=0; $i<=$anz; $i++)
 {
  if ( $termin["datum1"][$i] >= $date || $termin[$i]["datum2"] >= $date ) // nur Termine, die noch aktuell sind, aufnehmen
  {
   if ( $termin["monat1"][$i] !== $termin["monat1"][$i-1] || $gefunden == 0 ) // überprüfen, ob Monatsnahme einzufügen ist
   {
    echo '
 <tr>
  <td colspan="3"><h2>';
    switch ($termin["monat1"][$i]) {
     case 1: echo "Januar"; break;
     case 2: echo "Februar"; break;
     case 3: echo "März"; break;
     case 4: echo "April"; break;
     case 5: echo "Mai"; break;
     case 6: echo "Juni"; break;
     case 7: echo "Juli"; break;
     case 8: echo "August"; break;
     case 9: echo "September"; break;
     case 10: echo "Oktober"; break;
     case 11: echo "November"; break;
     case 12: echo "Dezember"; break; }
    if ( $i>1 && $termin["jahr1"][$i] != $termin["jahr1"][$i-1] ) // überprüfen, ob Jahr einzufügen ist
    {
     echo ' '.$termin["jahr1"][$i];
    }
    echo '</h2></td>
 </tr>';
   }
   $gefunden=1;
   echo ' <tr>
  <td><p>'.$termin["tag1"][$i].'.'; // Anfangsdatum ausgeben
   if ( strlen($termin["tag2"][$i]) < 2 && strlen($termin["zeit1"][$i]) >1 ) // falls kein Enddatum (Eintagestermin), aber Anfangszeit, diese ausgeben
   {
    echo '</p><p> ['.$termin["zeit1"][$i].' h]';
   } elseif ( strlen($termin["tag2"][$i]) > 1 ) // falls Enddatum (Mehrtagestermin), dieses ausgeben
   {
    echo ' - '.$termin["tag2"][$i].'.';
    if ( $termin["monat2"][$i] != $termin["monat1"][$i]) // falls Enddatum nicht im gleichem Monat
    {
     echo $termin["monat2"][$i].'.';
     if ( $termin["jahr2"][$i] != $termin["jahr1"][$i]) // falls Enddatum nicht im gleichen Jahr
     {
      echo substr($termin["jahr2"][$i],2,2).'.';
     }
    }
    echo '</p></td>';
   } else
   {
    echo '</p></td>';
   }
   $navmod_link ="front_content.php?client=".$client."&lang=".$lang."&idcat=".$idcat."&idart=".$termin["idart"][$i]."";
   echo '
  <td><p><a href="'.$sess->url("$navmod_link").'">'.urldecode($termin["titel"][$i]).'</a></p></td>
  <td><p>'.urldecode($termin["ort"][$i]).'</p></td>
 </tr>';
  }
 }
}
if ( $gefunden == 0 ) // falls kein aktueller Termin vorliegt
{
 echo ' <tr>
  <td colspan=3><b>Es liegen aktuell keine Termine vor!</b></td>
 </tr>';
}
?>
</table> 
Terminteaser:

Input:

Code: Alles auswählen

echo "Terminkategorie: <select name=\"CMS_VAR[1]\" size=\"7\">";
if ("CMS_VALUE[1]" != 0)
   {
   echo "<option value=\"0\">--- aktuell ---</option>";
   }
   else {
   echo "<option value=\"0\" selected>--- aktuell ---</option>";
   }
$sql = "SELECT A.idcat, A.level, C.name FROM ".$cfg['tab']['cat_tree']." AS A, ".$cfg['tab']['cat']." AS B, ".$cfg['tab']['cat_lang']." AS C WHERE A.idcat=B.idcat AND B.idcat=C.idcat AND C.idlang='".$lang."' AND B.idclient='".$client."' ORDER BY A.idtree;";
$db->query($sql);
while ($db->next_record()) 
   {
   $spaces = "";
   for ($i=0; $i<$db->f("level"); $i++)
      {
      $spaces = $spaces . "&nbsp;&nbsp;";
      }
   if ( $db->f("idcat") == "CMS_VALUE[1]")
      {
      echo "<option value=\"".$db->f("idcat")."\" selected>$spaces ".$db->f("name")."</option>";
      }
      else {
      echo "<option value=\"".$db->f("idcat")."\">$spaces ".$db->f("name")."</option>";
      }
   }
echo "</select>\n<br />";
Output:

Code: Alles auswählen

<?php
$terminidcat="CMS_VALUE[1]";

$gefunden=0; // um zu überprüfen, ob überhaupt Termine vorliegen
$date = date("Y-m-d");

echo '<h2>Termine</h2>';
echo '<table>';

$sql = "SELECT ARTLANG.idart, CONTENT.value, CONTENT.typeid, ARTLANG.idartlang
FROM ".$cfg["tab"]["cat_art"]." AS CATART, ".$cfg["tab"]["art_lang"]." AS ARTLANG, ".$cfg["tab"]["cat"]." AS CAT, ".$cfg["tab"]["content"]." AS CONTENT
WHERE ARTLANG.idart = CATART.idart AND CATART.idcat = CAT.idcat AND ARTLANG.idartlang = CONTENT.idartlang
AND ARTLANG.idlang = '".$lang."' AND CAT.idcat = '".$terminidcat."' AND CAT.idclient = '".$client."'
AND ARTLANG.online = '1' AND CATART.is_start='0'
ORDER BY ARTLANG.idart, CONTENT.typeid ASC"; // Alle Artikel der Kategorie einlesen, die nicht Startartikel (= Terminübersicht) sind
$db->query($sql);
$j=0; $anz=0;
if ($db->num_rows() != 0)
{
 $termin = array(array()); // Array erzeugen, in dem die Termine abgelegt werden;
 while ($j < $db->num_rows()) // alle Datensätze durchlaufen
 {
  $db->next_record();
  if ($db->f("idart") > $termin["idart"][$anz])
  {
   $anz++;
  }
  if (isStartArticle($db->f("idartlang"),$terminidcat,$lang)==FALSE) {
      switch ($db->f("typeid")) {
       case 0: // Anfangstermin
        $termin["datum1"][$anz] = $db->f("value");
        $termin["jahr1"][$anz] = substr($db->f("value"),0,4);
        $termin["monat1"][$anz] = substr($db->f("value"),5,2);
        $termin["tag1"][$anz] = substr($db->f("value"),8,2);
        $termin["idart"][$anz] = $db->f("idart");
       break;
       case 1: // Anfangsuhrzeit
        $termin["zeit1"][$anz] = $db->f("value");
        $termin["datum1"][$anz] = $termin["datum1"][$anz]." ".$termin["zeit1"][$anz];
       break;
       case 2: // Endtermin
        $termin["datum2"][$anz] = $db->f("value");
        $termin["jahr2"][$anz] = substr($db->f("value"),0,4);
        $termin["monat2"][$anz] = substr($db->f("value"),5,2);
        $termin["tag2"][$anz] = substr($db->f("value"),8,2);
       break;
       case 3: // Enduhrzeit
        $termin["zeit2"][$anz] = $db->f("value");
        $termin["datum2"][$anz] = $termin["datum2"][$anz]." ".$termin["zeit2"][$anz];
       break;
       case 4: // Ort
        $termin["ort"][$anz] = $db->f("value");
       break;
       case 6: // Titel
        $termin["titel"][$anz] = $db->f("value");
       break;
      }

  }
  $j++;
 }
 array_multisort ( $termin["datum1"], SORT_ASC, SORT_STRING, $termin["datum2"], SORT_ASC, SORT_STRING,
  $termin["jahr1"], $termin["monat1"], $termin["tag1"], $termin["zeit1"],
  $termin["jahr2"], $termin["monat2"], $termin["tag2"], $termin["zeit2"],
  $termin["idart"], $termin["ort"], $termin["titel"] ); // nach Datum sortieren
 for ($i=0; $i<=$anz; $i++)
 {
  if ( $termin["datum1"][$i] >= $date || $termin[$i]["datum2"] >= $date ) // nur Termine, die noch aktuell sind, aufnehmen
  {
   if ( $termin["monat1"][$i] !== $termin["monat1"][$i-1] || $gefunden == 0 ) // überprüfen, ob Monatsnahme einzufügen ist
   {
    echo '
 <tr>
  <td colspan="2"><h3>';
    switch ($termin["monat1"][$i]) {
     case 1: echo "Januar"; break;
     case 2: echo "Februar"; break;
     case 3: echo "März"; break;
     case 4: echo "April"; break;
     case 5: echo "Mai"; break;
     case 6: echo "Juni"; break;
     case 7: echo "Juli"; break;
     case 8: echo "August"; break;
     case 9: echo "September"; break;
     case 10: echo "Oktober"; break;
     case 11: echo "November"; break;
     case 12: echo "Dezember"; break; }
    if ( $i>1 && $termin["jahr1"][$i] != $termin["jahr1"][$i-1] ) // überprüfen, ob Jahr einzufügen ist
    {
     echo ' '.$termin["jahr1"][$i];
    }
    echo '</h3></td>
 </tr>';
   }
   $gefunden=1;
   $ausgegeben++;

   echo ' <tr>
  <td><p>'.$termin["tag1"][$i].'.'; // Anfangsdatum ausgeben
   if ( strlen($termin["tag2"][$i]) < 2 && strlen($termin["zeit1"][$i]) >1 ) // falls kein Enddatum (Eintagestermin), aber Anfangszeit, diese ausgeben
   {
    echo '</p><p> ['.$termin["zeit1"][$i].' h]';
   } elseif ( strlen($termin["tag2"][$i]) > 1 ) // falls Enddatum (Mehrtagestermin), dieses ausgeben
   {
    echo ' - '.$termin["tag2"][$i].'.';
    if ( $termin["monat2"][$i] != $termin["monat1"][$i]) // falls Enddatum nicht im gleichem Monat
    {
     echo $termin["monat2"][$i].'.';
     if ( $termin["jahr2"][$i] != $termin["jahr1"][$i]) // falls Enddatum nicht im gleichen Jahr
     {
      echo substr($termin["jahr2"][$i],2,2).'.';
     }
    }
    echo '</p></td>';
   } else
   {
    echo '</p></td>';
   }
   $navmod_link ="front_content.php?client=".$client."&lang=".$lang."&idcat=".$terminidcat."&idart=".$termin["idart"][$i]."";
   echo '
  <td><p><a href="'.$sess->url("$navmod_link").'">'.urldecode($termin["titel"][$i]).'</a></p></td>
 </tr>';
   if ($ausgegeben > 3) break;  // Wenn mehr als 3 Termine ausgegeben sind abbrechen.
  }
 }
}
if ( $gefunden == 0 ) // falls kein aktueller Termin vorliegt
{
 echo ' <tr>
  <td colspan=3><b>Es liegen aktuell keine Termine vor!</b></td>
 </tr>';
}
?>
</table>
Die Anzahl der geteasten Termine ist in dieser Zeile versteckt:

Code: Alles auswählen

   if ($ausgegeben > 3) break;  // Wenn mehr als 3 Termine ausgegeben sind abbrechen.
Wenn ichs mir recht überlege sollte das Teasermodul auch mit den Originalmodulen zusammenarbeiten, denn an den interna hab ich nix geändert.

Hoffe das hilft.

creamcandy
Beiträge: 34
Registriert: Di 13. Jun 2006, 17:10
Wohnort: Frankfurt am Main
Kontaktdaten:

Beitrag von creamcandy » Mi 5. Jul 2006, 00:35

Danke erstmal. Leider geht es noch nicht richtig:

In der Terminübersicht und im Teaser erscheint kein Wochentag, nur der erste Teil des Startdatums (Tag). Das sieht seltsam aus. Etwa so:

05.
Titel des Termins
[20:00]

Was tun?

Gruß, Susanne

Noch eine Idee/Frage: Ginge es, den ganzen Teaser komplett auszublenden, wenn keine Termine da sind?

tono
Beiträge: 574
Registriert: Mo 25. Apr 2005, 20:51
Wohnort: Frankfurt am Main
Kontaktdaten:

Beitrag von tono » Do 6. Jul 2006, 20:24

Das geht schon richtig. Genau so soll es aussehen (bei mir zumindest). Wie solls denn bei Dir aussehen??

Von einem Wochentag stand in Deinem ursprünglichen Post nix. Da stand nur: "ich brauche fuktionierende Module mit Teaser".

Wie siehts denn mit deinen PHP-Kenntnisen aus? Aus dem Termineingabemodul kann man den Wochentagcode leicht raussuchen und in den Teaser oder die Terminübersicht einbauen.

schlaucher
Beiträge: 444
Registriert: Mi 14. Sep 2005, 10:38
Wohnort: Karlsruhe
Kontaktdaten:

Beitrag von schlaucher » Fr 7. Jul 2006, 09:18

Hi tono,

ich habe Deine Version der Terminein und -ausgabe im Einsatz. Es funktioniert soweit auch ganz gut. Ich hatte da nur ein Problem:

Wenn ich einen Termin mit Anfang- und Enddatum eingab, wurde der Artikel nicht mehr angezeigt, sobald der Anfangstermin abgelaufen ist.

Der Fehler war im Script:

Original:

Code: Alles auswählen

if ( $termin["datum1"][$i] >= $date || $termin[$i]["datum2"] >= $date ) // nur Termine, die noch aktuell sind, aufnehmen 
geändert: ($termin["datum2"][$i])

Code: Alles auswählen

if ( $termin["datum1"][$i] >= $date || $termin["datum2"][$i] >= $date ) // nur Termine, die noch aktuell sind, aufnehmen 
Nun habe ich aktuell noch folgendes Problem:

Ein Termin geht über 2 Monate z.B. 01.06. - 31.07. In der Anzeige erscheint er richtig unter Juni 2006, aber für alle folgenden Termine des Juli (ab dem 2. Termin am 07.), erscheint die Monatsüberschrift Juli 2006 nicht.

Beispiel:

Bild

Ich wühle mich zwar durch den Code, aber vielleicht fällt Dir ja schneller was ein.

Gruß
schlaucher

creamcandy
Beiträge: 34
Registriert: Di 13. Jun 2006, 17:10
Wohnort: Frankfurt am Main
Kontaktdaten:

Beitrag von creamcandy » Fr 7. Jul 2006, 09:18

PHP? Oh je! Ich würde vermutlich Murks produzieren.
Könntest du mir die betreffenden Zeilen ändern? So, dass der Wochentag vor dem Datum steht, z.B. so:

Freitag, 13. 7.
Treffen bei Fritze
00:15 Uhr


Das wäre wirklich sehr nett.

Grüße, Susanne

schlaucher
Beiträge: 444
Registriert: Mi 14. Sep 2005, 10:38
Wohnort: Karlsruhe
Kontaktdaten:

Beitrag von schlaucher » Fr 7. Jul 2006, 11:04

@creamcandy

hatte das gleiche Problem und wie folgt gelöst:

Am Anfang des Scripts ein Array definieren:

Code: Alles auswählen

$tage = array("So","Mo","Di","Mi","Do","Fr","Sa");
Die Tage können auch ausgeschrieben werden.

Im Script bei der Ausgabe folgenden Code einfügen:

Code: Alles auswählen

$wtag1 = getdate(mktime(0,0,0,$termin["monat1"][$i],$termin["tag1"][$i],$termin["jahr1"][$i]));
echo '
<td><p><strong>'.$tage[$wtag1["wday"]].', </strong>'.$termin["tag1"][$i].'.'; // Anfangsdatum ausgeben 
das gleiche gilt für das 2. Datum:

Code: Alles auswählen

$wtag2 = getdate(mktime(0,0,0,$termin["monat2"][$i],$termin["tag2"][$i],$termin["jahr2"][$i]));
echo ' - <br><strong>'.$tage[$wtag2["wday"]].', </strong>'.$termin["tag2"][$i].'.'; 
Gruß
schlaucher

schlaucher
Beiträge: 444
Registriert: Mi 14. Sep 2005, 10:38
Wohnort: Karlsruhe
Kontaktdaten:

Beitrag von schlaucher » Fr 7. Jul 2006, 12:24

@tono

Fehler mit den fehlenden Monatsüberschriften gefunden!!!

Problem:
Ein Termin geht über 2 Monate z.B. 01.06. - 31.07. In der Anzeige erscheint er richtig unter Juni 2006, aber für alle folgenden Termine des Juli (ab dem 2. Termin am 07.), erscheint die Monatsüberschrift Juli 2006 nicht.
Fehler:
Es gab im Juli bereits abgelaufene Termine, die nicht mehr angezeigt wurden. Im Code wurde aber nach dem Monat des vorherigen Datensatzes geprüft, egal ob angezeigt oder nicht.

Code: Alles auswählen

if ( $termin["monat1"][$i] !== $termin["monat1"][$i-1] || $gefunden == 0 ) // überprüfen, ob Monatsname einzufügen ist 
dadurch wurde die Monatsüberschrift unterdrückt.

Lösung:

Änderung der "If Abfrage" und einfügen einer zusätzlichen Variable am Ende der "For Schleife"

Code: Alles auswählen

    for ($i=0; $i<=$anz; $i++) 
        { 
        if ( $termin["datum1"][$i] >= $date || $termin["datum2"][$i] >= $date ) // nur Termine, die noch aktuell sind, aufnehmen 
            { 
            if ( $termin["monat1"][$i] != $lastmonth || $gefunden == 0 ) // überprüfen, ob Monatsnahme einzufügen ist 
                { 
                ...
                ...
                }
                
                ...
                ...
        
            
            $lastmonth = $termin["monat1"][$i];
            }  
        } 

und noch eine kleine Korrektur:

Wenn noch keine Termine in der Kategorie stehen, dann erhielt man eine Fehlermeldung beim array_multisort() Befehl

Durch Änderung des Codes:

Code: Alles auswählen

if ($db->num_rows() != 0)
nach

Code: Alles auswählen

if ($db->num_rows() > 0)
läuft das Script nicht auf Fehler.

Hier mein kompletter Code:

Code: Alles auswählen

<?php 
/*********************************************** 
* CONTENIDO MODUL - OUTPUT 
* 
* Modulname   :     Terminausgabe 
* Author      :     agon 
* Modified    :     tono
* Modified    :     schlaucher - 07.07.2006
* Copyright   :     Contenido - four for business 
* Created     :     22-08-2002 
************************************************/ 

$gefunden=0; // um zu überprüfen, ob überhaupt Termine vorliegen 
$date = date("Y-m-d"); 
$tage = array("So","Mo","Di","Mi","Do","Fr","Sa");
$farbe=0;

echo '<table width="458" border="0" cellspacing="0" cellpadding="5" class="text">'; 

$sql = "SELECT ARTLANG.idart, CONTENT.value, CONTENT.typeid, ARTLANG.idartlang 
    FROM ".$cfg["tab"]["cat_art"]." AS CATART, ".$cfg["tab"]["art_lang"]." AS ARTLANG, ".$cfg["tab"]["cat"]." AS CAT, ".$cfg["tab"]["content"]." AS CONTENT 
    WHERE ARTLANG.idart = CATART.idart AND CATART.idcat = CAT.idcat AND ARTLANG.idartlang = CONTENT.idartlang 
    AND ARTLANG.idlang = '".$lang."' AND CAT.idcat = '".$idcat."' AND CAT.idclient = '".$client."' 
    AND ARTLANG.online = '1' AND CATART.is_start='0' 
    ORDER BY ARTLANG.idart, CONTENT.typeid ASC"; // Alle Artikel der Kategorie einlesen, die nicht Startartikel (= Terminübersicht) sind 

$db->query($sql); 
$j=0; $anz=0; 
if ($db->num_rows() > 0) 
    { 
    $termin = array(array()); // Array erzeugen, in dem die Termine abgelegt werden; 
    while ($j < $db->num_rows()) // alle Datensätze durchlaufen 
        { 
        $db->next_record(); 
        if ($db->f("idart") > $termin["idart"][$anz]) 
            { 
            $anz++; 
            } 
        if (isStartArticle($db->f("idartlang"),$idcat,$lang)==FALSE) 
            { 
            switch ($db->f("typeid")) 
                { 
                case 0: // Anfangstermin 
                    $termin["datum1"][$anz] = $db->f("value"); 
                    $termin["jahr1"][$anz] = substr($db->f("value"),0,4); 
                    $termin["monat1"][$anz] = substr($db->f("value"),5,2); 
                    $termin["tag1"][$anz] = substr($db->f("value"),8,2); 
                    $termin["idart"][$anz] = $db->f("idart"); 
                    break; 
                case 1: // Anfangsuhrzeit 
                    $termin["zeit1"][$anz] = $db->f("value"); 
                    $termin["datum1"][$anz] = $termin["datum1"][$anz]." ".$termin["zeit1"][$anz]; 
                    break; 
                case 2: // Endtermin 
                    $termin["datum2"][$anz] = $db->f("value"); 
                    $termin["jahr2"][$anz] = substr($db->f("value"),0,4); 
                    $termin["monat2"][$anz] = substr($db->f("value"),5,2); 
                    $termin["tag2"][$anz] = substr($db->f("value"),8,2); 
                    break; 
                case 3: // Enduhrzeit 
                    $termin["zeit2"][$anz] = $db->f("value"); 
                    $termin["datum2"][$anz] = $termin["datum2"][$anz]." ".$termin["zeit2"][$anz]; 
                    break; 
                case 4: // Ort 
                    $termin["ort"][$anz] = $db->f("value"); 
                    break; 
                case 6: // Titel 
                    $termin["titel"][$anz] = $db->f("value"); 
                    break; 
                } 

            } 
        $j++; 
        } 


    array_multisort ( $termin["datum1"], SORT_ASC, SORT_STRING, $termin["datum2"], SORT_ASC, SORT_STRING, 
        $termin["jahr1"], $termin["monat1"], $termin["tag1"], $termin["zeit1"], 
        $termin["jahr2"], $termin["monat2"], $termin["tag2"], $termin["zeit2"], 
        $termin["idart"], $termin["ort"], $termin["titel"] ); // nach Datum sortieren 
 
    for ($i=0; $i<=$anz; $i++) 
        { 
        //if ( $termin["datum1"][$i] >= $date || $termin["datum1"][$i] <= $date || $termin["datum2"][$i] <= $date || $termin["datum2"][$i] <= $date)        
        if ( $termin["datum1"][$i] >= $date || $termin["datum2"][$i] >= $date ) // nur Termine, die noch aktuell sind, aufnehmen 
            { 
            if ( $termin["monat1"][$i] != $lastmonth ) // überprüfen, ob Monatsname einzufügen ist 
                { 
                echo ' 
                <tr> 
                    <td colspan="3" class="headline" style="border: 1px; border-left: 0px; border-right:0px; border-color: #444444; border-style: solid; color: #D66321">';                        
                        switch ($termin["monat1"][$i]) 
                            { 
                            case 1: echo "Januar"; break; 
                            case 2: echo "Februar"; break; 
                            case 3: echo "März"; break; 
                            case 4: echo "April"; break; 
                            case 5: echo "Mai"; break; 
                            case 6: echo "Juni"; break; 
                            case 7: echo "Juli"; break; 
                            case 8: echo "August"; break; 
                            case 9: echo "September"; break; 
                            case 10: echo "Oktober"; break; 
                            case 11: echo "November"; break; 
                            case 12: echo "Dezember"; break; 
                            }
                            
                        echo ' '.$termin["jahr1"][$i]; 
                        echo '</td> 
                </tr>'; 
                $farbe=0;
                } 
            
            $gefunden=1; 
            if ( $farbe == 1 ) 
                { 
                echo '      <tr bgcolor="#EEEEEE">'; 
                } else {
                echo '      <tr>'; 
                }       
                        $wtag1 = getdate(mktime(0,0,0,$termin["monat1"][$i],$termin["tag1"][$i],$termin["jahr1"][$i]));
                        echo '
                        <td><p><strong>'.$tage[$wtag1["wday"]].', </strong>'.$termin["tag1"][$i].'.'; // Anfangsdatum ausgeben 
                        if ( strlen($termin["tag2"][$i]) < 2 && strlen($termin["zeit1"][$i]) >1 ) // falls kein Enddatum (Eintagestermin), aber Anfangszeit, diese ausgeben 
                            { 
                            //echo '</p><p> ['.$termin["zeit1"][$i].' h]'; 
                            } elseif ( strlen($termin["tag2"][$i]) > 1 ) // falls Enddatum (Mehrtagestermin), dieses ausgeben 
                                { 
                                $wtag2 = getdate(mktime(0,0,0,$termin["monat2"][$i],$termin["tag2"][$i],$termin["jahr2"][$i]));
                                echo ' - <br><strong>'.$tage[$wtag2["wday"]].', </strong>'.$termin["tag2"][$i].'.'; 
                                if ( $termin["monat2"][$i] != $termin["monat1"][$i]) // falls Enddatum nicht im gleichem Monat 
                                    { 
                                    echo $termin["monat2"][$i].'.'; 
                                    if ( $termin["jahr2"][$i] != $termin["jahr1"][$i]) // falls Enddatum nicht im gleichen Jahr 
                                        { 
                                        echo substr($termin["jahr2"][$i],2,2).'.'; 
                                        }               
                                    } 
                                echo '</p></td>'; 
                                } else 
                                    { 
                                    echo '</p></td>'; 
                                } 
                            
                        $navmod_link ="front_content.php?client=".$client."&lang=".$lang."&idcat=".$idcat."&idart=".$termin["idart"][$i].""; 
                        echo ' 
                        <td><p><a href="'.$sess->url("$navmod_link").'">'.urldecode($termin["titel"][$i]).'</a></p></td> 
                        <td><p>'.urldecode($termin["ort"][$i]).'</p></td> 
                    </tr>'; 
                    if ( $farbe == 0 ) { $farbe=1; } else { $farbe=0; } 
                    $lastmonth = $termin["monat1"][$i];
            }  
        } 
    } 

if ( $gefunden == 0 ) // falls kein aktueller Termin vorliegt 
    { 
    echo ' <tr> 
                <td colspan=3><b>Es liegen aktuell keine Termine vor!</b></td> 
            </tr>'; 
    } 

echo '</table>';
?> 

Gruß
schlaucher

schlaucher
Beiträge: 444
Registriert: Mi 14. Sep 2005, 10:38
Wohnort: Karlsruhe
Kontaktdaten:

Beitrag von schlaucher » Fr 7. Jul 2006, 15:07

@tono

ich schon wieder :wink:

Problem:

Wenn man in der Terminübersicht die Anfangszeit mit ausgeben will und gleichzeitig im Termin einen "internen" oder "externen" Link definiert hat, wir in der Ausgabe der Link, die ID, oder kein Eintrag angezeigt.

Fehler:

Im Modul Termineingabe ist der Link als CMS_LINK[1] angegeben. Ich habe mir mal den SQL SELECT der Terminübersicht anzeigen lassen. Dort werden für alle Termine, die einen Link haben, Mehrfacheinträge für "typid" = 1 (dort wird die Zeit gespeichert) angezeigt.
Die SWITCH CASE Abfrage in der Terminübersicht, findet immer den letzten Eintrag mit typid = 1. Dort stehen dann aber Informationen zum Link z.B. "_blank" oder die idart des verlinkten Artikels.

Lösung:

Im Modul Termineingabe folgenden Änderungen durchführen:

CMS_LINK[1] wird zu CMS_LINK[13] und CMS_LINKDESCR[1] wird zu CMS_LINKDESCR[13]. Diese typid ist für Termine noch nicht vergeben.
Ebenso CMS_HTML[7] in CMS_HTML[12] umbenennen.

Gruß
schlaucher

creamcandy
Beiträge: 34
Registriert: Di 13. Jun 2006, 17:10
Wohnort: Frankfurt am Main
Kontaktdaten:

Beitrag von creamcandy » Fr 7. Jul 2006, 17:21

eieiei, das wird schon wieder unübersichtlich :shock:

ich wart noch ein bisschen, wer weiß, was noch alles dazu kommt ... so geht es einem halt, wenn man keinen rechten PHP-plan hat...

schlaucher
Beiträge: 444
Registriert: Mi 14. Sep 2005, 10:38
Wohnort: Karlsruhe
Kontaktdaten:

Beitrag von schlaucher » Fr 7. Jul 2006, 20:07

nun, ich bin auch nicht der PHP Experte, ich wühle mich halt durch den Code und ändere mal hier, mal da und irgendwann tut es so, wie ich will :D

Wenn Du das Modul Termineingabe von tono benutzt, solltest Du die Änderungen durchführen, da sich bereits erstellte Termine nicht mehr so einfach ändern lassen.

Das Modul Terminausgabe habe ich auch noch etwas modifiziert:
  • Es werden alle Termine des aktuellen Monats angezeig ( auch die abgelaufenen), alle Älteren verschwinden.

    Tages- und Datumsanzeige wir nur beim ersten Termin eines Tages angezeigt, alle weiteren Termine kommen ohne Datum aus.

    Alle Termine eines Tages sind farblich gleich.
Das ganze kannst Du unter http://www.heilig-geist-daxlanden.de/co ... p?idcat=77 anschauen.

Modul Terminausgabe:

Code: Alles auswählen

<?php 
/*********************************************** 
* CONTENIDO MODUL - OUTPUT 
* 
* Modulname   :     Terminausgabe 
* Author      :     agon 
* Modified    :     tono
* Modified    :     schlaucher - 07.07.2006
* Copyright   :     Contenido - four for business 
* Created     :     22-08-2002 
************************************************/ 

$gefunden=0; // um zu überprüfen, ob überhaupt Termine vorliegen 
$date = date("Y-m-d");
$heute = getdate();
$tage = array("So","Mo","Di","Mi","Do","Fr","Sa");
$farbe=0;

echo '<table width="458" border="0" cellspacing="0" cellpadding="5" class="text">'; 

$sql = "SELECT ARTLANG.idart, CONTENT.value, CONTENT.typeid, ARTLANG.idartlang 
    FROM ".$cfg["tab"]["cat_art"]." AS CATART, ".$cfg["tab"]["art_lang"]." AS ARTLANG, ".$cfg["tab"]["cat"]." AS CAT, ".$cfg["tab"]["content"]." AS CONTENT 
    WHERE ARTLANG.idart = CATART.idart AND CATART.idcat = CAT.idcat AND ARTLANG.idartlang = CONTENT.idartlang 
    AND ARTLANG.idlang = '".$lang."' AND CAT.idcat = '".$idcat."' AND CAT.idclient = '".$client."' 
    AND ARTLANG.online = '1' AND CATART.is_start='0' 
    ORDER BY ARTLANG.idart, CONTENT.typeid ASC"; // Alle Artikel der Kategorie einlesen, die nicht Startartikel (= Terminübersicht) sind 

$db->query($sql); 
$j=0; $anz=0; 
if ($db->num_rows() > 0) 
    { 
    $termin = array(array()); // Array erzeugen, in dem die Termine abgelegt werden; 
    while ($j < $db->num_rows()) // alle Datensätze durchlaufen 
        { 
        $db->next_record(); 
        if ($db->f("idart") > $termin["idart"][$anz]) 
            { 
            $anz++; 
            } 
        if (isStartArticle($db->f("idartlang"),$idcat,$lang)==FALSE) 
            { 
            switch ($db->f("typeid")) 
                { 
                case 0: // Anfangstermin 
                    $termin["datum1"][$anz] = $db->f("value"); 
                    $termin["jahr1"][$anz] = substr($db->f("value"),0,4); 
                    $termin["monat1"][$anz] = substr($db->f("value"),5,2); 
                    $termin["tag1"][$anz] = substr($db->f("value"),8,2); 
                    $termin["idart"][$anz] = $db->f("idart"); 
                    break; 
                case 1: // Anfangsuhrzeit 
                    $termin["zeit1"][$anz] = $db->f("value"); 
                    $termin["datum1"][$anz] = $termin["datum1"][$anz]." ".$termin["zeit1"][$anz]; 
                    break; 
                case 2: // Endtermin 
                    $termin["datum2"][$anz] = $db->f("value"); 
                    $termin["jahr2"][$anz] = substr($db->f("value"),0,4); 
                    $termin["monat2"][$anz] = substr($db->f("value"),5,2); 
                    $termin["tag2"][$anz] = substr($db->f("value"),8,2); 
                    break; 
                case 3: // Enduhrzeit 
                    $termin["zeit2"][$anz] = $db->f("value"); 
                    $termin["datum2"][$anz] = $termin["datum2"][$anz]." ".$termin["zeit2"][$anz]; 
                    break; 
                case 4: // Ort 
                    $termin["ort"][$anz] = $db->f("value"); 
                    break; 
                case 6: // Titel 
                    $termin["titel"][$anz] = $db->f("value"); 
                    break; 
                } 

            } 
        $j++; 
        } 


    array_multisort ( $termin["datum1"], SORT_ASC, SORT_STRING, $termin["datum2"], SORT_ASC, SORT_STRING, 
        $termin["jahr1"], $termin["monat1"], $termin["tag1"], $termin["zeit1"], 
        $termin["jahr2"], $termin["monat2"], $termin["tag2"], $termin["zeit2"], 
        $termin["idart"], $termin["ort"], $termin["titel"] ); // nach Datum sortieren 
 
    for ($i=0; $i<=$anz; $i++) 
        { 
        
        //if ( $termin["datum1"][$i] >= $date || $termin["datum1"][$i] <= $date || $termin["datum2"][$i] <= $date || $termin["datum2"][$i] <= $date)        
        if ( $termin["datum1"][$i] >= $date || $termin["datum2"][$i] >= $date || $termin["monat1"][$i] = $heute["mon"] ) // nur Termine, die noch aktuell sind, aufnehmen 
            { 
            if (strlen($termin["titel"][$i]) >= 1 )
                {
                if ( $termin["monat1"][$i] != $lastmonth ) // überprüfen, ob Monatsname einzufügen ist 
                    { 
                    echo ' 
                    <tr>
                        <td><p>&nbsp;</p></td>                    
                    </tr>
                    <tr>
                        <td colspan="4" class="headline" style="border: 1px; border-left: 0px; border-right:0px; border-color: #444444; border-style: solid; color: #D66321">';                        
                            switch ($termin["monat1"][$i]) 
                                { 
                                case 1: echo "Januar"; break; 
                                case 2: echo "Februar"; break; 
                                case 3: echo "März"; break; 
                                case 4: echo "April"; break; 
                                case 5: echo "Mai"; break; 
                                case 6: echo "Juni"; break; 
                                case 7: echo "Juli"; break; 
                                case 8: echo "August"; break; 
                                case 9: echo "September"; break; 
                                case 10: echo "Oktober"; break; 
                                case 11: echo "November"; break; 
                                case 12: echo "Dezember"; break; 
                                }
                                
                            echo ' '.$termin["jahr1"][$i]; 
                            echo '</td> 
                    </tr>'; 
                    $farbe=0;
                    $mfarbe=0;
                    } 
                
                $gefunden=1; 
                            $wtag1 = getdate(mktime(0,0,0,$termin["monat1"][$i],$termin["tag1"][$i],$termin["jahr1"][$i]));
                            if ($wtag1["wday"] == $lastday && $termin["monat1"][$i] == $lastmonth )
                                {
                                if ( $farbe == 1 ) 
                                    { 
                                    echo '      <tr bgcolor="#EEEEEE">'; 
                                    } else {
                                    echo '      <tr>'; 
                                    }       
                                echo '
                                <td width="65"><p>'; // Anfangsdatum nicht ausgeben 
                                } else {
                                if ( $farbe == 0 ) 
                                    { 
                                    echo '      <tr bgcolor="#EEEEEE">'; 
                                    $farbe=1;
                                    } else {
                                    echo '      <tr>';
                                    $farbe=0;
                                    }       
                                    
                                echo '
                                <td width="65"><p>'.$tage[$wtag1["wday"]].', '.$termin["tag1"][$i].'.'; // Anfangsdatum ausgeben 
                                }
                                
                                if ( strlen($termin["tag2"][$i]) > 1 ) // falls Enddatum (Mehrtagestermin), dieses ausgeben 
                                    { 
                                    $wtag2 = getdate(mktime(0,0,0,$termin["monat2"][$i],$termin["tag2"][$i],$termin["jahr2"][$i]));
                                    echo ' - <br>'.$tage[$wtag2["wday"]].', '.$termin["tag2"][$i].'.'; 
                                    if ( $termin["monat2"][$i] != $termin["monat1"][$i]) // falls Enddatum nicht im gleichem Monat 
                                        { 
                                        echo $termin["monat2"][$i].'.'; 
                                        if ( $termin["jahr2"][$i] != $termin["jahr1"][$i]) // falls Enddatum nicht im gleichen Jahr 
                                            { 
                                            echo substr($termin["jahr2"][$i],2,2).'.'; 
                                            }               
                                        } 
                                    echo '</p></td>'; 
                                    } else 
                                        { 
                                        echo '</p></td>'; 
                                    } 
                                
                            $navmod_link ="front_content.php?client=".$client."&lang=".$lang."&idcat=".$idcat."&idart=".$termin["idart"][$i].""; 
                            
                            if ( strlen($termin["zeit1"][$i]) >1 ) // falls Anfangszeit, diese ausgeben 
                                {
                                echo ' 
                                <td width="65"><p>'.$termin["zeit1"][$i].' Uhr</p></td>';
                                } else {
                                echo '
                                <td width="65"><p></p></td>';
                                }
                                
                            echo '
                            <td><p><a href="'.$sess->url("$navmod_link").'">'.urldecode($termin["titel"][$i]).'</a></p></td> 
                            <td><p>'.urldecode($termin["ort"][$i]).'</p></td> 
                        </tr>'; 
                        $lastmonth = $termin["monat1"][$i];
                        $lastday = $wtag1["wday"];
                }        
            }  
        } 
    } 

if ( $gefunden == 0 ) // falls kein aktueller Termin vorliegt 
    { 
    echo ' <tr> 
                <td colspan=3><b>Es liegen aktuell keine Termine vor!</b></td> 
            </tr>'; 
    } 

echo '</table>';
?> 

Gruß
schlaucher

tono
Beiträge: 574
Registriert: Mo 25. Apr 2005, 20:51
Wohnort: Frankfurt am Main
Kontaktdaten:

Beitrag von tono » Sa 8. Jul 2006, 20:42

@schlaucher:

Vielen Dank für Deine Anregungen. Die nicht ausgegebenen Monatsnamen und die Fehlermeldung bei Aufruf ohne eigegebene Termine sind mir noch nicht aufgefallen.

Die anderen Änderungen betrachte ich nicht als Fehler, weil das Verhalten bei mir so beabsichtigt ist. Wenns bei Dir jetzt läuft wie gewünscht ist ja alles gut.

Gesperrt