Autor Zpráva
Silencer
Profil
Mám problém s odkazovaním na subor v podadresari.
Používam includovací systém, kde mám súbor index.php, ktorý si načíta hlavičku, stred (samotný obsah) a pätu. Problém je však v tom, že súbor na zaradenie do stredu script vždy hľadá v hlavnom adresári.
Potrebujem však kvôli prehľadnosti oddeliť viac súborov do iného podadresára, ale nedokážem ho bez problémov nasmerovať do tohto podadresára. Napr. toto je klasický odkaz, ktorý ide bez problémov:
<a href="index.php?zoznam-clenov">zoznam členov</a>

Potrebujem však odkázať na súbor, ktorý je v podadresári:
<a href="/graf/index.php?prihov0">Príhovor</a>

Je mi jasné, že ten súbor index.php sa tam nenachádza, takže je to chybný script.
Neviem však, ako ho tam nasmerovať? V podadresári bude iba text, takže žiadne problémy s obrázkami nebudú (pokiaľ to načíta správne hlavičku a pätu)?

Ďakujem za radu.
Alphard
Profil
<a href="index.php?%2Fgraf%2Fprihov0">zoznam členov</a>
Silencer
Profil
Ak som to dobre pochopil, %2F má nahradiť lomítko.
Po doplnení do scriptu má to však hádže na hlavnú stránku.
Možno je však problém s mojím scriptom, ktorý testuje, či stránka existuje, pre istotu ho prikladám:
<?

if (!IsSet($page)){ $page="aktuality"; }
if (IsSet($page)){
$file='t_'.$page.'.php';
if (File_Exists($file)){ include $file; }
elseif (!File_Exists($file)) { include "t_error.php"; }
}
?>
tiso
Profil
Silencer - nepochopil si princíp if/else, zbytočne tam dávaš tie isté podmienky viackrát!
Alphard
Profil
když testuješ $page, mělo by být index.php?page=%2Fgraf%2Fprihov0"

$file='t_'.$page.'.php';
vzhledem k tomu, že je součástí cesty adresář to nebude fungovat
Silencer
Profil
Silencer - nepochopil si princíp if/else, zbytočne tam dávaš tie isté podmienky viackrát!

tiso - netvrdím, že som programátor, používam, však ten script už dlhšie a nemal som s ním problém. Ten kód mi ukázal skúsený programátor php, ktorý mi vysvetľoval include systém v php. Je v tom kóde taká chyba, ktorá ovplyvňuje môj zámer odkazovať do podadresára, alebo je ten kód iba zbytočne dlhý?
Silencer
Profil
Alphard - keď napíšem odkaz ako index.php?page=%2Fgraf%2Fprihov0, stránku mi nenájde, teda vypíše moju chybovú hlášku, ktorá je v kóde vyššie, že ak neexistuje file, tak includuje t_error.php.
Dá sa zmeniť tá podmienka tak, aby neovplyvnila iné časti stránky a zároveň dokázala odkazovať do podadresára?
Za podmienok použitia kódu na includovanie ukázaneho vyššie a použitého podmienkovania, teda nie je možné schovať súbory do podadresárov?
Alphard
Profil
jestli se vzdáš t_ před názvem, můžeš použít
<?php
if (isset ($_GET['page']))
  {  if (file_exists ($_GET['page'].".php"))
       $soubor = $_GET['page'].".php";
      else
       $soubor = "error.php";  }
 else
  $soubor = "aktuality.php";

include $soubor;
?>
Silencer
Profil
Vyskúšal som to, ale rovnako ma nedokáže odkazovať na súbor v podadresári, je to rovnaké ako predtým.

A v tom kóde bola malá chybička, koniec zloženej zátvorky } mal byť za error.php, to som si opravil.
Alphard
Profil
nevím, v čem je chyba, ale můj kód funguje, teď jsem ho zkoušel
URL ve tvaru ht-tp://localhost/neco/struktura.php?page=prvni%2Fdruhy%2Ftreti%2Ftext
a správně to includovalo soubor text.php (spojovník v http je tam jen kvůli převodu na odkaz v této diskuzi)

s tou závorkou máš pravdu, opravím to
Silencer
Profil
Pri tom mojom vzdávani sa t_ som zabudol vzdať sa ho aj v tom podadresári "graf".
Keď som ho potom správne premenoval, tak to už správne zobrazí aj podstránku v podadresári.

Ďakujem veľmi pekne za pomoc.

Len pre dovysvetlenie: Problém spôsobovalo pomenovavanie súborov s t_? Keby som ho chcel zachovať, tak sa musím vzdať podadresárov?
t_ nemá zvláštný význam okrem odlíšenia súborov, ktoré sú podstránkami od ostatných hlavných súborov (header, footer a pod.)
Alphard
Profil
Len pre dovysvetlenie:

problém je v tom, že součásti cesty je adresář. např. adresar1/adresar2/soubor.php a pokud na začátek tohodle doplníš t_, vznikne t_adresar1/adresar2/soubor.php a to je ten problém

jsou v zásadě 3 možnosti řešení:
1. t_ bude již v odkazu, nebude se doplňovat v kódu a vše bude OK
2. mít 2 GET proměnné, např. cesta a page, pak se spojí $cesta."t_".$page a bude to OK
3. najít v cestě začátek souboru, rozseknou ho tam na dvě části a postupovat jako 2.
Silencer
Profil
Teraz som to pochopil na 100 %. V podstate mi stačilo do môjho systému includovania doplniť premennú cesta a tu potom definovať pri odkazoch.
Super, funguje to. Ešte raz diky.

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:

0