Autor | Zpráva | ||
---|---|---|---|
vojtinec Profil |
Čau
Mám problém s aktivní polozkou v menu. Hledám a zkouším, ale problém nemůžu vyřešit... v index.php mám: <?php include ("comp/hlavicka.php"); include ("comp/menu3.php"); echo "<div class='obsah'> <div class='obsah2'>"; $page = $_GET['page']; if (!isset($_GET['page'])) { $page = "novinky"; } $soubor = "page/".$page.".php"; if (!file_exists($soubor)) { $soubor = "page/novinky.php"; } include ($soubor); echo "</div> </div>" ; ?> a v menu.php : <?php if ($page=="novinky") { echo " class='aktivni'"; } echo "<a class='polozka_menu' href='index.php?page=novinky'><b>Novinky</b></a>"; if ($page=="kapela") { echo " class='aktivni'"; } echo "<a class='polozka_menu' href='index.php?page=kapela'><b>Kapela</b></a>"; if ($page=="foto") { echo " class='polozka_menu:hover'"; } echo "<a class='polozka_menu' href='index.php?page=foto'><b>Foto</b></a>"; if ($page=="media") { echo " class='aktivni'"; } echo "<a class='polozka_menu' href='index.php?page=media'><b>Media</b></a>"; if ($page=="koncerty") { echo " class='aktivni'"; } echo "<a class='polozka_menu' href='index.php?page=koncerty'><b>Koncerty</b></a>"; if ($page=="forum") { echo " class='aktivni'"; } echo "<a class='polozka_menu' href='index.php?page=forum'><b>Fórum</b></a>"; if ($page=="odkazy") { echo " class='aktivni'"; } echo "<a class='polozka_menu' href='index.php?page=odkazy'><b>Odkazy</b></a>"; if ($page=="kontakt") { echo " class='aktivni'"; } echo "<a class='polozka_menu' href='index.php?page=kontakt'><b>Kontakt</b></a>"; ?> a v prohlížeči mi to vždy k položce menu hází hlášku: Notice: Undefined variable: page in C:\Program Files\EasyPHP5.3.0\www\noizztoy_new\comp\menu3.php on line 3 |
||
Taps Profil |
#2 · Zasláno: 26. 10. 2009, 14:09:25
vojtinec:
řešením je vypnout zobrazování poznámek v php |
||
Budulinek Profil |
#3 · Zasláno: 26. 10. 2009, 14:25:01
Taps:
No, řešení to je, ale neřekl bych, že zrovna nejlepší... vojtinec: Asi hledáš málo... Co zkusit slovník, přeložit si tu hlášku a zachovat se podle ní? Pokud ti to hlásí, že nemáš definovanou proměnnou, tak ji asi bude nejlepší někde definovat. Zkus třeba přidat před onu proměnnou toto: $nedefinovana_promenna = isset($nedefinovana_promenna ) ? $nedefinovana_promenna : ""; snad bz to mohlo pomoct. |
||
Mastodont Profil |
#4 · Zasláno: 26. 10. 2009, 14:30:06 · Upravil/a: Mastodont
Taps:
To ale není dobré řešení. Lepší je přeuspořádat kód v index.php tak, aby byla definována $page a pak teprve bylo vloženo menu. |
||
Joker Profil |
#5 · Zasláno: 26. 10. 2009, 14:37:51
Taps:
„řešením je vypnout zobrazování poznámek v php“ Mno, to není řešení. Spíš je to předstírání, že problém neexistuje. vojtinec: if (!isset($_GET['page'])) { $page = "novinky"; } Stačí tenhle kus kódu posunout před vložení menu. |
||
vojtinec Profil |
#6 · Zasláno: 26. 10. 2009, 14:49:44 · Upravil/a: vojtinec
Jsem ztracen... v menu jsem proměnnou $page nahradil proměnnou $_GET a hláška už se nezobrazuje, ale jsem zas na začátku...a nevim co stim...chci docílit toho aktivního políčka menu..
|
||
Budulinek Profil |
#7 · Zasláno: 26. 10. 2009, 15:34:17
vojtinec:
nepročítal jsem ten tvůj kód, takže samozřejmě jsou lepší řešení od Joker nebo Mastodont, ale to řeší chybu, která se ti vypisuje. Nevím, co dalšího ti nefunguje... Konkrétně mi není úplně jasné tohle: if ($page=="novinky") { echo " class='aktivni'"; } echo "<a class='polozka_menu' href='index.php?page=novinky'><b>Novinky</b></a>"; do jakého elementu se vypíše class='aktivni'? |
||
vojtinec Profil |
#8 · Zasláno: 26. 10. 2009, 18:55:09
Ja se v tom moc nevyznám...sebral jsem to tady:
http://polopate.jakpsatweb.cz/index.php?page=include4 trochu jsem to upravil...mám tam zmatek s těma proměnnýma.. |
||
AM_ Profil |
#9 · Zasláno: 26. 10. 2009, 20:34:42
ech, ona ta chyba docela bije do očí, a tady jí asi 6 lidí nevidí :)
//tady inkludujeme menu include ("comp/menu3.php"); echo "<div class='obsah'> <div class='obsah2'>"; //až tady zakládáme proměnnou $page, tak mi přijde pochopitelné, že v době inkluze menu ještě neexistuje :) $page = $_GET['page']; if (!isset($_GET['page'])) { $page = "novinky"; } |
||
vojtinec Profil |
#10 · Zasláno: 26. 10. 2009, 22:28:29
Nemužete mi někdo poradit, co jak mam udělat, abych docílil odlišení jedné aktivní položky menu od ostatních?
|
||
Alphard Profil |
#11 · Zasláno: 26. 10. 2009, 22:38:54
vojtinec:
Zapracujte to, co psal AM_, a zkopírujte sem aktuální verzi vašeho kódu. Začíná v tom být zmatek. |
||
vojtinec Profil |
Dobrá...
index: <?php include ("comp/hlavicka.php"); if (!isset($_GET['page'])) { $page = "novinky"; }$page = $_GET['page']; $obsah = "page/".$page.".php"; if (!file_exists($obsah)) { $obsah = "page/novinky.php"; } include ("comp/menu3.php"); echo "<div class='obsah'> <div class='obsah2'>"; include ($obsah); echo "</div> </div>" ; ?> menu (tam bude asi zakopaný pes): <?php if ($page=="novinky") { // neboli pokud je ve $str to samé, jako níže v odkazu echo " class='aktivni'"; // tak se zobrazí kód pro třídu "aktivní" } echo "<a class='polozka_menu' href='index.php?page=novinky'><b>Novinky</b></a>"; if ($page=="kapela") { echo " class='aktivni'"; } echo "<a class='polozka_menu' href='index.php?page=kapela'><b>Kapela</b></a>"; if ($page=="foto") { echo " class='polozka_menu:hover'"; } echo "<a class='polozka_menu' href='index.php?page=foto'><b>Foto</b></a>"; if ($page=="media") { echo " class='aktivni'"; } echo "<a class='polozka_menu' href='index.php?page=media'><b>Media</b></a>"; if ($page=="koncerty") { echo " class='aktivni'"; } echo "<a class='polozka_menu' href='index.php?page=koncerty'><b>Koncerty</b></a>"; if ($page=="forum") { echo " class='aktivni'"; } echo "<a class='polozka_menu' href='index.php?page=forum'><b>Fórum</b></a>"; if ($page=="odkazy") { echo " class='aktivni'"; } echo "<a class='polozka_menu' href='index.php?page=odkazy'><b>Odkazy</b></a>"; if ($page=="kontakt") { echo " class='aktivni'"; } echo "<a class='polozka_menu' href='index.php?page=kontakt'><b>Kontakt</b></a>"; ?> |
||
Alphard Profil |
#13 · Zasláno: 26. 10. 2009, 23:03:55
1.
if (isset($_GET['page'])) { $page = $_GET['page']; } else { $page = "novinky"; } 2. analogicky všude echo "<a class='polozka_menu' href='index.php?page=kapela'"; if ($page=="kapela") { echo " class='aktivni'"; } echo "><b>Kapela</b></a>"; Tu třídu musíte dát k odkazu, výsledné html musí dávat smysl. A třída aktivni musí být samozřejmě v CSS definovaná. |
||
Joker Profil |
#14 · Zasláno: 26. 10. 2009, 23:04:35
AM:
„ech, ona ta chyba docela bije do očí, a tady jí asi 6 lidí nevidí :)“ Já jo (viz #5) ;-) vojtinec: index, na začátku: if (!isset($_GET['page'])) { $page = "novinky"; } else $page = $_GET['page']; |
||
vojtinec Profil |
#15 · Zasláno: 26. 10. 2009, 23:15:19
vše jsem udělal podle instrukcí, a položka se vubec nezměnila. Nemůže být problém třeba v tom, že využívám v obrázkovém pozadí položky manu :hover ?
|
||
AM_ Profil |
#16 · Zasláno: 26. 10. 2009, 23:16:11
Joker:
„Já jo (viz #5) ;-)“ ajo, promiň, četl jsem to nepozorně a myslel jsem, že radíš něco jiného. |
||
Alphard Profil |
#17 · Zasláno: 26. 10. 2009, 23:21:50
vojtinec:
„Nemůže být problém třeba v tom, že využívám v obrázkovém pozadí položky manu :hover ?“ To teď není podstatné :-) Podívejte se do html zdroje, jestli je tam správně vypsaná ta třída. Jestli to máte online, dejte nám odkaz. |
||
vojtinec Profil |
#18 · Zasláno: 26. 10. 2009, 23:31:18
online to bohužel nemám, zkoušel jsem třídy prohodit a jsou v pořádku, ta druhá se akorát nikdy nezobrazi.
<?php echo "<a class='polozka_menu' href='index.php?page=novinky'"; if ($page=="novinky") { echo " class='akt'"; } echo "><b>Novinky</b></a>"; ?> |
||
Alphard Profil |
#19 · Zasláno: 26. 10. 2009, 23:36:36 · Upravil/a: Alphard
Z vašeho vysvětlení moc moudrý nejsem. Když se podíváte na stránce Media do zdroje, mělo by tam být
<a class='polozka_menu' href='index.php?page=media' class='aktivni'><b>Media</b></a> Je to tam, nebo ne? Dále ověřte, jestli je v URL skutečně index.php?page=media. Doplněno: AM_ později [#21] zdůrazňuje, že je tento zápis chybný, ale jak jsem již psal [#17], teď mě to nezajímá. vojtinec: Snaží se vám tady radit hodně lidí a kombinace všech řešení je kontraproduktivní. Jestli tomu nerozumíte, tak si vyberte jedno. A pokuste se odpovědět na moje otázky. |
||
Lamicz Profil |
#20 · Zasláno: 26. 10. 2009, 23:45:00 · Upravil/a: Lamicz
Asi bych to řešil nějak takhle (nevím, zda je to přesně co potřebujete)
<?php function page($input){ $replace = array('ó','é'); $replaced = array('o','e'); return strtolower(str_replace($replace, $replaced, $input)); } $menu = array('Novinky', 'Kapela', 'Foto', 'Média', 'Koncerty', 'Fórum', 'Odkazy', 'Kontakt'); foreach($menu as $mitem){ (isset($_GET['page']) && $_GET['page'] == page($mitem)) ? $active = ' aktivni' : $active = ''; echo '<a class="polozka_menu'.$active.'" href="index.php?page='.page($mitem).'">'.$mitem.'</a>'; } ?> |
||
AM_ Profil |
#21 · Zasláno: 27. 10. 2009, 00:06:16
Lamicz:
ta funkce, která funguje jen pro zadaný vstup a všechny takové, kde se vyskytuje v diakritice jen ó a é je opravdu skvost :) Mimochodem, nedávno se tady na fóru řešilo, že diakritika v URL není nic proti ničemu, je zažité dogma, že se z URL musí diakritika odstranit, ale viz např. česká wikipedie, kde to normálně funguje. vojtinec: zápis <element class="class1" class="class2"> nefunguje, třídy se seskupují takto: <element class="class1 class2"> (tedy v jednom atributu oddělené mezerou. echo "<a class='polozka_menu".($page=="novinky" ? ' akt' : '')."' href='index.php?page=novinky'><b>Novinky</b></a>"; (toto je pozměněná verze s operátorem ?:, který je zde dle mého názoru kvůli přehlednosti vhodnou náhradou za if. |
||
Lamicz Profil |
#22 · Zasláno: 27. 10. 2009, 00:30:23 · Upravil/a: Lamicz
AM:
„ta funkce, která funguje jen pro zadaný vstup a všechny takové, kde se vyskytuje v diakritice jen ó a é je opravdu skvost :)“ IMHO fce vzdy funguje pro zadany vstup pokud jej ma definovany, to jsem nejak nepobral... ;) |
||
AM_ Profil |
#23 · Zasláno: 27. 10. 2009, 10:36:37
Lamicz
Představ si, že se do menu jednoho dne přidá položka "Žluťoučcí koně"; tvá funkce se kvůli tomu bude muset přepsat. Nebo se na to spíše zapomene, a už se to bude chovat divně (někde to diakritiku oseká a někde ne). Programování tímhle způsobem vede k tomu, že až budeš mít dvacet funkcí a při jedné změně v programu je všechny budeš muset zkontrolovat a upravit, budeš si dost nadávat, jak jsi to napsal blbě. |
||
vojtinec Profil |
#24 · Zasláno: 27. 10. 2009, 13:58:54 · Upravil/a: vojtinec
Super...diky moc, už to jde. Jen mám poslední otázku...musí být menu includované v indexu, nebo nezáleží, jak se bude jmenovat ten soubor?
|
||
AM_ Profil |
#25 · Zasláno: 27. 10. 2009, 16:14:17
na názvu souboru to rozhodně nezávisí.
|
||
Časová prodleva: 9 měsíců
|
|||
Horac Profil |
#26 · Zasláno: 18. 7. 2010, 13:37:07
vojtinec:
„Super...diky moc, už to jde. Jen mám poslední otázku...musí být menu includované v indexu, nebo nezáleží, jak se bude jmenovat ten soubor?“ Zdravím, řeším momentálně stejný problém s aktivní položkou menu. Také postupuji podle jakpsatwe.polopate.cz Můžeš mi prosím sem napsat finální verzi funkčního kodu ?? Už sem nad tím prosedel hodně času.. Děkuji:) |
||
panther Profil |
#27 · Zasláno: 18. 7. 2010, 14:07:28
Horac:
copak kód výše nefunguje? |
||
Horac Profil |
#28 · Zasláno: 18. 7. 2010, 14:54:17
panther:
Popravdě, přesně nevím z které funkce vojtinec vycházel :\ Ta funkce co napsal Lamicz se mi zdá dobrá. Ale chtěl jsem se radši optat samotného autora vlákna.. Stálem i totiž můj kod hází chyby :\ |
||
panther Profil |
#29 · Zasláno: 18. 7. 2010, 15:05:24
Horac:
základ máš v [#13] od Alpharda, uprav si k obrazu svému. A i kdyby náhodou funkce v tomhle vlákn nefungovala, podobných vlákem tu je spoustu s tímto problémem, jen hledat. |
||
Horac Profil |
panther:
„A i kdyby náhodou funkce v tomhle vlákn nefungovala, podobných vlákem tu je spoustu s tímto problémem, jen hledat.“ Tak jsem provedl upravu: tady je muj index: <body> <?php include ("_rsrc/_top.php"); if (!isset($_GET['page'])) { $page = "prvni"; } else $page = $_GET['page']; $obsah = "page/".$page.".php"; if (!file_exists($obsah)) { $obsah = "index.php"; } include ("_rsrc/_menu.php"); ?> Index je první stránka, která zároven zaujímá místo první položky menu-Aktualne. Zbytek kodu, která je obsažen je jen čistý HTML formátovaný CSS zde je vkládané menu <?php echo "<ul id='menu'>"; echo "<li><a"; if ($page=="prvni") { echo " class='aktivni'"; } echo "href='history.php?page=prvni'>Aktuálně</a></li>"; echo "<li><a"; if ($page=="druha") { echo " class='aktivni'"; } echo "href='history.php?page=druha'>Historie</a></li>"; echo "<li><a"; if ($page=="treti") { echo " class='aktivni'"; } echo "href='fotogalerie.php?page=treti'>Fotogalerie</a></li>"; echo "<li><a"; if ($page=="ctvrta") { echo " class='aktivni'"; } echo "href='videa.php?page=ctvrta'>Videa</a></li>"; echo "<li><a"; if ($page=="pata") { echo " class='aktivni'"; } echo "href='odkazy.php?page=pata'>Odkazy</a></li>"; echo "<li><a"; if ($page=="sesta") { echo " class='aktivni'"; } echo "href='sponzori.php?page=sesta'>Sponzori</a></li>"; echo "<li<a"; if ($page=="sedma"){ echo " class='aktivni'"; } echo "><a href='kontakty.php?str=sedma'>Kontakty</a></li> </ul>"; ?> Moderátor Alphard: Vkládej prosím kódy mezi značky [>pre] a [>/pre] (stačí kliknout na ).
|
||
Téma pokračuje na další straně.
|
0