Autor Zpráva
lokix
Profil
Dobrý den všem,

potřeboval bych poradit s jedním problémem ohledně vypisování menu <li> z db (mysql). Jelikož nevím počet menu dopředu dělám výpis podle kódu níže a vše funghuje jak má až na označení li class=selected. Zkoušel jsem podmínku např. na položku s názvem zastupitelstvo, které tam je ale i přes definování: elseif($_GET['read']=="zastupitelstvo"){echo "<li class=\"selected\">";} se místo po kliknutí na danou položku označí "clas=selected" i všechny ostatní. Hledal jsem odpověď ale nic uspokojivého co by mi fungovalo jsem bohužel nenašel. Nežádám kompletní kód ale za jakékoliv nakopnutí či příklad budu moc vděčný.

<?php
$kat = "main";
$url2=mysql_query("SELECT 
`clanky`.`nazev` AS productname,
     `kategories`.`name` AS katname,
     `www`
   FROM `clanky`
   LEFT JOIN `menu_kat` ON `clanky`.`id`=`menu_kat`.`clanky`
   LEFT JOIN `kategories` ON `menu_kat`.`kategorie`=`kategories`.`id` 
   WHERE `kategories`.`name`='$kat'") or die (mysql_error());;
while ($dotaz2=MySQL_Fetch_Array($url2)): 
{   
if(empty($_GET['read'])){echo "<li>";}elseif($_GET['read']=="zastupitelstvo"){echo "<li class=\"selected\">";}else{echo "<li>";}
echo "<a class=\"border-b border-t\" href=\"index.php?read={$dotaz2['www']}\" title=\"Archiv\">{$dotaz2['productname']}</a></li>\n";
}    
endwhile; ?>
Tori
Profil
Porovnávejte $_GET[read] a nazev položky z db.
lokix
Profil
Tori:
Díky ale toto jsem udělal viz: elseif($_GET['read']=="zastupitelstvo"){echo "<li class=\"selected\">";} a stejně to označí po kliknutí na odkaz (li) všechny ostatní. A navíc když neznám dopředu název položky tak to je ještě těžší.
Tirus
Profil
lokix:
<?php

  $kat = "main";
  $url2 = mysql_query("SELECT
`clanky`.`nazev` AS productname,
`kategories`.`name` AS katname,
`www`
FROM `clanky`
LEFT JOIN `menu_kat` ON `clanky`.`id`=`menu_kat`.`clanky`
LEFT JOIN `kategories` ON `menu_kat`.`kategorie`=`kategories`.`id`
WHERE `kategories`.`name`='$kat'") or die(mysql_error());
  ;
  while ($dotaz2 = MySQL_Fetch_Array($url2)):
  		{
  				if ($_GET['read'] == "zastupitelstvo")
  				{
  						echo "<li class=\"selected\">";
  				}
  				else
  				{
  						echo "<li>";
  				}
  				echo "<a class=\"border-b border-t\" href=\"index.php?read={$dotaz2['www']}\" title=\"Archiv\">{$dotaz2['productname']}</a></li>\n";
  		}
  endwhile; ?>


zkus to takto, snad to půjde.. if tam je na nic, to je splněný i když v tom getu máš zastupitelstvo přeci, takže ti to tam dalo dvakrát <li>
Tori
Profil
lokix:
Díky ale toto jsem udělal viz: elseif($_GET['read']=="zastupitelstvo"
Ne, to jste porovnával s řetězcem, přičemž obě hodnoty se v cyklu nijak nemění - proto se vám označily všechny položky. Myslela jsem něco takovéhoto:
// ještě před cyklem si zjistíte, jestli a jaká položka menu byla zadaná v url.
$aktivni = isset($_GET['read']) ? $_GET['read'] : '';
while ($dotaz2=MySQL_Fetch_Array($url2)): 
{
  echo "<li". ($aktivni == $dotaz2['productname'] ? ' class="selected"' : '') .'>';
  echo "<a class ..... atd. ";
}
lokix
Profil
Tori:
Moc díky za nápad. Toto by mě nenapadlo ale bohužel i když teoreticky to má jít tak se mi po kliknutí na vygenerovaný odkaz nepřidá do <li> ten kýžený class=celected... Buď někde dělám chybu nebo už nevím. Pro jistotu přidávám ještě jednou kód:
<?php
$kat = "main";
$url2=mysql_query("SELECT 
`clanky`.`nazev` AS productname,
     `kategories`.`name` AS katname,
     `www`
   FROM `clanky`
   LEFT JOIN `menu_kat` ON `clanky`.`id`=`menu_kat`.`clanky`
   LEFT JOIN `kategories` ON `menu_kat`.`kategorie`=`kategories`.`id` 
   WHERE `kategories`.`name`='$kat'") or die (mysql_error());;
$aktivni = isset($_GET['read']) ? $_GET['read'] : '';
while ($dotaz2=MySQL_Fetch_Array($url2)): 
{   
echo "<li". ($aktivni == $dotaz2['productname'] ? ' class="selected"' : '') .'>';
echo "<a class=\"border-b border-t\" href=\"index.php?read={$dotaz2['www']}\" title=\"Archiv\">{$dotaz2['productname']}</a></li>\n";
}    
endwhile; ?>
Tori
Profil
Pardon, až teď jsem si všimla, že vlastně do odkazu předáváte hodnotu z pole www - takže v té podmínce na ř.14 ([#6]) má být $aktivni == $dotaz2['www']
lokix
Profil
Tori:
To jsem pěkně slepej ale Vám každopádně moc děkuju funguje to tak jak má a já se stím tak trápil. Kdyby tu byl rep máte ho.
joe
Profil
Pokud jsi na aktivní stránce - tj. právě tam, kde máš <li class="selected">, pak do toho <li> nevypisuj odkaz, ale jen text.

Pokud teď vypneš styly, z menu nepoznáš, jaká stránka je aktivní, často se na to zapomíná.

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: