Autor | Zpráva | ||
---|---|---|---|
Jcas Profil * |
#1 · Zasláno: 9. 10. 2010, 06:55:08
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 |
#2 · Zasláno: 9. 10. 2010, 08:30:38
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 * |
#3 · Zasláno: 9. 10. 2010, 10:46:17
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] = ' ';} for($day=1;$day<=$count_days;$day++) {$den[] = $day;} for($i=$end;$i<7;$i++) {$den[] = ' ';} // 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!=' ') {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 |
#4 · Zasláno: 9. 10. 2010, 10:55:59
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 * |
#5 · Zasláno: 9. 10. 2010, 11:04:55
$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 * |
#6 · Zasláno: 9. 10. 2010, 11:07:33
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 |
#7 · Zasláno: 9. 10. 2010, 13:42:26
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ý. |
||
Časová prodleva: 14 let
|
0