[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Написание меню помогите оптимизировать код
Thief8925
есть пять таблиц main_data , first_data, second_data, third_data, four_data, five_data

в них такие поля id pid sort title meta_k meta_d text

получается так что мне нужно зделать меню с 4 уровнями вложенности и чтоб оно динамически изменялось в зависимости от добавленного контента
я написал такой код для меню но знаю что он кривой и нагружает сервер может посоветуете как его переделать. прошу к моей просьюбе отнестись скептически так как я новичек и мало чего знаю и умею поетому фразой "здесь нужна рекурсия" врядли вы мне поможете ! заранее спасибо

 <?php 

$result2 = mysql_query("SELECT `id`, `img_url` FROM `main_data` ORDER BY sort ASC",$db);
while ($row = mysql_fetch_assoc($result2))
{
print '<tr height="43"><td></td><td background="../img/shadow.png" valign="top"><a href="/kozac/admin/index.php?id='. (int)$row["id"] .'"><img src="' .$row["img_url"].'"></a> </td><td></td></tr>';


$result3 = mysql_query("SELECT `id`, `title`,`pid` FROM `second_data` ORDER BY sort ASC",$db);
while ($myrow=mysql_fetch_assoc($result3))
{
if ($myrow['pid']==$row['id'])
{
print '<tr height="22">
<td valign="top" colspan="2">
<a class="local_nav_1_active_page" href="/kozac/admin/second_menu/index.php?id='
. (int)$myrow["id"] .'">
'
.htmlspecialchars($myrow["title"]).'
</a></td></tr>'
;


$result4 = mysql_query("SELECT `id`, `title`,`pid` FROM `third_data` ORDER BY sort ASC",$db);
while ($myrow2=mysql_fetch_assoc($result4))
{
if ($myrow2['pid']==$myrow['id'])
{
print '<tr height="20"><td></td>
<td valign="top"><a class="local_nav_2_active_page" href="/kozac/admin/third_menu/index.php?id='
. (int)$myrow2["id"] .'">
'
.htmlspecialchars($myrow2["title"]).'
</a></td></tr>'
;


$result5 = mysql_query("SELECT `id`, `title`,`pid` FROM `four_data` ORDER BY sort ASC",$db);
while ($myrow3=mysql_fetch_assoc($result5))
{
if ($myrow3['pid']==$myrow2['id'])
{
print '<tr height="28"><td></td>
<td valign="top"><a class="local_nav_3" href="/kozac/admin/four_menu/index.php?id='
. (int)$myrow3["id"] .'">
'
.htmlspecialchars($myrow3["title"]).'
</a></td></tr>'
;


$result6 = mysql_query("SELECT `id`, `title`,`pid` FROM `five_data` ORDER BY sort ASC",$db);
while ($myrow4=mysql_fetch_assoc($result6))
{
if ($myrow4['pid']==$myrow3['id'])

print '<tr height="18"><td></td>
<td valign="top"><a class="local_nav_4" href="/kozac/admin/five_menu/index.php?id='
. (int)$myrow4["id"] .'">
'
.htmlspecialchars($myrow4["title"]).'
</a></td></tr>'
;

}
}
}
}
}
}
}
}

?>




Спустя 3 часа, 23 минуты, 3 секунды (22.09.2010 - 13:57) Dingo написал(а):
Сначала таблицу спроектируй нормально, ну самое легкое


id | Надпись | Линк | родитель
=====================
| | |


А там уже и составляй алгоритм....

Спустя 47 минут, 6 секунд (22.09.2010 - 14:44) Thief8925 написал(а):
так в том то и дело что я непонимаю как устроенна такая таблица

Спустя 1 час, 9 минут, 33 секунды (22.09.2010 - 15:54) Dingo написал(а):
ну смотри
Цитата

id   Имя                       Линк          родитель
1    Главная Страница main            0
2    Пользователи        user            0
3    Авторизация         autostration  2
4    Регистрация          registration   2


Будет меню типа:

Цитата
* Главная страница
* Пользователи
  + Авторизация
  + Регистрация

Так понятно,
если у пункта родитель 0, то это самый первый пункт, суперпункт, он родитель
и не может быть дочернем пунктом, ибо id с 0 значение нету. К таким пунктом подключаются дочерние пункты, также дочерние пункты могут подключаться друг к другу в итоге существует возможность возможность строить бесконечно вложенные иерархии smile.gif

Спустя 14 минут (22.09.2010 - 16:08) Thief8925 написал(а):
а как под ето написать алгоритм чтоб потом каждый пункт отдельно имел свою ссылку и вел на редактирование и т.п ?????

Спустя 12 минут, 31 секунда (22.09.2010 - 16:20) Dingo написал(а):
Thief8925 он уже написан, такой вопрос уже разбирался здесь, сейчас дам примерный код.

function make_hierarchy($array = null)
{
if ($array)
{
foreach ($array as $value)
$arr[$value[3]][$value[0]] = array($value[1],$value[2]);
return get_hierarchy($arr,count($arr));
}
}


function get_hierarchy($array,$count,$x=0)
{

if ($array[$x])
{
$html = '<ul>';
foreach ($array[$x] as $key => $value)
{
$html .= '<li>';
$html .= '<a href="'.$array[$x][$key][1].'">'.$array[$x][$key][0].'</a>';
$html .= get_hierarchy($array,$count,$key);
$html .= '</li>';
}
$html .= '</ul>';
}
return $html;
}


пример использования

$a[] = array (1, Главная страница, main , 0);
$a[] = array (2, Пользователи, user , 0);
$a[] = array (3, Авторизация, autorisation , 2);
$a[] = array (4, Регистрация , registration , 2);

echo make_hierarchy($a);


У меня есть примерный скрипт редактирования такой иерархии, но я тебе его не дам rolleyes.gif

Спустя 1 час, 25 минут, 17 секунд (22.09.2010 - 17:46) Thief8925 написал(а):
эмм сложно ето еще для меня блин мне на моем примере б кто обьяснил, и непонятно если я удалю родителя с таким ИД то куда денутся подпункты и как админить ихнее перемещение под родителями и т.д

Спустя 44 минуты, 58 секунд (22.09.2010 - 18:31) Dingo написал(а):
Цитата (Thief8925 @ 22.09.2010 - 14:46)
эмм сложно ето еще для меня блин мне на моем примере б кто обьяснил, и непонятно если я удалю родителя с таким ИД то куда денутся подпункты и как админить ихнее перемещение под родителями и т.д

а кто тебе мешает разобраться в данном коде, ты же как никак хочешь быть хоть малость похожим на программиста wink.gif

Спустя 26 минут, 6 секунд (22.09.2010 - 18:57) Thief8925 написал(а):
хм... я знаю что я нечего не знаю но ненадо ето подчеркивать я ведь научится пытаюсь ...
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.