Autor Zpráva
Joan
Profil
Zdravím,
před pár lety jsem si vytvořila stránky čistě v HTML. Nyní bych je chtěla v PHP ztransformovat tak, aby nemuselo být na každé stránce vypsané menu a další opakující se prvky, ale aby byly stránky vkládány pomocí parametrů.
Umím to udělat v případě, že jak první, tak druhá úroveň menu je vždy viditelná a je uložena v samostatném souboru, jako mám udělané tady. Na zobrazené stránce mám zároveň úhledně uveden zdrojový kód, jak jsem s parametry pracovala :-)

Tyto stránky mají menu vysouvací, které v HTML pomocí CSS funguje správně, ale neumím je převést na parametry, protože na rozdíl od předchozího vzoru nemá každá položka menu samostatný soubor, který bych propojila s prvním parametrem (to jsou ty, kde mám v menu # a nejsou klikatelné). Některé položky první úrovně menu budou rozbalovací a některé nebudou (to jsou ty, které mají třídu "samotne")
Toto je ukázka původního HTML menu:

      <div id="nav">
   <ul class="lev1">
<li class="podmenu"><a href="#">Nábytek</a>
  <ul class="lev2">
  <li><a href="postele.html">Postele</a></li>
  <li><a href="pohovka.html">Pohovka</a></li>
  <li><a href="skrinka.html">Skříňka do koupelny</a></li>
  </ul>
</li>
  <li class="podmenu"><a href="#">Lampičky</a>
       <ul class="lev2">
    <li><a href="medolampa.html">Lampička ze sklenice</a></li>
    <li><a href="stojaci-lampa.html">Stojací lampička</a></li>
       </ul>
  </li>
<li class="samotne"><a href="hadry.html">Udělátka</a></li>
<li class="samotne"><a href="pernik.html">Perníková díla</a></li>
<li class="samotne"><a href="pc-kos.html">Odpadkový koš</a></li>
<li class="samotne"><a href="hracky.html">Hračky</a></li>
   </ul>
        </div>

Prosím aspoň o mírné nakopnutí, ať poznám, kudy přemýšlet dál. Díky předem!
panther
Profil
Joan:
jestli dobre chapu, tak na strance http://www.handy.zlatberry.cz/postele.html chces neco takoveho?

index.php?cat=nabytek&page=postele
index.php?page=hadry

Podle tohoto pak budes moci oznacovat aktivni polozku i v prvni urovni. Muzes pak zmenit URL prepisem na /nabytek/postele, resp. /hadry.

V menu.php pak bude (pro vsechna LI, v 1. i 2. urovni):
<li<?php echo ($_GET['cat'] == 'nabytek' || $_GET['page'] == 'nabytek') ? ' class="active"' : '' ?>>

Odpovedel jsem na to, cos chtela? Snad ano :)
Joan
Profil
panther:
Ha, to vypadá nadějně! Zdravím Tě a moc děkuji, co nejdřív vyzkouším :-)
peta
Profil
Nebo in_array('nabytek',array($_GET['cat'],$_GET['page']))
Ale, ja bych to resil cislama a prepsal pres str_replace.
$str = '<div id="nav">
   <ul class="lev1">
<li class="podmenu item100"><a href="#">Nábytek</a>
  <ul class="lev2">
  <li class="item101"><a href="postele.html">Postele</a></li>
  <li class="item102"><a href="pohovka.html">Pohovka</a></li>
  <li class="item103"><a href="skrinka.html">Skříňka do koupelny</a></li>
  </ul>
</li>
  <li class="podmenu item200"><a href="#">Lampičky</a>
       <ul class="lev2">
    <li class="item201"><a href="medolampa.html">Lampička ze sklenice</a></li>
    <li class="item202"><a href="stojaci-lampa.html">Stojací lampička</a></li>
       </ul>
  </li>
<li class="samotne"><a href="hadry.html">Udělátka</a></li>
<li class="samotne"><a href="pernik.html">Perníková díla</a></li>
<li class="samotne"><a href="pc-kos.html">Odpadkový koš</a></li>
<li class="samotne"><a href="hracky.html">Hračky</a></li>
   </ul>
        </div>';
$arr_a = array('','a','b','c'); // prvni prazdne, aby cislovani zacinalo jednickou
$arr_b =  array('','a','b','c');
$a = isset($_GET['cat']) ? $_GET['cat'] : '';
$b = isset($_GET['page']) ? $_GET['page'] : '';
$a = in_array($a,$arr_a) ? array_search($a,$arr_a) : $arr_a[0];
$b = in_array($b,$arr_b) ? array_search($b,$arr_b) : $arr_b[0];
$id = 'item'.($a * 100 + $b * 1); //item102
$str = str_replace($id.'"',$id.' sel'.'"',$str); // nahradi --item102"-- za --item102 sel"--; ten apostrof, aby to nenahradilo neco jineho
Joan
Profil
peta:
Promiň, zdá se mi to šíleně složité...
Joan
Profil
panther:
V menu.php pak bude (pro vsechna LI, v 1. i 2. urovni):
>
<li<?php echo ($_GET['cat'] == 'nabytek' || $_GET['page'] == 'nabytek') ? ' class="active"' : '' ?>>

Tak jsem se do toho zakousla a velmi brzy jsem zjistila, že mi v Tvém kódu chybí a href=...
Doplnila jsem jej a index.php jakžtakž rozchodila. A překvapila mě na localhostu zvláštní věc (na swebu se to kupodivu nijak neprojevilo, takže nelze vyzkoušet):
když jsem myší najela na položku "Nábytek" z horního nebo spodního okraje jen trošku (sotva aby se zobrazil kurzor ručičky), ve stavovém řádku se zobrazovalo ...?cat=nabytek&page a jakmile jsem popojela víc doprostřed odkazu, najednou se stavový řádek změnil na ...?cat=postele! Jak je to možné? A navíc přestože jsem na začátku skriptu měla deklarováno

<?php
    if(isset($_GET['cat']))    {
    $str = $_GET['cat'];
    }
    
    if(isset($_GET['page']))    {
    $vyber = $_GET['page'];
    }
    
    $str = (isset($page) ? $page : "uvod");    
    ?>

tak se mi stále zobrazovalo Undefined index. Jakmile jsem ale v Tvé ukázce změnila || na &&, najednou tato chybová hláška zmizela a ve stavovém řádku na Nábytku bylo stále ?cat=nabytek&page=postele.
Zbývají mi vyřešit dva problémy a pojedu zase dál sama:

1) potřebuji zrušit klikatelnost na položku "Nábytek", protože v tom případě se zobrazí stránka "Postele", jenže i současně znění mé chybové hlášky. Ideální stav nastane, když se myš z "Nábytku" bez kliknutí posune na "Postele", ale to nikoho nemusí napadnout...
2) obarvení aktivní položky u tohoto dvojúrovňového menu jsem žádným pokusem nedocílila

Úvodní stránka se obarví, ale ta je samostatná, stejně tak se obarví další samostatné odkazy. Pokusně jsem dosavadní výsledek umístila sem

Skript pro první i druhý parametr (akorát se zamění cat za page) mám takto:

<?php
if (isset($cat) && preg_match('/^[a-zA-Z0-9_-]+$/', $cat))  {
    include file_exists ("../handy/".$cat.".php") == true ?  
    dirname(__FILE__)."/".$cat.".php" :
    dirname(__FILE__)."/404.php";
    } else  {
    dirname(__FILE__)."/uvod.php";
    } 

A vlastní skript takto:

<div id="nav">
   <ul class="lev1">
<li class="samotne"><a href="?cat=uvod"<?php if(($cat)=="uvod") echo 'class="vybr"';?>>Úvodní stránka</a></li>
 <li class="podmenu"><a href="?cat=nabytek&page=postele">Nábytek</a>
  <ul class="lev2">
<li><a href="?cat=postele" <?php echo ($_GET['cat']=="nabytek" && $_GET['page'] == "nabytek") ? 'class="vybr"' : '' 
?>>Postele</a></li>
    </ul> 
  </li>
      </ul>
    </div>

Prosím ještě o help, díky moc :-)

EDIT: trochu jsem se poposunula:
vyvolám obarvení jak položky "Nábytek", tak položky "Postele", ale pouze v případě, že se klikne na "Nábytek" - čímž ovšem vyvolám současně s natažením souboru "Postele" také chybovou hlášku... Při správném kliknutí na "Postele" se neobarví nic, ovšem ani nenaskočí chybovka.
Upravila jsem kód takto:

<a href="?cat=nabytek&page=postele" <?php if(($cat)== "nabytek" && ($page)=="postele") echo 'class="vybr"';?>>Nábytek</a>
panther
Profil
Joan:
Jakmile jsem ale v Tvé ukázce změnila || na &&
to nemuzes :) Vezmu-li tvou ukazku, tak situace, kdy by platila podminka $_GET['cat']=="nabytek" && $_GET['page'] == "nabytek" nikdy nastat nemuze (polozka v 1. a aroven 2. urovni by musela byt „nabytek“).

Tak jsem se do toho zakousla a velmi brzy jsem zjistila, že mi v Tvém kódu chybí a href=...
ano, pracoval jsem jen s LI. Obvykle prirazuji aktivni tridu prave LI, ne odkazu, jak jsi to udelala ty. Proto jsem uvedl jen tento kousek kodu.

Co se tech promennych tyce, byl to pokus o nastrel, takze asi nejak takto:

<?php
$cat = isset($_GET['cat']) ? $_GET['cat'] : '';  //kategorie je jen pro polozky v 2. urovni
$page = isset($_GET['page']) ? $_GET['page'] : 'uvod'; // druha uroven nebo prvni uroven bez submenu nebo uvod
?>

...

<li><a href="?cat=postele" <?php echo in_array('postele', array($cat, $page)) ? 'class="vybr"' : '' 
?>>Postele</a></li>
<!-- pokud mame v URL zminku o posteli (tzn. aktivni nebo nadrazena polozka je Postele), pridame odkazu aktivni tridu -->

potřebuji zrušit klikatelnost na položku "Nábytek", protože v tom případě se zobrazí stránka "Postele"
a co to udelat tak, ze nabytek i postele budou oba klikatelne a oba povedou na postele? Bude to vice „user-friendly“, nez kdyz na Nabytek mohu kliknout, ale nic se nestane.


Aha, prehledl jsem druhy odkaz, kde je prozatimni vysledek... co jsem napsal, mazat nebudu, pokracuju dal :)


Nabytek i postele by mely mit stejny odkaz, tedy str=nabytek&vyber=postele. Promenna $_GET['str'] je kategorie (nebo stranka v 1. urovni), $_GET['vyber'] je pripadna druha uroven, pokud existuje. Uz asi vidis, proc nedefinovane promenne, pouzivas jine, neexistujici klice.

Zacatek by tedy mel vypadat nejak takto:
<?php
    if (isset($_GET['vyber'])) { // vybrana polozka ve 2. urovni
        $str = $_GET['vyber'];
    } elseif (isset($_GET['str'])) { // vybrana polozka v 1. urovni
        $str = $_GET['str'];
    } else {
        $str = 'uvod';
    }
        
    //pak ve file_exists() bude, pokud existuje, vlozene $str . '.php' nebo 404.php
?>


Jsem v praci, psal jsem, jak mi sla myslenka na klavesnici... Snad to bude aspon trochu pochopitelne :) Kdyby ne, ptej se, co ti z toho mnoha informaci nebude jasne a ja to zkusim upresnit (nebo me zastoupi nekdo jiny).
Joan
Profil
panther:
Hle, co jsem vytvořila. Zkoušela jsem to i pomocí pole, ale házelo mi to chybu, už si nevzpomenu jakou...
Já jsem v podstatě spokojená s tím, co se mi podařilo dát dohromady (viz odkaz výše), kupodivu jsem si vystačila s jediným parametrem (přestože mám dvojúrovňové rozbalovací menu), ale dvě věci bych ráda opravila, pokud to vůbec půjde:

1) když kliknu v odkazu na položky menu BEZ šipek, tak se správně obarví aktivní položka. Když zvolím položku menu SE šipkou, tak se správně obarví tato hlavní kategorie (Nábytek) včetně první položky druhé úrovně (Postele). Když ale vyberu druhou položku (Pohovka atd.), tak se sice správně obarví položka druhé úrovně (Pohovka), ale už ne "Nábytek". Jak toho docílit, když v <a href> mohu mít jen jeden cíl? Použití dvou parametrů mi vůbec nepomohlo, zkoušela jsem... Pak by to totiž fungovalo i jako drobečková navigace, návštěvník by hned věděl, ve kterém místě první úrovně se nachází.

2) s překvapením jsem zjistila, že u IE 8 i 9 se šipky u menu zobrazují pouze v úvodní stránce, na všech dalších zmizí. Jak je to možné, když index.php i styl je stejný pro všechny stránky?! Ve FF i Chrome se zobrazují (vše Windows).

A otázka: má pořád ještě smysl ladit i pro IE6? Já to na stránkách ještě mám (psala jsem je v HTML před více než 2 lety), protože v IE6 leccos ulítlo.

Díky moc za návod, jak zprovoznit problém ad 1), pokud je to ovšem možné.

Pozn.: delší dobu se mi nedařilo odeslat tuto zprávu, protože mi vždy vyskočilo, že "Jméno obsahuje zakázané znaky". Jaké jméno? Proč, když jsem byla regulérně přihlášená? Pomohlo až vymazání cookies a vše odznova...
panther
Profil
Joan:
kupodivu jsem si vystačila s jediným parametrem (přestože mám dvojúrovňové rozbalovací menu)
dva parametry nejsou nutné - lze to udělat i jedním. Dva parametry by byly nutné, pokud bys chtěla adresu ve tvaru /nabytek/postele/.

Jak toho docílit, když v <a href> mohu mít jen jeden cíl?
cíl je jen jeden, na první položku v submenu. To je v pořádku.

U nábytku musíš mít vyjmenované všechny stránky, pro které se má tato obarvit. Nebo použít právě druhý parametr :-) Takže, u nábytku to bude vypadat nějak takto (místo „str“ si doplň název svého parametru, který používáš):
<a<?php echo in_array($_GET['str'], array('postele', 'pohovka', 'skrinka')) ? ' class="vybr"' : ''; ?> href="/postele/">Nábytek</a>

s překvapením jsem zjistila, že u IE 8 i 9 se šipky u menu zobrazují pouze v úvodní stránce, na všech dalších zmizí
bohužel nemám dostatek času to zkoumat, na první pohled problém nevidím. Když si v IE8/9 spustíš vývojářský nástroj (F12), zaměříš si položku, kde šipka má být, vidíš, že je tam styl zdvojený (úplně dole, pro div#nav li.podmenu). Když spodní (tedy pozdější) deklaraci background-image smažeš, šipky se zobrazí. Proč je to tam zdvojené, netuším, musíš vyzkoumat sama, nebo se na to kouknu později. Ve stylopisu vypadá vše v pořádku.

má pořád ještě smysl ladit i pro IE6?
to zjistíš nejsnáze ze statistik, kolik lidí z jakých prohlížečů k tobě míří. Obecně to mnoho lidí není, jsou ale segmenty, kde se s IE6 setkat můžeš.
Joan
Profil
panther:
U nábytku musíš mít vyjmenované všechny stránky, pro které se má tato obarvit.
To je pravda, to mi nedocvaklo. Děkuji za připomenutí. Ihned jsem se zájmem vyzkoušela Tvůj příklad s polem array, jenomže:
- modrá barva písma se změnila na černou
- výška odkazu "Nábytek" se scvrkla (patrně výška LI na výšku A)
- tím pádem se rozhodilo zarovnání první a druhé úrovně menu
- a stejně se správné obarvení nekonalo.

Patrně jsem někde něco musela udělat špatně, přes opakovanou kontrolu, ovšem osvítil mě geniální a hlavně funkční nápad:
<li class="podmenu"><a href="/postele/" <?php if(($x) == "nabytek" || ($x) == "postele" || ($x) == "pohovka" || ($x) == "skrinka") echo 'class="vybr"';?>>Nábytek</a>
       <ul class="lev2"> 
<li><a href="/postele/" <?php if(($x) == "postele") echo 'class="vybr"';?>>Postele</a></li>
<li><a href="/pohovka/"<?php if(($x) == "pohovka") echo 'class="vybr"';?>>Pohovka</a></li>
<li><a href="/skrinka/"<?php if(($x)=="skrinka") echo 'class="vybr"';?>>Skříňka</a></li>
      </ul> 
    </li>

Prostě jsem použila pro každou položku || a chová se to tak, jak jsem chtěla :-))

Jsem přesvědčena, že s použitím array by byl kód kratší, ale bohužel nepodařilo se mi to rozchodit...

Jinak IE8 na Win7 (další jsem nezkoušela) si ze mě dělá šprťouchlata, protože šipka u menu první úrovně se zobrazuje toliko u:
- úvodní stránky
- 3.položky u lampiček "Nástěnné svítidlo"
- u obou Dárků
- u Perníkového díla

Přičemž tyto nové položky (kromě Perníku, ten už tam byl dřív) jsem přidávala pouhým zkopírováním předchozího vhodného kódu a přepsáním na aktuální proměnné a názvy. Ostatní položky jsou v IE stabilně ochuzené o obrázky šipeček. Nechápu!
Do vývojářské konzole v IE jsem se dívala, v přeškrtnutí stylopisu jsem nenacházela analogii (chovalo se to po každém vymazání mezipaměti jinak). Jsem z toho jelen...

Ještě jsem si všimla, že na úvodní stránce (zase v IE, jak jinak), se ve slově "Vždyť" (uprostřed textu v modré "smaltované ceduli) zobrazí zbytečná mezera mezi Y a Ť, ve FF je to v pořádku. Ani znovunahrání uvod.php na FTP nepomohlo.
panther
Profil
Joan:
jsem se zájmem vyzkoušela Tvůj příklad s polem array, jenomže:
chyba v něm (snad) není, kontroloval jsem to několikrát, měla jsi tam správně mezery? Tzn., nevytovřilas ve výsledném HTML třeba <aclass="">, tedy bez mezery mezi vkládanou třídou a zbytkem HTML? Jiná chyba by tam být neměla.

Tvůj zápis je taky funkční, jen delší a trochu neohrabanější. U webu tohoto rozsahu to asi nevadí.

protože šipka u menu první úrovně se zobrazuje toliko u:
slíbil jsem ti, že se na to podívám, zatím jsem na to čas neměl... do konce týdne na to mrknu, snad něco najdu. To chování je nějaké divné. Něco s tím vymyslíme, neboj :-)
Joan
Profil
panther:
Ahoj a děkuji za pomoc! Však to není světový web, takže počká, až si najdeš chvilku :-). Třeba (nové) poslední položky submenu u nábytku a lampiček šipky zobrazí, ostatní v těchto kategiriích ne. Je to opravdu záhada.
Něco jsem přidala a zobrazování šipek v IE je stále snad podle počasí. Napřed mi přišlo, že to souvisí s diakritikou v názvu položky menu, ale bylo to zase jak kdy. Tvůj kód jsem taky několikrát zkontrolovala - však měl jít na místo, kde mám řadu těch || - že? Zítra to zkusím ještě jednou rozjet, vrtá mi to hlavou.
Mám od tatínka hlášku, že se mu menu špatně zobrazuje v Opeře. Tu jsem zatím nezkoušela, teprve ji musím nainstalovat...
Joan
Profil
Joan:
Tak jsem na to došla sama! Měla jsem zapomenuté interní stylování pro IE v každém souboru a když jsem ho smazala (holt návštěvníku s IE 6 a nižším se zobrazí stránky bez stylů, protože to mám už tak překopané, že by mi oprava pro IE 6 zabrala neúměrně času), tak se šipečky zobrazují u KAŽDÉ položky menu. FF to schroustal, IE si na dvojím stylování vylámal zuby. Čili chyba mezi klávesnicí a židlí :-)
Hezký den.
panther
Profil
Joan:
promiň, přiznám se, že jsem na tebe úplně zapomněl :-(

Chceš pomoct s tím webem v šestce, abych to trochu odčinil? Snad to takový problém, jak píšeš, nebude (teď to nemůžu vyzkoušet, jak to vypadá).
Joan
Profil
panther:
No, mohl, a velice :-). Zatím mi stránky běží dobře s jedním parametrem, umím si i funkcí přiřazovat title, ale přece jen bych raději do toho přimontovala i druhý parametr... To znamená, aby se mi adresa zobrazila ve tvaru domena/nabytek/postele/ apod. a ne domena/postele/.
Pokusila jsem se na to přijít sama podle Tvého návodu výše, ale ten zamýšlený druhý parametr se neukázal (chybu to ale taky nehází žádnou).

S jedním parametrem $x to vypadá takto:
($x má představovat nábytek, lampičky, pro dětičky...)

<?php
    if(isset($_GET['x']))    {
    $x = $_GET['x'];
    }
          
    $x = (isset($x) ? $x : "uvod");   
    ?>

   <ul class="lev1">
<li><a href="/uvod/"<?php if(($x)=="uvod") echo 'class="vybr"';?>>Úvodní stránka</a></li>
    <li class="podmenu"><a href="/postele/" <?php if(in_array(($x), array("nabytek", "postele", "pohovka", "skrinka-pod-umyvadlo", "stul"))) echo 'class="vybr"';?>>Nábytek</a>
       <ul class="lev2"> 
<li><a href="/postele/" <?php if(($x) == "postele") echo 'class="vybr"';?>>Postele</a></li>
<li><a href="/pohovka/"<?php if(($x) == "pohovka") echo 'class="vybr"';?>>Pohovka</a></li>
      </ul> 
    </li>
<li><a href="/pc-kos/" <?php if(($x)=="pc-kos") echo 'class="vybr"';?>>Odpadkový koš</a></li>
<li><a href="/ruzne/" <?php if(($x)=="ruzne") echo 'class="vybr"';?>>Různé</a></li>
</ul>        
    

Pokus o druhý parametr $y vypadá takto:
(parametr $y má představovat postele, pohovka, skrinka-pod-umyvadlo...)

<?php
    if(isset($_GET['x']))    {
    $x = $_GET['x'];
    }
    
    if(isset($_GET['y']))    {
    $y = $_GET['y'];
    }
    
$x = isset($_GET['x']) ? $_GET['x'] : '';
$y = isset($_GET['y']) ? $_GET['y'] : 'uvod';   
          
    $x = (isset($x) ? $x : "uvod");   
    ?>

<ul class="lev1">
<li><a href="/uvod/"<?php if(($x)=="uvod") echo 'class="vybr"';?>>Úvodní stránka</a></li>
    <li class="podmenu"><a href="/postele/" <?php if(in_array(($x), array("nabytek", "postele", "pohovka", "skrinka-pod-umyvadlo", "stul"))) echo 'class="vybr"';?>>Nábytek</a>
       <ul class="lev2"> 
<li><a href="/postele/" <?php echo in_array('postele', array($x, $y))  ? 'class="vybr"' : '';?>>Postele</a></li>
<li><a href="/pohovka/"<?php echo in_array('pohovka', array($x, $y))  ? 'class="vybr"' : '';?>>Pohovka</a></li>
      </ul>
.... atd.



A můj .htaccess:

RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)/$ ?x=$1 [L,QSA]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)/([^/]+)$ ?x=$1&?y=$2  [L,QSA]

Na co jsem prosím Tě zapomněla? Díky moc za Tvůj čas!
panther
Profil
Joan:
ale ten zamýšlený druhý parametr se neukázal
musíš přepsat odkazy do nového tvaru URL. Tzn. odkaz na „postele“ bude /nabytek/postele/.

Ten rewrite se mi moc nezdá, nelíbí se mi tam ta dvojí podmínka testující totéž, netestuješ existenci adresáře (ale pouze souboru).
Osobně ti s tím neporadím, ale zkus kouknout sem, 10. příklad se dvěma parametry. To by mělo být to, co hledáš.

Co se samotného zpracování týče, tak bych to viděl takto:
<?php

$x = isset($_GET['x']) ? $_GET['x'] : '';
$y = isset($_GET['y']) ? $_GET['y'] : '';

?>

<ul class="lev1">
    <!-- bude aktivní, pokud X bude 'uvod', nebo v URL nebude zadny parametr -->
    <li><a href="/uvod/"<?php echo in_array($x, array('uvod', '')) ? ' class="vybr"' : ''; ?>>Úvodní stránka</a></li>
    <li class="podmenu">
        <!-- bude aktivní, pokud budou dva parametry a X bude 'nabytek' -->
        <a href="/nabytek/postele/"<?php echo $x == 'nabytek' ? ' class="vybr"' : ''; ?>>Nábytek</a>
        <ul class='lev2'> 
            <!-- bude aktivní, pokud budou dva parametry a Y bude 'postele' -->
            <li><a href="/nabytek/postele/"<?php echo $y == 'postele' ? ' class="vybr"' : ''; ?>>Postele</a></li>
            <!-- bude aktivní, pokud budou dva parametry a Y bude 'pohovka' -->
            <li><a href="/nabytek/pohovka/"<?php echo $y == 'pohovka' ? ' class="vybr"' : ''; ?>>Pohovka</a></li>
        </ul>
    ...
</ul>

Co se té šestky týče, výjimečně jsem na tebe nezapomněl, jen jsem neměl možnost dostat se ke stroji, kde by šestka běžela. Tipnu si ale, že to bude webová stránka bez stylů.
<!--[if lt IE 7]>
    <p>Používáte Internet Explorer verze 6 nebo nižší. Nechcete si nainstalovat modernější prohlížeč k příjemnějšímu prohlížení stránek?</p>
<![endif]-->
<!--[if gte IE 7]><!-->
    <link rel="stylesheet" type="text/css" href="/styl-handy.css">
<!--<![endif]-->

Můžeš tohle, prosím, vyhodit? Zítra bych snad měl mít možnost dostat se k šestce, tak bych se na ten tvůj výtvor konečně mrknul.
Joan
Profil
panther:
Teda vřelé díky za bleskovou odpověď!
Rozhodla jsem se nakonec ten IE 6 úplně od stylů odstřihnout, protože už vylezla devítka a šestka už patří spíš vzpomínkové historii. Takže díky, s tím ztrácet čas nemusíš.
O to spíš se snažím mít v adrese oba parametry, ale zatím se mi natáhne pouze úvod, u ostatních chybovka. .htaccess jsem si opravila, ale stejně to nejede, jak má: položka "nabytek" i položka "postele" se sice obarví, ale stránka se nenatáhne resp. zobrazí se chybovka. Po umazání /postele/ mě to hodí do adresáře. Napadlo mě, jestli to není cestou: mám veškeré php soubory v adresáři "handy" a pro zobrazení souborů používám pouze toto:

