Next Events - Modul

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

Beitrag von tono » Di 4. Jul 2006, 21:10

Vielleicht hilft auch Dir dieser Thread weiter, da hab ich mein Terminteasermodul gepostet, das diese Fehler nicht kennt.

http://www.contenido.org/forum/viewtopic.php?t=13260

Neuling
Beiträge: 78
Registriert: Di 24. Mai 2005, 14:46
Kontaktdaten:

Beitrag von Neuling » Mi 5. Jul 2006, 10:34

@Herr B
Ja du hast ja recht aber die Lösung für mein Problem gibt es ja schon! Das Modul funktioniert ja eignetlich genauso wie die Terminübersicht und dort wurde das Problem gefixt! ich würde es ja auch selber anpassen wenn ich wüsste was "damals" bei dem anderen Modul gefixt wurde!

@Tono
Danke, geht aber auch nicht! Das gleiche PRoblem wie bei dem Modul was ich bisher verwende...

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

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

Dann bitte ich Dich nochmal um eine Fehlerbeschreibung. Ich dachte es geht darum, das auf der Startseite die nächsten x Termine ausgegeben werden sollen, und dass das nicht in der richtigen Reihenfolge geschieht.

Und poste Deinen Modulcode nochmal, wenn keiner mehr weiß wie's damals gefixed worden ist, dann wirds eben jemand neu fixen.

Neuling
Beiträge: 78
Registriert: Di 24. Mai 2005, 14:46
Kontaktdaten:

Beitrag von Neuling » Fr 7. Jul 2006, 09:22

Also das Problem ist folgendes:

Ich verwende für meine Terminverwaltung zwei Module. Eins für die Terminein- und ausgabe und eins für eine Terminübersicht. Bei dem Modul für die Terminübersicht hatte ich das Problem das Artikel (Termine) die neu erstellt wurden immer an den Schluss angefügt wurden. Das heißt die Sortierung war falsch.
Siehe auch: http://contenido.org/forum/viewtopic.php?t=2155&start=0

Rezeptionist hat sich darufa hin das Modul angeschaut und irgendetwas gefixt. Nun funktioniert es ohne Probleme.
Genau das gleiche Problem habe ich nun mit einem anderen Modul das mir die 5 aktuellsten Termine auf der Startseite anzeigen sollte. Es zieht sich immer erst die 5 älteren Artikel.

LiveDemo:
http://www.tsv-goldbach.de/productive_s ... p?idcat=12
Auf der Startseite werden nicht die aktuellen Artikel angezeigt.

http://www.tsv-goldbach.de/productive_s ... p?idcat=86
So wäre das Ganze richtig!!!

So und hier meine verwendeten Module...

Termin Ein- und Ausgabe:

Input ist leer!

Output:

Code: Alles auswählen

<?php
if(strstr($REQUEST_URI,"changeview=edit") || $submit=="editcontent" || strstr($REQUEST_URI,"area=con_editcontent")) // Überprüfen, ob im Editiermodus aufgerufen
{
$submit="";
echo " <script language=\"JavaScript\" src=\"../contenido/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;
  for ($i=0; $i<=6; $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=\"".$REQUEST_URI."\" method=\"post\" name=\"eintrag\">
<table border=0 cellspacing=2 cellpadding=1>
<tr>
  <td align=\"left\">Titel</td>
  <td align=\"left\"><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 align=\"left\"><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ählen\"></a></td>
</tr>
<tr>
  <td align=left>Start-Uhrzeit <b class=klein>hh:mm</b></td>
  <td align=left><input type=\"text\" name=\"zeit1\" value=\"".$termin[1]."\" size=6 class=Input></td>
  <td class=klein>(kann auch leer bleiben)</td>
</tr>
<tr>
  <td align=left>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=\"Endzeitpunkt wählen\"></a></td>
   <td class=klein>(kann auch leer bleiben)</td>
</tr>
<tr>
  <td align=left>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 align=left>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 Übersicht)</td>
</tr>
<tr>
  <td align=left>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 Übersicht)</td>
</tr>
<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>
<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;
</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);
$datum1 = $tag1.".".$monat1.".".$jahr1;
$datum2 = $tag2.".".$monat2.".".$jahr2;
$date1 = getdate(mktime(0,0,0,$monat1,$tag1,$jahr1));
$date2 = getdate(mktime(0,0,0,$monat2,$tag2,$jahr2));
switch ($date1[wday]) {
  case 1: $wtag1 = "Montag"; break;
  case 2: $wtag1 = "Dienstag"; break;
  case 3: $wtag1 = "Mittwoch"; break;
  case 4: $wtag1 = "Donnerstag"; break;
  case 5: $wtag1 = "Freitag"; break;
  case 6: $wtag1 = "Samstag"; break;
  case 0: $wtag1 = "Sonntag"; break; }
switch ($date2[wday]) {
  case 1: $wtag2 = "Montag"; break;
  case 2: $wtag2 = "Dienstag"; break;
  case 3: $wtag2 = "Mittwoch"; break;
  case 4: $wtag2 = "Donnerstag"; break;
  case 5: $wtag2 = "Freitag"; break;
  case 6: $wtag2 = "Samstag"; break;
  case 0: $wtag2 = "Sonntag"; break; }
echo "<h1 class=\"headline\">CMS_TEXT[6]</h1>
<font id=\"font\"><p>&nbsp;&nbsp;".$wtag1.", ".$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 $wtag2.", ".$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>
<p><br>CMS_HTML[7]</p></font>";
$navmod_link ="front_content.php?client=".$client."?=".$lang."&idcat=".$idcat."";
echo '<p><br><a href="'.$sess->url("$navmod_link").'" id="font">Zurück zur Terminübersicht</a></p>';
}

?>
Dieses Modul funktioniert eigentlich soweit!

Terminübersicht:

Input ist leer!

Output:

Code: Alles auswählen

<?php

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

echo '<table border=0 cellspacing=0 cellpadding=0 width="100%">';
echo "<tr><td colspan=2 class=\"headline\">CMS_HTMLHEAD[1]</td></tr>"; // Überschrift der Seite mit der Termin-Übersicht
echo "<tr><td colspan=2 class=\"subheadline\">CMS_HTMLHEAD[2]</td></tr>"; // Weiterer Text
echo '<tr><td colspan=2>&nbsp;</td></tr>'; // Leerzeile vor der Termin-Übersicht

$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' AND CONTENT.idtype = '3' 
ORDER BY ARTLANG.idart, CONTENT.typeid ASC"; // Alle Artikel der Kategorie einlesen, die nicht Startartikel (= Terminübersicht) sind 
$db->query($sql);
$j=0; $anz= -1;
if ($db->num_rows() > 0) {
 $termin = array(array()); // Array erzeugen, in dem die Termine abgelegt werden;

 while ($db->next_record()) { // alle Datensätze durchlaufen
  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,0);
        $termin["monat2"][$anz] = substr($db->f("value"),0,0);
        $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;
      }

  }
 }
 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]["datum1"] <= $date || $termin[$i]["datum2"] <= $date || $termin[$i]["datum2"] <= $date  ) { // nur Termine, die noch aktuell sind, aufnehmen
   if ( $termin["monat1"][$i] !== $termin["monat1"][$i-1] || $termin["jahr1"][$i] !== $termin["jahr1"][$i-1] || $gefunden == 0 ) { // überprüfen, ob Monatsnahme einzufügen ist
    $farbe=0;
    if ( $gefunden == 1 )
    {
    $absatz=1;
     echo '</table>';
    }
    echo '<table width="100%" border="0" cellspacing="0" cellpadding="5" class="text">
           <tr>
             <td colspan="2" class="headline" style="border: 1px; border-left: 0px; border-right:0px; border-color: #000000; border-style: solid; background-color: #EEEEEE">';
    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 '</tr>';
   }
   $gefunden=1;
   echo '        <tr';
   if ( $farbe == 1 )
   {
    echo ' bgcolor="#EEEEEE"';
   }
   echo '>';
echo '<td colspan="2" width="490" valign="top" class="eventtitle" align="left">'.urldecode($termin["titel"][$i]).'</td>
        </tr>';
   echo '        <tr';
   if ( $farbe == 1 )
   {
    echo ' bgcolor="#EEEEEE"';
   }
   echo '>
          <td colspan="2" valign="top" width="100" align="left"><b>Datum: </b>'.substr($termin["datum1"][$i],8,2).'.'.substr($termin["datum1"][$i],5,2).'.'.substr($termin["datum1"][$i],0,4);
   if ( strlen($termin["zeit1"][$i]) >1 )
   {
    echo ', '.$termin["zeit1"][$i].'&nbsp;Uhr';
   }
   if ( strlen(substr($termin["datum2"][$i],8,2)) > 1 || strlen($termin["zeit2"][$i]) >1 )
   {
    echo ' <b>bis</b> ';
    if ( strlen(substr($termin["datum2"][$i],8,2)) > 1 )
    {
     echo substr($termin["datum2"][$i],8,2).'.'.substr($termin["datum2"][$i],5,2).'.'.substr($termin["datum2"][$i],0,4);
     if ( strlen($termin["zeit2"][$i]) >1 )
     {
      echo ', ';
     }
    }
    if ( strlen($termin["zeit2"][$i]) >1 )
    {
     echo $termin["zeit2"][$i].'&nbsp;Uhr';
    }
   }
   echo '</td></tr>';
   if ( strlen($termin["ort"][$i]) > 1 )
   {
    echo '        <tr';
    if ( $farbe == 1 )
    {
     echo ' bgcolor="#EEEEEE"';
    }
    echo '>
           <td colspan="2"><b>Ort:</b> '.urldecode($termin["ort"][$i]).'</td>
         </tr>';
   }
   $sql2 = "SELECT CONTENT.value
    FROM ".$cfg["tab"]["art_lang"]." AS ARTLANG, ".$cfg["tab"]["cat"]." AS CAT, ".$cfg["tab"]["content"]." AS CONTENT
    WHERE ARTLANG.idart = ".$termin["idart"][$i]." AND ARTLANG.idartlang = CONTENT.idartlang AND CONTENT.typeid = '7'";
   $db->query($sql2);
   if ($db->num_rows() != 0)
   {
    echo '        <tr';
    if ( $farbe == 1 )
    {
     echo ' bgcolor="#EEEEEE"';
    }
    $db->next_record();
    echo '>
           <td colspan="2"><b>Ansprechperson/Details:</b> '.urldecode($db->f("value")).'</td>
         </tr>';
   }
   if ( $farbe == 0 ) { $farbe=1; } else { $farbe=0; }
  }
    if ( $absatz == 1 )
    {
echo '<br>';
$absatz=0;
}
 }
}
if ( $gefunden == 0 ) // falls kein aktueller Termin vorliegt
{
 echo ' <tr>
  <td colspan=2><b>Es liegen aktuell keine Termine vor!</b></td>
 </tr>';
}
?>
      </table>
