Autor Zpráva
Anonymní
Profil *
Ahoj, dělám obdobu vysouvacího menu v JS, akorát pro php. Když kliknu na odkaz, stránka se reloaduje, menu se rozbalí a zobrazí se podmenu. Celkem to bude pro 3 podmenu. Potřebuju, aby to menu bylo editovatelné přes nějaké rozhraní, takže aby menu bylo uložené v db. Nějak nevim, jak to chodí v praxi. Vůbec nevim, jak navrhnou tabulky a sestrojit k tomu příkazy pro výběr. Díky
Marty
Profil
Tak pro tohle je přesně vhodný JavaScript. PHP bych zavrhnul okamžitě (stránky se musí znovu načítat, atd. ...).

Ale udělal bych to asi tak, že bych si udělal tabulku položek menu a v té bych podle nějakého klíče určoval, zda jde o část menu, submenu, atd... . Také bych je podle nějakého klíče spojil s určitým řádkem v menu.
Charlie
Profil
PHP bych zavrhnul okamžitě (stránky se musí znovu načítat, atd. ...)

Vidíš, mě zas vadí, když kliknu na odkaz a s obsahem se nic nestane. To je podle mně chyba.

Co se týče menu, jde to udělat velmi jednoduše, pokud znáte počet zanoření. Pomocí rekurze se dá udělat zanořovací menu s teoreticky neomezeným počtem zanoření, ale takhle to zvládne pár příkazů.

Navržení databázové tabulky by mělo být zhruba takovéhle:
1) ID auto_increment (bude jako rodičovský element při zanoření)
2) úroveň (1 až 3)
3) název
4) relativní URL

Při sestavování menu bych použil zanořené seznamy, bude to tak přehledné i s vypnutými styly.
Fred
Profil
Taky bych to viděl na js, php až jako alternativu při nepřítomnosti js.
Martin
Profil
Původní příspěvek jsem psal já :) Už to mám trochu vymyšlené, zítra Vám to rozepíšu. Také jsem se chtěl zeptat, jak se dají převést všechny znaky v řetězci s háčky a čárky na znaky bez háčků a čárek? Díky
Fred
Profil
To nevím, ale možná pomůže tenhle thread http://diskuse.jakpsatweb.cz/index.php?action=vthread&forum=9&topic=11 647
Marty
Profil
Pro potřeby to mám nějak takto:

function preved_kategorii ($kategorie)
{
$a = array("á","ä","č","ď","é","ě","ë","í","ň","ó","ö","ř","š","ť","ú","ů", "ü","ý","ž","Á","Ä","Č","Ď","É","Ě","Ë","Í","Ň","Ó","Ö","Ř","Š","Ť","Ú ","Ů","Ü","Ý","Ž");
$b = array("a","a","c","d","e","e","e","i","n","o","o","r","s","t","u","u", "u","y","z","A","A","C","D","E","E","E","I","N","O","O","R","S","T","U ","U","U","Y","Z");
return str_replace($a, $b, $kategorie);
}
Martin
Profil
Kde se dá něco dozvědět o rekurzy?
Marty
Profil
Rekurze je případ, kdy funkce volá sama sebe (pozor na ukončovací podmínku a přetečení paměti). Nic víc, nic míň.
Ač to není pro PHP, tak dobrá stránka je třeba: http://www.freenetpages.co.uk/hp/alan.gauld/czech2/cztutrecur.html
krteczek
Profil
no já to mám takhle: mám kategorie, sekce a články
jsou to 3 tabulky
návrh je zhruba takový, že kategorie má
id, nazev, zobrazovat
sekce to samé, jen je u toho ještě sloupec kategorie kde se zapisuje id kategorie do které ta sekce patří
články má to same jako kategorie, ale místo kategorie je sloupec sekce (+ spousta dalších sloupcu pro obsah clanku atd

a tahám to z databáze takhle:
<?php

$dk="";//dotaz na tabulku kategorie
$vk="";//výsledek dotazu na tabulku kategorie
$pk="";//počet řádku ve výsledku dotazu na tabulku kategorie
$rk="";//řádek výsleku po fetch array na kategorie
$ds="";//dotaz na tabulku sekce
$ps="";//počet řádkú ve vysledku dotazu na sekce
$dot="";//dotaz na existenci a pocet článků v sekci. pokud není v sekci žáden článek, nebude zobrazena
//******************************************************************** *********************
$dk="select nazev,id from ".Tabulka_kategorie." where zobrazovat='ano'";
if($vk=mysql_query($dk,$GLOBALS['link']))
{
$pk=mysql_num_rows($vk);
if(($pk>0))
{
//smyčka výpisu kategorií
for($ik=0;$ik<$pk;$ik++)
{

$rk=mysql_fetch_array($vk);
// POZOR!!! Nebudou zobrazeny ty kategorie v nichž nejsou žádné sekce, nebo články

if(ma_sekce($rk['id']))
{ echo "\n".'<!-- ** kategorie ** -->'."\n";
echo "\n".' <div class="kategorie"><h3 title="'.$rk["nazev"].'" >'.orez_nazev($rk["nazev"],3)."</h3>\n";
$ds="select id,nazev from ".Tabulka_sekce." where kategorie=".$rk["id"]." and zobrazovat='ano'";
if($vs=mysql_query($ds,$GLOBALS['link']))
{
$ps=mysql_num_rows($vs);
if($ps>0)
{
//smyčka výpisu sekcí
echo ' <div class="sekce"><!-- ** sekce ** -->'."\n";
for($is=0;$is<$ps;$is++)
{
$rs=mysql_fetch_array($vs);
//POZOR!!! NEBUDOU ZOBRAZENY TY SEKCE? KTERÉ NEOBSAHUJÍ ANI JEDEN ČLÁNEK (ABY TO NEDĚLALO NEPLECHU :-)
$dotaz="select count(*) as poc from ".Tabulka_clanky." where sekce='{$rs['id']}'";
if($dot=mysql_query($dotaz,$GLOBALS['link']))
{
$rad=mysql_fetch_array($dot);
if($rad['poc']>0)
{
echo ' <a href="'.jmeno_skriptu().'?sekce_clanku='.$rs["id"].'" title="klepnutím na tento odkaz otevřete obsah sekce: '.$rs["nazev"].'">'. orez_nazev($rs["nazev"],2)."</a>\n";
if((!empty($sekce_clanku))and (existuje_sekce($sekce_clanku))and($sekce_clanku==$rs["id"]))
{
$dotaz="select id,nazev from ".Tabulka_clanky." where sekce='{$rs['id']}' and zobrazovat='ano' order by id desc";
if($vc=mysql_query($dotaz,$GLOBALS['link']))
{
$pc=mysql_num_rows($vc);
if($pc>0)
{
echo ' <div class="cla">'."\n";
for($ic=0;$ic<$pc;$ic++)
{
$rc=mysql_fetch_array($vc);
echo ' <a href="'.jmeno_skriptu().'?sekce_clanku='.$rs["id"].'&amp;clanek='.$rc[ "id"].'" title="zobrazte si článek jménem '.$rc["nazev"].'">'.orez_nazev($rc["nazev"],1)."</a>\n";
}
echo ' </div>'."\n";
}
}
}
echo "\n";
}
}
else
{
echo chyba_databaze();
}
}
echo " </div>\n";
}
}
else
{
echo chyba_databaze();
}
echo " </div>\n";
}
echo "\n";

}
}
else
{
echo 'ještě jste nevytvořili žádnoukategorii';
}
}else{echo chyba_databaze()."nejde to";}
?>

navíc je to doplněno o hrátky s cookies aby zustala otevřená ta sekce, na kterou se naposledy kliklo
funkční příklad je k vidění například na http://www.jk-staj-kennbery.wz.cz/, nebo lépe na : http://www.krteczek.czweb.org/krt/ , kde užje menu tvořeno pomocí ul-li

krteczek
23k_
Profil *
to je dost spatnej skript
krteczek
Profil
23k_: rejpale :-)
ukaž lepší pak tady blábolej, neříkám že je optimální ale je plně funkční
krteczek
Martin
Profil
23k_
souhlasim. snažim se uvést do prace Charieho řešení, ale nějak se nedaří. Něni někde o tom někde nějakej článek?Díky
Martin
Profil
Tak tenhle http://interval.cz/clanek.asp?article=3801 článek mi ujasnil dost věcí, akorát ještě musim přijít na to, jak to vypsat ještě s ul a li, vybral jsem si hned tu první fci
Martin
Profil
Vůbec si nevim rady s tim, jak vypsat položkydo vnořených seznamů pomocí ul a li.
Výsledek by měl vypadat asi takto.
<ul>
<li>o nas</li>
<li>ahoj
<ul>
<li>a</li>
<li>b</li>
</ul>
</li>
<li>blee</li>
</ul>

Pomůžete mi s tim někdo?Dík
Martin
Profil
Udělal jsem to zatím takto
function getTree($parent, $level,&$menu) {
$result = mysql_query("SELECT * FROM ch_menu WHERE uroven='".$parent."'");
$menu .= "<ul>";
while ($row = mysql_fetch_assoc($result)) {
$menu .= "<li><a href=\"co=\">{$row["polozka"]}</a>\n";
getTree($row['id'], $level++,&$menu);
$menu .= "</li>";
}
$menu .= "</ul>";

}

getTree(0,1,$menu);
$menu = str_replace("<ul></ul>"," ",$menu);
echo $menu;

ale pořád to není ono. Napadá Vás, jak to zlepšit?
Toto téma je uzamčeno. Odpověď nelze zaslat.

0