<?php
if (isset($x) && preg_match('/^[a-zA-Z0-9_-]+$/', $x))  {
    include file_exists ("../handy/".$x.".php") == true ?  
    dirname(__FILE__)."/".$x.".php" :
    dirname(__FILE__)."/404.php";
    } else  {
    dirname(__FILE__)."/uvod.php";
    } 

Na svých dalších stránkách taky používám dva parametry, ovšem na rozdíl od současné práce jak první tak druhá úroveň existuje jako fyzický soubor v php a zde includuji stránky dvěma skripty jako je výše uvedený, přičemž první úroveň mám v hlavním adresáři a druhou úroveň ve složce "navody". Zde se mi skutečně i v adrese zobrazují oba parametry a já stále hledám podobnost, kterou bych mohla využít. Chybovka vlastně znamená, že Apache soubor nenašel, tak tipuji spíš na špatnou cestu...
Díky za pomoc!

EDIT: dopsala jsem skript na zobrazování druhého parametru (došlo mi se zpožděním jak Pendolino, že nezobrazování stránek je způsobeno právě jeho chyběním):

<?php
if (isset($x) && preg_match('/^[a-zA-Z0-9_-]+$/', $x))  {
    include file_exists ("../handy/".$x.".php") == true ?  
    dirname(__FILE__)."/".$x.".php" :
    dirname(__FILE__)."/404.php";
    } else  {
    dirname(__FILE__)."/uvod.php";
    } 
    
if (isset($y) && preg_match('/^[a-zA-Z0-9_-]+$/', $y))  {
    if (file_exists ("../handy/".$y.".php"))  {
    include "../handy/".$y.".php";  }
    else   {
    include dirname(__FILE__)."/404.php";
    }
}   
?>

a skutečně už jsem o krok dál, huráá! Stránka "postele" se zobrazí správně a jediná vada na kráse je ta, že přesto vyskočí chybovka týkající se $x - patrně proto, že stránka "nabytek" fyzicky v PHP neexistuje. Proměnná $y na jednotlivé stránky v dané kategorii totiž neprotestuje a skutečně je uložená jako soubor v PHP.
Vyřešila jsem to "šalamounsky" tak, že jsem vytvořila zcela prázdný soubor s názvem "nabytek.php" a ejhle, chyba je pryč. Ovšem když umažu z adresy /postele/ tak vidím prázdnou stránku. Hm, to jsem si tedy velmi nepomohla... )

Jsem mimo mísu myšlenkou dopsat "něco" do .htaccess, aby se virtuální $x prvního řádu vytvořila?
Joan
Profil
Stále narážím na skutečnost, že soubory v $x fyzicky neexistují.
Proč je $x stále nedefinovaná? Když v úvodu skriptu mám:

¨$x = isset($_GET['x']) ? $_GET['x'] : 'uvod';

Ale to je očividně nedostačující. V .htaccess mám pouze toto:

RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)/?([^/]+)?/?$ ?x=$1&y=$2 [L,QSA]

Podmenu se zobrazuje správně, ale při umazání /postele/ z adresního řádku s /nabytek/postele/ se mi ukáže prázdná stránka. Pokusila jsem se to obejít switchem, ale při adrese /nabytek/ jsem videla includovaný soubor 2x, což je blbost.

Protože $x údajně stále neexistuje, tak jsem v o chlup výše uvedeném [#17] Joan include $x místo standardní 404.php vytvořila úplně prázdný soubor neni.php a tím zmizela ze zorného pole chybová hláška. Jen opticky, ale pámbuzaplať za to. Pořád váznu na té $x přiřazované neexistujícím souborům.
Jak prosím přinutím $x, aby byla konečně definovaná?
Moc děkuji!

EDIT: H-O-T-O-V-O!! Stránky jsem dostala SAMA do fungující podoby a už mi s daným problémem (prozatím) netřeba pomáhat :-))

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: