« 1 2 »
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
vojtinec:
řešením je vypnout zobrazování poznámek v php
Budulinek
Profil
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
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
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
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
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
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
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
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
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
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
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
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
Joker:
Já jo (viz #5) ;-)
ajo, promiň, četl jsem to nepozorně a myslel jsem, že radíš něco jiného.
Alphard
Profil
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
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
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
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
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
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
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
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
na názvu souboru to rozhodně nezávisí.
Horac
Profil
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
Horac:
copak kód výše nefunguje?
Horac
Profil
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
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>";

?>
Prosím mrkni na ten kod jestli tam nevidíš nejakou chybu.

Moderátor Alphard: Vkládej prosím kódy mezi značky [pre] a [/pre] (stačí kliknout na ).
« 1 2 »

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: