Autor Zpráva
mackopu
Profil
Mám skript na vypsání dvojjazyčného kalendáře a zajímalo by mě, jak zařídit, aby se v české verzi vypisovaly sloupce s názvy dnů ne od neděle, ale od pondělí (to není takový problém, stačí to jen posunout v array $zkratky_dni), ale přitom aby se úměrně k tomu posunula i čísla dnů. Ladím to celý den a nemůžu na to kápnout :-/
<?php
if($_GET['lang'] == "") {
  $lang = "cz";
}

$lang_dnes = $lang == "cz" ? "Dnes" : "Today";

if($lang == "cz") {
  $zkratky_dni = array(
  "Ne",
  "Po",
  "Út",
  "St",
  "Čt",
  "Pá",
  "So"
  );
} else {
  $zkratky_dni = array(
  "Sun",
  "Mon",
  "Tue",
  "Wed",
  "Thu",
  "Fri",
  "Sat"
  );
}

$cz_mesic = array(
"1" => "Leden",
"Únor",
"Březen",
"Duben",
"Květen",
"Červen",
"Červenec",
"Srpen",
"Září",
"Říjen",
"Listopad",
"Prosinec"
);

$output = '';
$month = $_GET['month'];
$year = $_GET['year'];
	
if($month == '' && $year == '') { 
	$time = time();
	$month = date('n',$time);
    $year = date('Y',$time);
}

$date = getdate(mktime(0,0,0,$month,1,$year));
$today = getdate();
$hours = $today['hours'];
$mins = $today['minutes'];
$secs = $today['seconds'];

if(strlen($hours)<2) $hours="0".$hours;
if(strlen($mins)<2) $mins="0".$mins;
if(strlen($secs)<2) $secs="0".$secs;

$days=date("t",mktime(0,0,0,$month,1,$year));
$start = $date['wday']+1;
$name = $date['month'];
$year2 = $date['year'];
$offset = $days + $start - 1;
 
if($month==12) { 
	$next=1; 
	$nexty=$year + 1; 
} else { 
	$next=$month + 1; 
	$nexty=$year; 
}

if($month==1) { 
	$prev=12; 
	$prevy=$year - 1; 
} else { 
	$prev=$month - 1; 
	$prevy=$year; 
}

if($offset <= 28) $weeks=28; 
elseif($offset > 35) $weeks = 42; 
else $weeks = 35; 

$jmeno_mesice = $lang == "cz" ? iconv("windows-1250","UTF-8",$cz_mesic[$month]) : $name;

$output .= "<div align='center'>
  <center>
<table cellpadding='1' cellspacing='0' border='1' bordercolor='silver'>
<tr>
	<td colspan='7'>
		<table cellpadding='3' width='100%'>
		<tr>
			<td>
				<a href='javascript:navigate($prev,$prevy,\"".$lang."\")'>&lt;&lt;</a>
<a class='link-today' href='javascript:navigate(\"\",\"\",\"".$lang."\")'>".$lang_dnes."</a> 
<a href='javascript:navigate($next,$nexty,\"".$lang."\")'>&gt;&gt;</a>
			</td>
		</tr>
    <tr>
			<td>$jmeno_mesice $year2</td>
		</tr>
		</table>
	</td>
</tr>
<tr bgcolor='#808080' style='color:#FFFFFF; font-size:10px;'>";
for($i=0; $i<7; $i++) {
  $output .= "<th width='27' height='20'>".iconv("windows-1250","UTF-8",$zkratky_dni[$i])."</th>";
  }
$output .= "</tr>";

$col=1;
$cur = 1;
$next=0;

for($i=1;$i<=$weeks;$i++) { 
	if($next==3) $next=0;
	if($col==1) $output.="<tr>"; 
  	
	$output.="<td class='day";

	if($i <= ($days+($start-1)) && $i >= $start) {
		if(($cur==$today[mday]) && ($name==$today[month])) $output.=" today";
		
		$output.="'>$cur</td>";
		
		$cur++; 
		$col++; 
	} else { 
		$output.="'>&nbsp;</td>"; 
		$col++; 
	}  
	    
  if($col==8) { 
    $output.="</tr>"; 
    $col=1; 
  }
}

$output.="  </center>
  </div>
</table>";
  
echo $output;
?>
mackopu
Profil
Pro lepší představu uvidíte kalendář tady.
Poraďte prosím, je to moc pěkná aplikace postavená na AJAXU, PHP a MYSQL- rád se pak podělím o zdrojáky.
Majkl578
Profil
zkusil bych to prvne jednoduse, takto (netestovano):

<?php
if($_GET['lang'] == "") {
  $lang = "cz";
}

$lang_dnes = $lang == "cz" ? "Dnes" : "Today";

if($lang == "cz") {
  $zkratky_dni = array(
  "Ne",
  "Po",
  "Út",
  "St",
  "Čt",
  "Pá",
  "So"
  );
} else {
  $zkratky_dni = array(
  "Sun",
  "Mon",
  "Tue",
  "Wed",
  "Thu",
  "Fri",
  "Sat"
  );
}

$cz_mesic = array(
"1" => "Leden",
"Únor",
"Březen",
"Duben",
"Květen",
"Červen",
"Červenec",
"Srpen",
"Září",
"Říjen",
"Listopad",
"Prosinec"
);

$output = '';
$month = $_GET['month'];
$year = $_GET['year'];
	
if($month == '' && $year == '') { 
	$time = time();
	$month = date('n',$time);
    $year = date('Y',$time);
}

$date = getdate(mktime(0,0,0,$month,1,$year));
$today = getdate();
$hours = $today['hours'];
$mins = $today['minutes'];
$secs = $today['seconds'];

if(strlen($hours)<2) $hours="0".$hours;
if(strlen($mins)<2) $mins="0".$mins;
if(strlen($secs)<2) $secs="0".$secs;

$days=date("t",mktime(0,0,0,$month,1,$year));
$start = $date['wday']+1;
$name = $date['month'];
$year2 = $date['year'];
$offset = $days + $start - 1;
 
if($month==12) { 
	$next=1; 
	$nexty=$year + 1; 
} else { 
	$next=$month + 1; 
	$nexty=$year; 
}

if($month==1) { 
	$prev=12; 
	$prevy=$year - 1; 
} else { 
	$prev=$month - 1; 
	$prevy=$year; 
}

if($offset <= 28) $weeks=28; 
elseif($offset > 35) $weeks = 42; 
else $weeks = 35; 

$jmeno_mesice = $lang == "cz" ? iconv("windows-1250","UTF-8",$cz_mesic[$month]) : $name;

$output .= "<div align='center'>
  <center>
<table cellpadding='1' cellspacing='0' border='1' bordercolor='silver'>
<tr>
	<td colspan='7'>
		<table cellpadding='3' width='100%'>
		<tr>
			<td>
				<a href='javascript:navigate($prev,$prevy,\"".$lang."\")'>&lt;&lt;</a>
<a class='link-today' href='javascript:navigate(\"\",\"\",\"".$lang."\")'>".$lang_dnes."</a>  
<a href='javascript:navigate($next,$nexty,\"".$lang."\")'>&gt;&gt;</a>
			</td>
		</tr>
    <tr>
			<td>$jmeno_mesice $year2</td>
		</tr>
		</table>
	</td>
</tr>
<tr bgcolor='#808080' style='color:#FFFFFF; font-size:10px;'>";
for($i=0; $i<7; $i++) {
  $output .= "<th width='27' height='20'>".iconv("windows-1250","UTF-8",$zkratky_dni[$i])."</th>";
   }
$output .= "</tr>";

$col=1;
$cur = 1;
$next=0;

for($i=1;$i<=$weeks;$i++) { 
	if($next==3) $next=0;
	if($col==2) $output.="<tr>"; 
  	
	$output.="<td class='day";

	if($i <= ($days+($start-1)) && $i >= $start) {
		if(($cur==$today[mday]) && ($name==$today[month])) $output.=" today";
		
		$output.="'>$cur</td>";
		
		$cur++; 
		$col++; 
	} else { 
		$output.="'>&nbsp;</td>"; 
		$col++; 
	}  
	    
  if($col==8) { 
    $col=1; 
  }
  if($col==2) {
    $output.="</tr>"; 
  }
}

$output.="  </center>
  </div>
</table>";
  
echo $output;
?>
mackopu
Profil
Bohužel. Sice to vypisuje správně počty dnů, ale jinak tam jsou chyby.
Majkl578
Profil
slo by lepe specifikovat toto: "ale jinak tam jsou chyby."?

co udela puvodni zmena navic s touto:
if($lang == "cz") {
  $zkratky_dni = array(
  "Ne",
  "Po",
  "Út",
  "St",
  "Čt",
  "Pá",
  "So"
  );
} else {
  $zkratky_dni = array(
  "Sun",
  "Mon",
  "Tue",
  "Wed",
  "Thu",
  "Fri",
  "Sat"
  );
}


na

if($lang == "cz") {
  $zkratky_dni = array(
  "Po",
  "Út",
  "St",
  "Čt",
  "Pá",
  "So",
  "Ne"
  );
} else {
  $zkratky_dni = array(
  "Mon",
  "Tue",
  "Wed",
  "Thu",
  "Fri",
  "Sat",
  "Sun"
  );
}
mackopu
Profil
Pro testování nahlédnutí jsem udělal samostatnou stránku.
Majkl578: Provedl jsem tebou navrženou změnu, naní to ono, koukni na to.
Majkl578
Profil
co toto:

<?php
if($_GET['lang'] == "") {
  $lang = "cz";
}

$lang_dnes = $lang == "cz" ? "Dnes" : "Today";

if($lang == "cz") {
  $zkratky_dni = array(
  "Po",
  "Út",
  "St",
  "Čt",
  "Pá",
  "So",
  "Ne"
  );
} else {
  $zkratky_dni = array(
  "Mon",
  "Tue",
  "Wed",
  "Thu",
  "Fri",
  "Sat",
  "Sun"
  );
}


$cz_mesic = array(
"1" => "Leden",
"Únor",
"Březen",
"Duben",
"Květen",
"Červen",
"Červenec",
"Srpen",
"Září",
"Říjen",
"Listopad",
"Prosinec"
);

$output = '';
$month = $_GET['month'];
$year = $_GET['year'];
	
if($month == '' && $year == '') { 
	$time = time();
	$month = date('n',$time);
    $year = date('Y',$time);
}

$date = getdate(mktime(0,0,0,$month,1,$year));
$today = getdate();
$hours = $today['hours'];
$mins = $today['minutes'];
$secs = $today['seconds'];

if(strlen($hours)<2) $hours="0".$hours;
if(strlen($mins)<2) $mins="0".$mins;
if(strlen($secs)<2) $secs="0".$secs;

$days=date("t",mktime(0,0,0,$month,1,$year));
$start = $date['wday']+1;
$name = $date['month'];
$year2 = $date['year'];
$offset = $days + $start;
 
if($month==12) { 
	$next=1; 
	$nexty=$year + 1; 
} else { 
	$next=$month + 1; 
	$nexty=$year; 
}

if($month==1) { 
	$prev=12; 
	$prevy=$year - 1; 
} else { 
	$prev=$month - 1; 
	$prevy=$year; 
}

if($offset <= 28) $weeks=28; 
elseif($offset > 35) $weeks = 42; 
else $weeks = 35; 

$jmeno_mesice = $lang == "cz" ? iconv("windows-1250","UTF-8",$cz_mesic[$month]) : $name;

$output .= "<div align='center'>
  <center>
<table cellpadding='1' cellspacing='0' border='1' bordercolor='silver'>
<tr>
	<td colspan='7'>
		<table cellpadding='3' width='100%'>
		<tr>
			<td>
				<a href='javascript:navigate($prev,$prevy,\"".$lang."\")'>&lt;&lt;</a>
<a class='link-today' href='javascript:navigate(\"\",\"\",\"".$lang."\")'>".$lang_dnes."</a>   
<a href='javascript:navigate($next,$nexty,\"".$lang."\")'>&gt;&gt;</a>
			</td>
		</tr>
    <tr>
			<td>$jmeno_mesice $year2</td>
		</tr>
		</table>
	</td>
</tr>
<tr bgcolor='#808080' style='color:#FFFFFF; font-size:10px;'>";
for($i=0; $i<7; $i++) {
  $output .= "<th width='27' height='20'>".iconv("windows-1250","UTF-8",$zkratky_dni[$i])."</th>";
    }
$output .= "</tr>";

$col=1;
$cur = 1;
$next=0;

for($i=1;$i<=$weeks;$i++) { 
	if($next==3) $next=0;
	if($col==2) $output.="<tr>"; 
  	
	$output.="<td class='day";

	if($i <= ($days+($start-1)) && $i >= $start) {
		if(($cur==$today[mday]) && ($name==$today[month])) $output.=" today";
		
		$output.="'>$cur</td>";
		
		$cur++; 
		$col++; 
	} else { 
		$output.="'>&nbsp;</td>"; 
		$col++; 
	}  
	    
  if($col==8) { 
    $col=1; 
  }
  if($col==2) {
    $output.="</tr>"; 
  }
}

$output.="  </center>
  </div>
</table>";
  
echo $output;



pokud to nepujde (jako ze asi ne), mohl by jsi sem dat komplet kod? upravil bych to na localu a rovnou zkusil, at to tu nemusime resit takhle jak idioti... ;)
mackopu
Profil
Pořád to není ono. Stáhni si zdrojáky odtud a dej mi pak vědět. Díky.
Majkl578
Profil
dumal jsem nad tim dlouho a chodil jsem okoro horky kase. nakonec stacilo zmenit jen jeste toto:

$start = $date['wday']+1;


na

$start = $date['wday'] == 0 ? 7 : $date['wday'];
mackopu
Profil
Skvělé (viz náhled).
Jen jsem to ještě upravil tak, aby anglická verze začínala nedělí a ne pondělkem:
if($lang == "cz") {
  $zkratky_dni = array(
  "Po",
  "Út",
  "St",
  "Čt",
  "Pá",
  "So",
  "Ne"
  );
} else {
  $zkratky_dni = array(
  "Sun",
  "Mon",
  "Tue",
  "Wed",
  "Thu",
  "Fri",
  "Sat",
  );
}

........................

if($lang == "cz") {
  $start = $date['wday'] == 0 ? 7 : $date['wday'];
} else {
  $start = $date['wday']+1;
}
A myslím, že to máme v kupě :-)
Díky za spolupráci.
Majkl578
Profil
jop tak by to melo jit dobre ;) neni zac
Toto téma je uzamčeno. Odpověď nelze zaslat.