12 Monatskalender -> Automatischer Zeilenumbruch nach 3 Monaten

zum ersten Beispiel
Schau dir mal diese Zeile an. Dir fällt sicher was auf:
PHP:
 $dom_html.= "<tr>
Du kannst nicht einfach innerhalb eines Strings ganze PHP-Codes machen!

Beim Zweiten:
Wenn du sauber formatieren würdest, dann würdest du sehen dass die foreach-Schleife nirgnes Schliesst. Es fehlt also ein }

Und dein drittes Beispiel versteh ich gar nicht, wo du den Monat her hast.
 
aber auch wenn ich wie bei nummer 2 eine klammer hinzufüge } ,....

dann kommt das gleich wie bei nummer 3 nähmlich der Monat Mai, und das ca. 4 Zeilen lang (auch wenn es hier nun korrekter weise einen Zeilenumbruch nach 3 Monaten macht :) und danach auf jeder Zeile ein extra monat also 3x juli, 3x august usw....

wer sich das mal schnell anschauen will, ich lass das mal kurz so stehen,...

http://www.rosenthal-bielatal.de/to...&layout=loc&task=edit&cid[]=53&id=53&liste=80

hier der code

Code:
 // erstellung des Kalender HTML Codes...
   $dom_html= "<table width='100%' id='Kalenderloc' >\n";
   $dom_html.= "<tr> <td width='5%'><!-- <img src='components/com_joomloc/images/fleche-G.gif' /> --></td>\n";
 
   foreach($table_cal as $table)
   {
 
       $dom_html.=$z = 0;
for ($a = 1; $a <= 12; $a++) {
    $z++;
    echo "<td>".$table."</td>";
    if ($z == 3 and $a < 12) {
        $z = 0;
        echo "</tr><tr>";
    } elseif ($z == 3 and $a == 12) {
        echo "</tr>";
    }
} 
}
   $dom_html.= "<td width='5%'><a href='javascript:moove_cal(2,\"".$topdate."\", $room->id)'><!-- <img src='components/com_joomloc/images/fleche-D.gif' /></a> --></td></tr></table>";
 
   // aussgabe des Kalenders ...
   echo $dom_html ;
 
In dem Fall gilt nun für die 2te Version dasselbe wie für die 3te.
Und dein drittes Beispiel versteh ich gar nicht, wo du den Monat her hast.
Aus der Schleife nimmst du ihn ja nicht. Aber woher hast du den Monat? Aus $topdate? Was ist denn $topdate? Du setzt $topdate nirgens, verwendest es aber nachher.

Und bitte formatier den Code lesbar
 
naja das was Ihr hier seht, ist ja nur ein Teil des codes, daher hier im Anhang die komplette Datei. (ohne die jetztigen änderungen)

Den oben geposteten Codeschnipsel findet Ihr in Zeile: ca. 750

Code:
$topdate = date("Y-m-d", mktime(0, 0, 0, date('m')+3, 1, date('Y')));
$backdate = date("Y-m-d", mktime(0, 0, 0, date('m'), 1, date('Y')));

Das setz ich über den codeschnipsel...

Naja das mit dem Formatieren, ist ja so das dies in einer PHP Datei steht, und daher eigentlich alles PHP ist ausser wenn es halt direkt angeben wird "<td wid ....

aber ich versuche mich zu verbessern und in zukunft immer <?php davorzuschreiben :)
 

Anhänge

Ich habe jetzt keine Lust tausende Zeilen durch zugehen. In deinem Code. schreibst du ja irgendwo den Monat raus. Das sehe ich deinem Beispiel nicht. Oder ich bin blind.

Zum Formatieren: Das <?php am Anfang ist nicht das wesentliche. Wenn du sauber mit Tabulatoren arbeiten würdest, dann würde dir selber auffallen wo das } fehlen, welche Schleife von wo nach wo geht etc.
Ich habe jetzt mal dein letzten Code lesbar formatiert und in PHP-Tags gesetzt [code=php]...[/code]
PHP:
	// erstellung des Kalender HTML Codes...
	$dom_html= "<table width='100%' id='Kalenderloc' >\n";
	$dom_html.= "<tr> <td width='5%'><!-- <img src='components/com_joomloc/images/fleche-G.gif' /> --></td>\n";

	foreach($table_cal as $table){
		$dom_html.=$z = 0;
		for ($a = 1; $a <= 12; $a++) {
			$z++;
			echo "<td>".$table."</td>";
			if ($z == 3 and $a < 12) {
				$z = 0;
				echo "</tr><tr>";
			} elseif ($z == 3 and $a == 12) {
				echo "</tr>";
			}
		} 
	}
	$dom_html.= "<td width='5%'><a href='javascript:moove_cal(2,\"".$topdate."\", $room->id)'><!-- <img src='components/com_joomloc/images/fleche-D.gif' /></a> --></td></tr></table>";

	// aussgabe des Kalenders ...
	echo $dom_html ;

[Sarkasmus]Achja, zurück zum Thema. Wo in diesem Code ist nun der Monat? Ich meine, ich frage ja erst zum dritten mal danach. Ich mach das gerne, das mehrmalige Nachfragen um jemanden helfen zu können.[/Sarkasmus]
 
danke, wirklich!

Aber ich weis nicht so recht was du suchst... :( ich dachte du meinstest das §topdate ...

hiermit beginnt der code (Zeile 393 und bei Zeile 764 endet dieser) (zumindest die "Tagesausgabe" der rest ist deaktiviert... (Woche und Monat)

PHP:
 //-----------AFF LA DISPOS J----------------------
   
  if($room->cal =="J")
  {

        //$title_cal='<h4><a href="#"><<</a>&nbsp;&nbsp; '.$this_month_letter.'  '.$this_year_letter.'&nbsp;&nbsp;<a href="#" >>></a></h4>';

        //va contenir trois tableau html 1 mois de l'année
        //pour trois mois a partir de today
        $table_cal= array();
$month1 = date('m');
$year1 = date('Y');

        //show months ab today
        for($r=0 ;$r<4 ;$r++)
   {

        //2 764 800  sec sur d'aller au mois suivant (32 (31 +1) jours)
           //$this_month_letter=date('F',($r*2764800+time()));
		   
 //$this_month = JHTML::_('date', ($r*2764800+time()), '%B');
           // annee de type aaaa
   //        $this_year_letter=date('Y',($r*2764800+time()));



        //2 764 800  sec sur d'aller au mois suivant (32 (31 +1) jours)
 $newdate = date("Y-m-d", mktime(0, 0, 0, $month1+$r, 1, $year1));
 
           //$this_month_letter=date('F',($r*2764800+time()));
		   
 $this_month = JHTML::_('date', $newdate, '%B');
           // annee de type aaaa
           $this_year_letter= JHTML::_('date', $newdate, '%Y');
      

      




 
        $table='<table border="1" style="width:150px; text-align:center;" >'."\n";
        $table.='<tr><td colspan="7"><b>'.$this_month." ".$this_year_letter.'</b></td></tr>';
        $table.='<tr style="background-color:#FDF5E6;"><td>'.JText::_( 'Mon').'</td>
													   <td>'.JText::_( 'Tue').'</td>
													   	<td>'.JText::_( 'Wed').'</td>
														<td>'.JText::_( 'Thu').'</td>
														<td>'.JText::_( 'Fri').'</td>
														<td>'.JText::_( 'Sat').'</td>
														<td>'.JText::_( 'Sun').'</td></tr>';


                     $today_date= JHTML::_('date', $newdate, '%d-%m-%Y');

                    $today_num= JHTML::_('date', $newdate, '%d');
                    $today_letters= JHTML::_('date', $newdate, '%a');

                    $this_year=JHTML::_('date', $newdate, '%Y');

                    $this_month=JHTML::_('date', $newdate, '%m');

                   // $this_month+=$r;

                    //$fev= is_bissextile($this_year) ? 29 : 28 ;

                    //année bisextile
                    if( (is_int($this_year/4) && !is_int($this_year/100)) || is_int($this_year/400))
                     {
                     // Année bissextile
                     // vous remplacez le retour par ce que vou voulez
                        $fev=29;
                     }
                     else
                     {
                         $fev=28;

                     }



                    


                    $max_day_month_array= array("31",$fev,"31","30","31","30","31","31","30","31","30","31") ;

                    $last_day_this_month= $max_day_month_array[$this_month-1];


                    $nb_weeks_before_today=ceil($today_num/7);


                    //nb semaine dans le mois  arrondi a l'entier superieur
                    $nb_weeks_in_month= ceil($last_day_this_month/7);



                      //remontons les dispos pour chaque mois
                     // depuis lbresa_cal avec un between
                    // 1 jour du mois au dernier


                    $first_day_sql=$this_year."-".$this_month."-01";
                    $last_day_sql=$this_year."-".$this_month."-".$last_day_this_month;

                   $query="select
                            *
                          from
                            #__lbresa_cal
                          where
                            id_room=$room->id
                           and
                            date between
                             '$first_day_sql'
                           and
                               '$last_day_sql'
                           order by date asc ";

                   $db->setQuery($query);
                   $cal_liste=$db->loadObjectList();







                    //les jours de la semaine
                    $week= array("Mon","Tue","Wed","Thu","Fri","Sat","Sun");





                    //remplir la premiere semaine
                    //connaitre le nom du premier jour du mois

                    $first_day_month_letter=date('D',strtotime($this_year."-".$this_month."-01"));
					
									

                    //cherchons l'index de ce premier jour dans notre tableau week
                    $index=0;
                    for($i=0;$i<count($week);$i++)
                    {
                            if($week[$i]==$first_day_month_letter)
                            {
                                    $index=$i;
                            }



                    }
					
                    //remplissons maintenant la premiere semaine de notre calendar
                    //les jour qui ne font pas parti du mois seront des cases blanches
                    $table.='<tr>';


                    for($i=0; $i<$index ; $i++)
                    {
                            $vide_space="&nbsp;";
                            $table.='<td style="background-color:#708090;">'.$vide_space.'</td>';

                    }

                    //les premiers jour du mois à remplir

                    $day_number=0;

                    for($i=$index; $i<count($week) ;$i++)
                    {
                            $day_number++;
                        //couleur des dispos
                        //$font_color=($cal_liste[$day_number-1]->dispo > 0) ? "green;" : "red;" ;
						
						$cdate = date("Y-m-d",time());					
													
						if($cal_liste[$day_number-1]->dispo > 0 and $cal_liste[$day_number-1]->date >= $cdate)
						{
						$font_color = "black;";
						$free=1;
						}
						else
						{
						$font_color = "white;";
						$free=0;
						}
                        //couleur des prix reduits
                        //$bg_color=($cal_liste[$day_number-1]->prixred>0) ? "#FFFF00;" :"#DCDCDC;";
						
						if($cal_liste[$day_number-1]->prixred>0 and $cal_liste[$day_number-1]->date >= $cdate)
						{
						$bg_color = "#FFFF00;";
						}
						else
						{
						$bg_color = "#DCDCDC;";
						}
						
						
						
						
						
						if($cal_liste[$day_number-1]->prixred>0) { $day_price = $cal_liste[$day_number-1]->prixred." ".$monaie; } else { $day_price = $cal_liste[$day_number-1]->prix." ".$monaie; }

                        //italique et gras pour le today

                        $date=$day_number."-".$this_month."-".$this_year;

                        $font_style= ($date==date("d-m-Y",time())) ? "italic;" : "normal;";
                        $font_weight= ($date==date("d-m-Y",time())) ? "bold;" : "normal;";
						
						$add = JHTML::_('date', $cal_liste[$day_number-1]->date, '%d-%m-%Y');
						$add2 = JHTML::_('date', $cal_liste[$day_number-1]->date, '%Y-%m-%d');

                            if($free==1)
							{
							$table.='<td style="background-color:#86b200;"><a href="javascript:add_date(\''.$add.'\', \''.$add2.'\')" alt="'.$day_price.'" title="'.$day_price.'" style="color:'.$font_color.' font-style:'.$font_style.' font-weight:'.$font_weight.'">'.$day_number.'</a></td>';
							}
							else
							{
							$table.='<td style="background-color:red;"><span style="color:'.$font_color.' font-style:'.$font_style.' font-weight:'.$font_weight.'">'.$day_number.'</span></td>';
							}

                    }

                    $table.='</tr>'."\n";
					
					//on commence a compter le nombre de lignes ecrite pour corriger sir fevrier insuffisant
					$nb_lines=1;
					
                    //remplissons les semaines restantes

                    //on part de 1 car nous avons deja rempli la premiere semaine

                    for($i=1;$i<=($nb_weeks_in_month);$i++)
                    {

                            $table.="<tr>";

                            for($j=0;$j<count($week);$j++)
                            {


                                            $day_number++;

                                            // day number ne doit pas depasser 30 ou 31
                                            // au delà on y met un vide_space dans la case
                                            if($day_number<=$last_day_this_month)
                                            {
                                                    //couleur des dispos
                                                    //$font_color=($cal_liste[$day_number-1]->dispo > 0) ? "green;" : "red;" ;
													
													$cdate = date("Y-m-d",time());					
													
						if($cal_liste[$day_number-1]->dispo > 0 and $cal_liste[$day_number-1]->date >= $cdate)
						{
						$font_color = "black;";
						$free=1;
						}
						else
						{
						$font_color = "white;";
						$free=0;
						}
                                                    //couleur des prix reduits
                                                    //$bg_color=($cal_liste[$day_number-1]->prixred>0) ? "#FFFF00;" :"#DCDCDC;";
													
						if($cal_liste[$day_number-1]->prixred>0 and $cal_liste[$day_number-1]->date >= $cdate)
						{
						$bg_color = "#FFFF00;";
						}
						else
						{
						$bg_color = "#DCDCDC;";
						}
													
											if($cal_liste[$day_number-1]->prixred>0) { $day_price = $cal_liste[$day_number-1]->prixred." ".$monaie; } else { $day_price = $cal_liste[$day_number-1]->prix." ".$monaie; }

                                                    //italique et gras pour le today

                                                    $date=$day_number."-".$this_month."-".$this_year;

                                                    $font_style= (date("d-m-Y",strtotime($date))==date("d-m-Y",time())) ? "italic;" : "normal;";
                                                    $font_weight= (date("d-m-Y",strtotime($date))==date("d-m-Y",time())) ? "bold;" : "normal;";
													
													$add = JHTML::_('date', $cal_liste[$day_number-1]->date, '%d-%m-%Y');
													$add2 = JHTML::_('date', $cal_liste[$day_number-1]->date, '%Y-%m-%d');

                                                    if($free==1)
													{

                                                    $table.="<td style='background-color:#86b200;'><a href='javascript:add_date(\"".$add."\", \"".$add2."\")' alt='".$day_price."' title='".$day_price."' style='color:".$font_color." font-style:".$font_style." font-weight:".$font_weight." '>".$day_number."</a></td>";
                                                   }
												   else
												   {
												   $table.="<td style='background-color:red;'><span style='color:".$font_color." font-style:".$font_style." font-weight:".$font_weight." '>".$day_number."</span></td>";
												   }
                                            }

                                            else
                                            {

                                                    $table.="<td style='background-color:#708090; color:#708090;'>".$vide_space."0</td>";
                                            }



                            }

                            $table.="</tr>\n";
							$nb_lines++;

                    }
					
					// on verifie que le nombre de ligne est suffisant sinon on l'ajoute
					if($nb_lines==5)
					{
					
					$table.="<tr>";
					
						 for($l=0;$l<count($week);$l++)
                            {
							$table.="<td style='background-color:#708090; color:#708090;'>".$vide_space."0</td>";
							
							}
					$table.="</tr>\n";
					
					}
					
					
					
					

        $table.='</table>';


 
         $table_cal[]=$table;
      
   }// end for $r

  // print_r($table_cal);


$topdate = date("Y-m-d", mktime(0, 0, 0, date('m')+3, 1, date('Y')));
$backdate = date("Y-m-d", mktime(0, 0, 0, date('m'), 1, date('Y')));

  // erstellung des Kalender HTML Codes...
   $dom_html= "<table width='100%' id='Kalenderloc' >\n";
   $dom_html.= "<tr> <td width='5%'><!-- <img src='components/com_joomloc/images/fleche-G.gif' /> --></td>\n";

   foreach($table_cal as $table)
   {

       $dom_html.="<td>".$table."</td>";
   }

   $dom_html.= "<td width='5%'><a href='javascript:moove_cal(2,\"".$topdate."\", $room->id)'><!-- <img src='components/com_joomloc/images/fleche-D.gif' /></a> --></td></tr></table>";

   // aussgabe des Kalenders ...
   echo $dom_html ;

   echo "</div>";

  
  
  
  
  
  }//END IF room cal J

Achja, zurück zum Thema. Wo in diesem Code ist nun der Monat? Ich meine, ich frage ja erst zum dritten mal danach. Ich mach das gerne, das mehrmalige Nachfragen um jemanden helfen zu können.

Ja ich versuche dir auch zu Helfen, damit du mir helfen kannst :) ...
 
Zuletzt bearbeitet:
Also, Schritt für Schritt.

Bevor ich jetzt alle Zeilen durchgehe. Zeig mir die Zeile wo du den Monat ausgibst.
 
also direkt ausseben tu ich diesen in einer anderen Datei, und zwar hier, und die php Zeile "greift dann halt auf die oben genannte datei zu" und fügt halt dann sozusagen teile davon ein.

HTML:
<div class="col100" id="unterkunftslocdiv">
   <fieldset class="adminform">
      <legend id="unterkunftsloc"> </legend>

 <table class="admintable" width="100%" border="0">
	   
	   <?php getallrooms($this->rows->id, $this->config->monaie); ?>

		</table>	   
			   
			   
 </fieldset>
</div>

so und ich nahm an das der opere teil, meines letzten postings, den "code und den Monat erstelle" und ich sozusagen, damit die Tabelle generiere...
PHP:
  // print_r($table_cal);


$topdate = date("Y-m-d", mktime(0, 0, 0, date('m')+3, 1, date('Y')));
$backdate = date("Y-m-d", mktime(0, 0, 0, date('m'), 1, date('Y')));

  // erstellung des Kalender HTML Codes...
   $dom_html= "<table width='100%' id='Kalenderloc' >\n";
   $dom_html.= "<tr> <td width='5%'><!-- <img src='components/com_joomloc/images/fleche-G.gif' /> --></td>\n";

   foreach($table_cal as $table)
   {

       $dom_html.="<td>".$table."</td>";
   }

   $dom_html.= "<td width='5%'><a href='javascript:moove_cal(2,\"".$topdate."\", $room->id)'><!-- <img src='components/com_joomloc/images/fleche-D.gif' /></a> --></td></tr></table>";

   // aussgabe des Kalenders ...
   echo $dom_html ;

   echo "</div>";

da ich das aber nicht geschrieben habe, und ich mich nur mehr schlecht als recht damit auskenne, hoffe ich das dies so stimmt, lasse mich aber gern eines besseren belehren, denn ich wills lernen :)
 
Und wie sieht die Funktion getallrooms() aus?

Also, ich habe jetzt mal den Quelltext deiner Seite angeschaeut und da den Monat gefunden.
HTML:
<td colspan="7"><b>Mai 2011</b></td>
Dann bin ich mal mit der Browser-Suche nach 'colspan' über diesen Thread gegangen. Fündige wurde ich auf Zeile 44 deines Codes aus dem Postung von 14:16.
PHP:
$table.='<tr><td colspan="7"><b>'.$this_month." ".$this_year_letter.'</b></td></tr>';
Dann mal den Code zurück um herauszufinden was in $this_month steht.
Zeile 32
PHP:
$this_month = JHTML::_('date', $newdate, '%B');
Aha. Irghend eine Klasse JHTML die irgend was macht. Trotz Browser-Textsuche über diese Seite hier konnte ich nicht herausfinden was JHTML eigentlich ist oder macht. Egal., du übergibst da $newdate.
Zeile 28:
PHP:
 $newdate = date("Y-m-d", mktime(0, 0, 0, $month1+$r, 1, $year1));
aha, hier haben wir $month1 und $r. Auf Zeile 15 sehe ich, dass $r von 0 bis 3 geht. Und auf Zeile 11 entdecke ich, dass $month1 der aktuelle Monat ist. Ergo dürftest du nur 4 Monate haben. Du hast aber 12. Was habe ich übersehen?
Und was macht die statische Methode '_' von JHTML?

ps: _ als methodenname ist nicht wirklich suaber....
pps: Du siehst an diesem Beispiel, wie ich versuche dir zu helfen. Aber das ich mit Browser-Textsuche vorgehen muss......
 
Ergo dürftest du nur 4 Monate haben. Du hast aber 12. Was habe ich übersehen?

Ich habe hier manuell auf 4 Monate geändert, da es mir wenn ich hier 12 eingebe, das Design so verhaut das man gar nichts mehr ordentlich erkennt,
Code:
      //show months ab today
        for($r=0 ;$r<4 ;$r++)
   {

Wenn ich die Zahl 4 auf 12 ändere Zeigt er mir auch korrekt alle 12 Monate an, allerdings nur in einer Reihe (also mein Problem) (Standard ist 3)

Funktion getallrooms() aus?

so****

PHP:
  }   
  
  function getallrooms($id_site, $monaie)
{

 $u =& JFactory::getURI();
$myp =  $u->root();
 
Zurück