Hier wurde der Fehler bereits gefixt! Aber ich weiß nicht wo und was...

Terminübersicht auf der Startseite:

Input:

Code: Alles auswählen

// selected category
$selected = "CMS_VALUE[0]";

echo "<table cellspacing=\"0\" cellpadding=\"10\" border=\"0\">
        <tr>
          <td>Überschrift</td>
          <td><input type=\"text\" name=\"CMS_VAR[1]\" value=\"CMS_VALUE[1]\"></td>
        </tr>

        <tr valign=\"top\">
          <td>Kategorie wählen:</td>
          <td>
            <select name=\"CMS_VAR[0]\">";
            if($selected!="0" && $selected!=""){
             echo"<option value=\"0\">--- kein ---</option>";

            }else{
            echo"<option selected=\"selected\" value=\"0\">--- kein ---</option>";
            }

            // fetch all categorys
            $query = "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' ".
                     "AND C.visible=1 ORDER BY A.idtree";
            // execute query
            $db->query($query);

            // loop result and build the options
            while ($db->next_record()) {

              // indent spacer
              $spaces = "|";

              // how many levels
              $levels = $db->f("level");

              for ($i = 0; $i < $levels; $i ++) {
                // add 2 spaces for every level
                $spaces = $spaces . "--";

              } // end for
             
              $spaces .= ">";


              if ($selected == $db->f("idcat")) {
                // selected category
                echo "<option selected=\"selected\" value=\"". $db->f("idcat") ."\">". $spaces . $db->f("name") ."</option>";

              } else {
                // category
                echo "<option value=\"". $db->f("idcat") ."\">". $spaces . $db->f("name") ."</option>";

              } // end if

            } // end while

echo "      </select>";

echo "    </td>
        </tr>

      </table>";
Output:

Code: Alles auswählen

<?php
$navmod_id = ((int) "CMS_VALUE[0]" == 0) ? $idcat : (int) "CMS_VALUE[0]";

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

echo "<table width=\"100%\" border=\"0\" cellspacing=\"0\" cellpadding=\"2\" style=\"border: 1px; border-color: #c0c0c0; border-style: solid\">";
echo "<caption style=\"font-family:sans-serif;font-size:11px;color:000;white-space:nowrap;background:#c0c0c0;color:#fff;font-weight:bold;margin-bottom:0.3em;padding:0.2em\">Coming soon...</caption>";
//echo "<tr><td style=\"border: 1px; border-color: #4779a0; border-style: solid; background-color: #EEEEEE; padding-left:10px\" class=\"headline\" colspan=\"2\">CMS_VALUE[1]</td></tr>"; //Überschrift der Termin-Übersicht

// Alle Artikel der Kategorie einlesen, die nicht Startartikel (= Terminübersicht) sind * nur contenido 4.4.x
$sql = "SELECT
         ARTLANG.idart,
ARTLANG.idartlang,
         CONTENT.value,
         CONTENT.typeid
       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 = '" . $navmod_id . "' AND
          CAT.idclient = '" . $client . "' AND
          ARTLANG.online = '1' AND
          CATART.is_start='0'
       ORDER BY
          ARTLANG.idart,
          CONTENT.typeid ASC";

$db->query($sql);
$j = 0;
$anz = -1;
if ($db->num_rows() > 0) {
	$termin = array (
		array ()
	); // Array erzeugen, in dem die Termine abgelegt werden;

	while ($db->next_record()) { // alle Datensätze durchlaufen
		if ($db->f("idart") > $termin["idart"][$anz]) {
			$anz++;
		}
		if (isStartArticle($db->f("idartlang"), $navmod_id, $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, 0);
					$termin["monat2"][$anz] = substr($db->f("value"), 0, 0);
					$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;
			}

		}
	}
	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["datum2"][$i] >= $date) // nur Termine, die noch aktuell sind, aufnehmen
			{

			$gefunden++;
			echo '        <tr>';
			echo '
						                                                                         <td valign="top" width="40" class="text"><b>' . substr($termin["datum1"][$i], 8, 2) . '.' . substr($termin["datum1"][$i], 5, 2) . '.' . substr($termin["datum1"][$i], 0, 4);
			$navmod_link = "front_content.php?client=" . $client . "?=" . $lang . "&idcat=" . $navmod_id . "&idart=" . $termin["idart"][$i] . "";
			echo '</b></td></tr><tr>
						                                                                         <td valign="top" class="text"><a class="text" href="' . $sess->url("$navmod_link") . '" id="font">' . urldecode($termin["titel"][$i]) . '</a></td>
						                                                                       </tr>';
		}

		/*Untenstehend ist die gewünschte Anzahl der anzuzeigenden Termine ggf. anzupassen.
		   In diesem Fall werden 5 Termine aufgelistet. */

		if ($gefunden == 5)
			break;
	}
}
if ($gefunden == 0) // falls kein aktueller Termin vorliegt
	{
	echo ' <tr>
		                       <td colspan=2 class=\"text\"><b>Es liegen aktuell keine Termine vor!</b></td>
		                      </tr>';
}

echo "</table>";
?>
Danke schon mal für eure Hilfe!

#################### EDIT

Der Output Code funktioniert jetzt! Danke Tono!
Zuletzt geändert von Neuling am Di 11. Jul 2006, 09:02, insgesamt 1-mal geändert.

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

Beitrag von tono » Sa 8. Jul 2006, 11:57

Wo passiert denn das sortieren?? Mit array_multisort(). Jetzt schau dir mal die beiden Zeilen an, in dem Modul das funktioniert und in dem das nicht fuktioniert.

Fällt was auf??????

In dem Modul das nicht funktioniert ist die richtige Zeile auskommentiert, und dafür wird da ein Array mit dem Namen $array_multisort erstellt, in das irgendein Unsinn kopiert wird, das aber nie mehr abgefragt wird.

array_multisort() ist eine Funktion. s.a. http://de2.php.net/manual/de/function.a ... tisort.php

Neuling
Beiträge: 78
Registriert: Di 24. Mai 2005, 14:46
Kontaktdaten:

Beitrag von Neuling » Sa 8. Jul 2006, 13:30

Das habe ich mur auch schon gedacht!

Ich habe die Zeilen:

Code: Alles auswählen

   // 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
   $array_multisort = array (
      $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"]
   );

durch diese Ersetzt:

Code: Alles auswählen

 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 
Das einzigste was sich ändert ist das ich ejtzt eine " array_multisort() Exception" bekomme! An der Sortierung ändert sich gar nichts! Der Fehler muss wo anders liegen!

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

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

Wenn array_multisort() eine Exception ausgibt, dann heißt das, dass es seine Arbeit nicht tun kann. Deshalb sind die Arrays natürlich nicht sortiert.

Wenn Du solche Fehlermeldungen ins Forum schreibst, solltest Du auch darauf achten anzugeben welche Exception Du erhälst. Das kannst Du im Zweifelsfall im Errorlog unter Administration->System nachschauen.

In deinem Fall müsste es sich um eine "inconsistent Array Sizes" gehandelt haben. Folgende 2 Fehler sind noch in Deinem Code:

1. in das SQL-Statement zwischen SELECT und FROM einfügen:

Code: Alles auswählen

ARTLANG.idartlang,
2. in der Zeile

Code: Alles auswählen

if (isStartArticle($db->f("idartlang"), $idcat, $lang) == FALSE) {
$idcat durch $navmod_id ersetzen.

Ist beides übrigens in dem Modul auf das ich hingewiesen habe ersichtlich.

Neuling
Beiträge: 78
Registriert: Di 24. Mai 2005, 14:46
Kontaktdaten:

Beitrag von Neuling » So 9. Jul 2006, 22:24

also...

ich habe die 2 Fehler die du beschrieben hast geändert! Allerdings funktioniert die Sortierung immer noch nicht!

Allerdings habe ich den 1. Vorschlag mit dem array_multisort nicht mehrgeändert! d.h. das ist noch der alte Code! Soll ich das auch wiedereinbauen???

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

Beitrag von tono » Mo 10. Jul 2006, 22:25

Ja

Neuling
Beiträge: 78
Registriert: Di 24. Mai 2005, 14:46
Kontaktdaten:

Beitrag von Neuling » Di 11. Jul 2006, 09:04

Danke! Hat funktioniert! Jetzt geht die Sortierung richtig!

Danke Tono

Ich habe den Output Code oben in meinem Posting wo der Modulcode drin ist aktualisiert! Nur damit alles seine Richtigkeit hat!

Neuling
Beiträge: 78
Registriert: Di 24. Mai 2005, 14:46
Kontaktdaten:

Beitrag von Neuling » Di 11. Jul 2006, 09:24

ok, schade! Jetzt bekomme ich doch wieder eine Exception!

Eintrag aus dem Log:

Code: Alles auswählen

[11-Jul-2006 10:20:36] PHP Warning:  array_multisort(): Array sizes are inconsistent in /home/www/web10/html/productive_system/cms/front_content.php(793) : eval()'d code on line 982
Ich habe seit dem eignetlich nur einen Artikel der verändert/überarbeitet und einen neuen hinzugefügt der aber in dieser Anzeige nicht angezeigt wird (anderes Modul)

Wo liegt mein Fehler?

i-fekt
Beiträge: 1520
Registriert: Mo 3. Jan 2005, 02:15
Wohnort: Chemnitz
Kontaktdaten:

Beitrag von i-fekt » Di 11. Jul 2006, 17:06

Das Problem liegt wahrscheinlich daran, dass von den im array_multisort gelisteten Feldern eines oder mehrere leer sind. Wenn alle Felder die dort sortiert werden Inhalte haben, kann der array_multisort durchlaufen.

Ich habe leider momentan auch keine Lösung für dieses Problem, vielleicht hat jemand eine Idee?
Gruss,
Michael

"Keep on riding this Bike!" (Jackson Mulham)

stese
Beiträge: 1040
Registriert: Fr 3. Dez 2004, 17:47
Wohnort: München
Kontaktdaten:

Beitrag von stese » Di 11. Jul 2006, 19:06

wenn sie leer sind kann man mittels $array = array_filter($array) die leeren einträge entfernen.

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

Beitrag von tono » Di 11. Jul 2006, 21:40

Füg nochmal

Code: Alles auswählen

AND CONTENT.idtype = '3'
in die WHERE-Klausel des SQL-Statements ein.

Grundlegend kann man sagen der Code der Terminübersicht, die ja funktioniert, und der Terminteaserseite muss exakt identisch sein, bis auf die echo-Anweisungen zur Ausgabe und der Zeile

Code: Alles auswählen

       if ($gefunden == 5)
         break; 
Vielleicht kannst Du dann noch verbliebene Fehler leichter selbst finden.

Neuling
Beiträge: 78
Registriert: Di 24. Mai 2005, 14:46
Kontaktdaten:

Beitrag von Neuling » Mi 12. Jul 2006, 08:10

danke tono! jetzt scheint es richtig zu funktionieren! auch wenn ich artikel wieder lösche...

Gesperrt