Autor Zpráva
Jcas
Profil *
Obsah includovaného souboru (žádné tagy <html>, <body>, <div>)
Pouze tohle!!!
<a href=....></a>
<?php
......
?>
<a href=....></a>


Ty odkazy jsem si tam dal, abych si ověřil includování.
Pokud tento soubor otevřu v prohlížeči, je vše OK. Zobrazí se odkaz, zpracuje se php a zobrazi se druhý odkaz.

Pokud tento soubor includuji do šablony, nezobrazí se nic a nezobrazí se nic, co je v šabloně za include.
Jak jsem řekl, napsal jsem si tam odkazy pro ověření, že se soubor includuje.
Tedy když zakomentuji <?php /*....*/ ?> Include proběhne v pořádku a do šablony se vloží dva odkazy.

Problém bude asi v nějaké základní drobnosti, kterou neznám. Jako např.(jednou jsem narazila na to, že před <?php nesmí být mezera), nebo nějaká taková drobnost.

Jak probíhá zpracování? Může mít php v šabloně stejnou proměnou, jako includovaný soubor?
Includuje se soubor a pak proběhne zpracování php, nebo se napřed php zpracuje a includuje se výsledek (tedy čisté html)?
tiso
Profil
Jcas: funguje to asi takto:
- vykonáva sa php nadradeného súboru (u teba šablóny)
- keď narazí na inštrukciu include, tak ukončí mód php (?>) a akoby vloží obsah ivkladaného súboru do vnútra nadradeného súboru
- pokračuje vo vykonávaní (teraz kódu vkladaného súboru)
- po vykonaní konca vkladaného súboru znovu otvorí mód php a pokračuje ďalej vo vykonávaní nadradeného súboru
Takže vložený skript dokáže pracovať s viditeľnými premennými nadradeného skriptu (a, b) a naopak nadradený skript vie pod miestom include (c) pracovať s viditeľnými premennými vkladaného skriptu (d, e, f):

a.php:
…a…
…b…
include
…c…

b.php:
…d…
…e…
…f…

vysledok po include:
…a…
…b…
?>
…d…
…e…
…f…
<?php
…c…

Takže tam máš nejakú chybu (napríklad nežiadúce ovplyvňovanie premených).
Jcas
Profil *
Zde je kod a zjistil jsem, kterej řadek děla problem.
Tzn. Když ho zakomentuji, tak se include provede bez problemu (samozrejme se nevypise to co ma-to co ten radek dela)

Ten řádek je:
for($day=1;$day<=$count_days;$day++) {$den[] = $day;}


Jsem si jist, že ani jedna z těch tří proměnných v šabloně není.

<a href="http://localhost/zocsch/index.php?page=ruzne&str=zvireci_kalendar"><button>kal</button></a>

<?php

if(isset($_GET['month'])) {$month=$_GET['month'];}
if(isset($_GET['year'])) {$year=$_GET['year'];}

// pokud nejsou proměnné zinicializovány, vloží aktuální hodnoty
if(!isset($month)) $month = date("m");
if(!isset($year)) $year = date("Y");

// převod na korektní hodnoty
$year = date("Y", mktime(0,0,0, $month, 1, $year));
$month = date("m", mktime(0,0,0, $month, 1, $year));

$count_days = date("t", mktime(0,0,0, $month, 1, $year)); // počet dnů v měsíci

// ke každému dni přiřadí jeho číslo v týdnu (1 = pondělí, ...)
for($i=1;$i<=$count_days;$i++) {
    $date[$i] = date("w", mktime(0,0,0,$month,$i,$year));
    if($date[$i]==0) $date[$i] = 7; 
	}

$first = $date[1];    // číslo prvního dne v měsíci (1 = pondělí, ...)
$end = $date[$count_days];		//cislo posledniho dne v mesici


for($x=1;$x<$first;$x++) {$den[$x] = '&nbsp;';}
for($day=1;$day<=$count_days;$day++) {$den[] = $day;}
for($i=$end;$i<7;$i++) {$den[] = '&nbsp;';}

// Priradime jmena mesicu 
 switch ($month)
{
  case 01:
    $mesic="Leden";
    break;
  case 02:
    $mesic="Únor";
    break;
  case 03:
    $mesic="Březen";
    break;
  case 04:
    $mesic="Duben";
    break;
  case 05:
    $mesic="Květen";
    break;
  case 06:
    $mesic="Červen";
    break;
  case 07:
    $mesic="Červenec";
    break;
  case 08:
    $mesic="Srpen";
    break;
  case 09:
    $mesic="Září";
    break;
  case 10:
    $mesic="Říjen";
    break;
  case 11:
    $mesic="Listopad";
    break;
  case 12:
    $mesic="Prosinec";
    break;
}
//vytvoříme pole se jmeny dnu
$jmenodne = array(1=>'Pondělí', 'Úterý', 'Středa', 'Čtvrtek', 'Pátek', 'Sobota', 'Neděle');

?>

<a href="http://localhost/zocsch/index.php?page=ruzne&str=zvireci_kalendar"><button>kalend</button></a>

<table>
	<tr>
		<th colspan="3" align="left"><?php echo $mesic;?></th>
		<th></th>
		<th colspan="3" align="right"><?php echo $year;?></th>
	</tr>
	<tr align="center"><td>

<?php 
foreach ($den as $prvek) {
	if($prvek!='&nbsp;') {echo ($jmenodne[$date[$prvek]].'<br />');}
	echo ($prvek.'<br />');
	if($date[$prvek]!=7) {echo ('</td><td>');}
	else {echo ('</td></tr><tr align="center"><td>');}
	}
?>
	
</table>
jenikkozak
Profil
Jcas:
V uvedeném kódu (který se mi moc nelíbí) žádné include není...
Nemáš třeba chybně uvedenou cestu k includovanému souboru a skryté zobrazování chybových hlášek?
Jcas
Profil *
$den = array();

Tohle je řešení, ale nechápu proč. Zpracovává to stejný prohlížeč, stejná verze php, tak nechápu, proč při inklude musím provést tuto inicializaci pole.
Jcas
Profil *
proč se ti nelíbí kód?
Je z 90% okopčený. A dělám to tak, aby si kaledář mohlo vyvolat více stránek a každá trochu jinak.
Proto tvořím pole $den a dělám to tak, aby zobrazovací kód byl co nejmenší.
Keeehi
Profil
Jcas:
proč se ti nelíbí kód?
Je z 90% okopčený.
To že ho okopíruješ od někoho, z něj nedělá pěkný kód. Když okopíruješ sice funkční ale ošklivý kód, je pořád ošklivý.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: