Едно меню
12 отговора
521 прегледа
Едно меню
Трябваше ми разгъващо се меню и взех че си написах, но в последствие установих че съм допуснал някои грешки в него и който си поиска чрез външен адрес може да го промени както си иска. Менюто се генерира от база данни където има 3 колнони |id|podmenu|cat| като подменю е описанието което се показва на подменюто. Моля ви помогнете ми да го направя по-добро
if(!$cat) {$cat="0";}
$top_cat=mysql_query ("select * from kategorii where cat='$cat';");
while ($cat_row=mysql_fetch_array ($top_cat)) {
if($m==$cat_row[podmenu]) {echo "<a href='index.php?m=$cat_row[podmenu]'>$cat_row[podmenu]</a>
" ;
$sub_cat=mysql_query ("select * from kategorii where cat='$c';");
while($sub_cat_row=mysql_fetch_array ($sub_cat)) {
$ssccrr= mysql_result(mysql_query("SELECT COUNT(id) as Num FROM kategorii where cat='$sub_cat_row[id]'"),0);
if($ssccrr){
echo"<a href='index.php?id=$idz&p=$sub_cat_row[id]&m=$m&c=$c' >$sub_cat_row[podmenu]</a></p>";}
else{echo"<a href='index.php?id=$sub_cat_row[id]&p=$sub_cat_row[id]&m=$m&c=$c'>$sub_cat_row[podmenu]</a></p>";}
if($p==$sub_cat_row[id]) {
$subcat=mysql_query ("select * from kategorii where cat='$p';");
while($subcatrow=mysql_fetch_array ($subcat)) {
echo"<a href='index.php?id=$subcatrow[id]&m=$m&c=$c&p=$p' >$subcatrow[podmenu]</a>";} }
;}}
else{
echo "<a href='index.php?m=$cat_row[podmenu]&c=$cat_row[id]' >$cat_row[podmenu]</a>
" ;
};}
if(!$cat) {$cat="0";}
$top_cat=mysql_query ("select * from kategorii where cat='$cat';");
while ($cat_row=mysql_fetch_array ($top_cat)) {
if($m==$cat_row[podmenu]) {echo "<a href='index.php?m=$cat_row[podmenu]'>$cat_row[podmenu]</a>
" ;
$sub_cat=mysql_query ("select * from kategorii where cat='$c';");
while($sub_cat_row=mysql_fetch_array ($sub_cat)) {
$ssccrr= mysql_result(mysql_query("SELECT COUNT(id) as Num FROM kategorii where cat='$sub_cat_row[id]'"),0);
if($ssccrr){
echo"<a href='index.php?id=$idz&p=$sub_cat_row[id]&m=$m&c=$c' >$sub_cat_row[podmenu]</a></p>";}
else{echo"<a href='index.php?id=$sub_cat_row[id]&p=$sub_cat_row[id]&m=$m&c=$c'>$sub_cat_row[podmenu]</a></p>";}
if($p==$sub_cat_row[id]) {
$subcat=mysql_query ("select * from kategorii where cat='$p';");
while($subcatrow=mysql_fetch_array ($subcat)) {
echo"<a href='index.php?id=$subcatrow[id]&m=$m&c=$c&p=$p' >$subcatrow[podmenu]</a>";} }
;}}
else{
echo "<a href='index.php?m=$cat_row[podmenu]&c=$cat_row[id]' >$cat_row[podmenu]</a>
" ;
};}
Re: Едно меню
Сетих се нещо, но не знам до колко ще е ефективно значи проверявам дали страницата от която идват е моята ако е разгъвам менюто, ако не е не го разгъвам защото може да го объркват.
Re: Едно меню
Ami tai kat gledam koda - ne che sam spec. ama mnogo pisane za nishto rabota...
potarsi primersno v hotscripts ima dobri reshenia na folder tree za php - s po-malko kod etc...
potarsi primersno v hotscripts ima dobri reshenia na folder tree za php - s po-malko kod etc...
Re: Едно меню
хаос ... използвай рекурсия.
а, и ... пусни ERR_ALL за да си видиш белите.
Moscow, раз-два-три, Moscow, посмотри.
а, и ... пусни ERR_ALL за да си видиш белите.
Moscow, раз-два-три, Moscow, посмотри.
Re: Едно меню
ако очакваш, че някой ще ти дебъгва писаниците - грешиш (още повече при такъв стил дет мозъка ти пламва на втори ред). Ако очакваш, че някой ще ти тръгне да разписва решението - грешиш, най-добре е да ти се посочи посоката към него и сам да се научиш.
аз подобни неща ги правих по друг начин:
table
[id | parentid | name]
при което структура на таблица е като пример:
1 | 0 | Entertainment
2 | 1 | Video
3 | 1 | Games
4 | 2 | DVD
5 | 2 | VHS
6 | 3 | PC
7 | 3 | GамеBoy
8 | 5 | Homemade
9 | 5 | Gеnres
навсякъде в УРЛ подаваш само един параметър "id". След това от това id се връщаш рекурсивно към руут-а на дървото по пътя запаметявайки в един масив нодове през които минаваш. Обърщаш този масив наобратно и започваш рекурсивно да прелистваш дървото с условие, че влизаш по-вътре само и ако ноуд е в масива.
Moscow, раз-два-три, Moscow, посмотри.
аз подобни неща ги правих по друг начин:
table
[id | parentid | name]
при което структура на таблица е като пример:
1 | 0 | Entertainment
2 | 1 | Video
3 | 1 | Games
4 | 2 | DVD
5 | 2 | VHS
6 | 3 | PC
7 | 3 | GамеBoy
8 | 5 | Homemade
9 | 5 | Gеnres
навсякъде в УРЛ подаваш само един параметър "id". След това от това id се връщаш рекурсивно към руут-а на дървото по пътя запаметявайки в един масив нодове през които минаваш. Обърщаш този масив наобратно и започваш рекурсивно да прелистваш дървото с условие, че влизаш по-вътре само и ако ноуд е в масива.
Moscow, раз-два-три, Moscow, посмотри.
Re: Едно меню
Пробвах се да направя нещо по начина който ми каза. Направих го, но пак е толкова заплетено като предишното. Толкова ли съм тъп че едно меню не мога да направя като хората???
Re: Едно меню
В отговор на:Толкова ли съм тъп че едно меню не мога да направя като хората???
Това риторичен въпрос ли е?
Re: Едно меню
Абе не знам какви менюта поддържате, ама аз бих заложил, че не са от милиони записи
.
За по-прости конфигурации, можем директно да си наслагаме всичко в един конфигурационен файл -- menu.php. Декларацията на класа и помощната функция може и да не седят там:
Накрая директно си пишем дървовидната структура на менюто и не си играем да я превръщаме в таблична, че и да я пращаме в базата. Е може би тоя подход няма да е много удачен за страшно сложно CMS решение.
За по-прости конфигурации, можем директно да си наслагаме всичко в един конфигурационен файл -- menu.php. Декларацията на класа и помощната функция може и да не седят там:
<?php
class MenuItem
{
var $Name;
var $TargetUrl;
var $Children;
function MenuItem($name, $href, $children)
{
$this->Name = $name;
$this->TargetUrl = $href;
$this->Children = $children;
}
}
function item()
{
$args = func_get_args();
$name = array_shift($args);
$href = array_shift($args);
return new MenuItem($name, $href, $args);
}
$menu = item("Main", "[линк]",
item("Sub1", "[линк]"),
item("Sub2", "[линк]",
item("Sub2_Sub1", "[линк]", NULL),
item("Sub2_Sub3", "[линк]", NULL),
item("Sub2_Sub4", "[линк]", NULL)));
var_dump($menu);
Накрая директно си пишем дървовидната структура на менюто и не си играем да я превръщаме в таблична, че и да я пращаме в базата. Е може би тоя подход няма да е много удачен за страшно сложно CMS решение.
Re: Едно меню
Значи аз си пооправих първото меню, но искам само да попитам като отправям няколко заявки към базата данни не я ли натоварвам много???
ЗАВИСИ ...
...от заявките. Има бързи има и бавни.
Случвало ми се е да пускам заявка която вървя 16 (шестнадесет) часа !
root@ro6avia#echo rm -rf * > /bin/seek_and_destroy
root@ro6avia#/bin/seek_and_destroy
Случвало ми се е да пускам заявка която вървя 16 (шестнадесет) часа !
root@ro6avia#echo rm -rf * > /bin/seek_and_destroy
root@ro6avia#/bin/seek_and_destroy
Re: ЗАВИСИ ...
Ми като гледаш горните заявки как мислиш ще тормозят ли много базата данни?