Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.01.2011, 19:17   #1
pavelslap
Пользователь
 
Регистрация: 08.02.2009
Сообщений: 73
Вопрос Вывод меню.

Здравствуйте. У меня проблема с выводом меню через php. Вывожу так:

Код:
<?php
	$res1 = mysql_query("SELECT * FROM categories WHERE id > 0",$db);
    $res2 = mysql_query("SELECT * FROM subcategories WHERE id > 0",$db);
	
	if((!res1) or (!$res2)){ 
		echo("Cannot select data from databases");  
		exit();
	}
	if(mysql_num_rows($res1) > 0) 
	{ 
		$row1 = mysql_fetch_array($res1); 
		$records1 = mysql_num_rows($res1);	
	}
	else
	{
		exit();
	}
	if(mysql_num_rows($res2) > 0) 
	{ 
		$row2 = mysql_fetch_array($res2); 
		$records2 = mysql_num_rows($res2);	
	}
	else
	{
		exit();
	}
?>


<div id="navigation">
	<ul id="menu">              
         <?php 
		 	do{
		 	echo("<li>");   
			echo("<a href='#'>"); echo($row1['title']); echo("</a>");
			echo("<ul>");
				$pagenum = 0;
				do
				{
					$pagenum++;
					if($pagenum<10){
						$page = "page0".$pagenum;
					}
					else{
						$page = "page".$pagenum;
					}
					$title = $row2["title"];
					echo("<li><a href='?page=$page'>$title</a></li>"); 
				}
				while($row2 = mysql_fetch_array($res2));
				
			echo("</ul></li>"); 
			}
			while($row1 = mysql_fetch_array($res1));
		?>
	</ul>
</div>
Получается так, что все подкатегории летят в первую категорию. А надо чтобы каждая подкатегория в свою категорию.
pavelslap вне форума Ответить с цитированием
Старый 13.01.2011, 19:26   #2
spein
Программист
Форумчанин
 
Аватар для spein
 
Регистрация: 27.02.2009
Сообщений: 505
По умолчанию

Структуру таблици в студию
there are no limits when you're software engineer
spein вне форума Ответить с цитированием
Старый 13.01.2011, 19:33   #3
spein
Программист
Форумчанин
 
Аватар для spein
 
Регистрация: 27.02.2009
Сообщений: 505
По умолчанию

Я делал таким образом:
2 таблицы: категории, подкатегории

категории: id(int), name(text)
подкатегории: id(int), name(text), cat(int)

Далее:
PHP код:
$qu mysql_query('select * from cats');
while(
$row mysql_fetch_array($qu)) {
echo 
$row[name];
$subs mysql_query('SELECT * FROM subcats WHERE cat="'.$row[id].'"');
while(
$sbs mysql_fetch_array($subs)) {
}
echo 
$sbs[name];
}

P.S. Если есть ошибки, прошу прощения. Писал на быструю руку
there are no limits when you're software engineer

Последний раз редактировалось spein; 13.01.2011 в 19:36.
spein вне форума Ответить с цитированием
Старый 13.01.2011, 21:06   #4
pavelslap
Пользователь
 
Регистрация: 08.02.2009
Сообщений: 73
По умолчанию

спасибо большое, принцип понял помогло!
pavelslap вне форума Ответить с цитированием
Старый 14.01.2011, 17:05   #5
mar4elo
Форумчанин
 
Регистрация: 17.04.2008
Сообщений: 146
По умолчанию

Функция вывода меню с моего класса... меню не ограниченной вложенности.
Код:
//____________________________Вывод меню на экран_____________________________//
public function show_menu($par=0, $level=0)
                {
                    $par = trim($par);
                    if (empty($par) and $parent_id<>0) {$this->show_error('Не верный параметр, переменная пуста.'); exit;}
                    if (!is_numeric($par))             {$this->show_error('Не верный параметр функции, переменная не является числом.'); exit;}
//Подготавливаем запрос на выборку
                    $query = "SELECT * FROM `".$this->table_name."` WHERE `parent` =".$par." ORDER BY queue,name ASC";
//Производим выборку из БД
                    $result = mysql_query($query) or die($this->show_error('Запрос не выполнен'));
//Если результат не нулевой, то продолжаем
                    if (mysql_num_rows($result)<>0)
                    {
                        $out .= '<ul>';
//Пройдемся по массиву результата
                        while($myrow = mysql_fetch_assoc($result))
                        {
                            if ($myrow['hide']==0)
                            {
                                $out .= '<li>';
                                if ($level == 0) $span_class='level1';
                                    else $span_class='dir';
                                $out .= '<span class="'.$span_class.'"><a href="'.stripslashes($myrow['link']).'">'.stripslashes($myrow['name']).'</a></span>';
//Выполняем рекурсивный вызов функции
                                $out .= $this->show_menu((int)$myrow['id'],$level+1);
                                $out .= '</li>';
                            }
                        }
                        $out .= '</ul>';
                    }
//Удаляем лишнее
                    $out = str_replace ('<ul></ul>','', $out);
//Возвращаем результат функции
                    return $out;
                }
//__________________
mar4elo вне форума Ответить с цитированием
Старый 14.01.2011, 17:06   #6
mar4elo
Форумчанин
 
Регистрация: 17.04.2008
Сообщений: 146
По умолчанию

Функция вывода меню с моего класса... меню не ограниченной вложенности.
Код:
//____________________________Вывод меню на экран_____________________________//
public function show_menu($par=0, $level=0)
                {
                    $par = trim($par);
                    if (empty($par) and $parent_id<>0) {$this->show_error('Не верный параметр, переменная пуста.'); exit;}
                    if (!is_numeric($par))             {$this->show_error('Не верный параметр функции, переменная не является числом.'); exit;}
//Подготавливаем запрос на выборку
                    $query = "SELECT * FROM `".$this->table_name."` WHERE `parent` =".$par." ORDER BY queue,name ASC";
//Производим выборку из БД
                    $result = mysql_query($query) or die($this->show_error('Запрос не выполнен'));
//Если результат не нулевой, то продолжаем
                    if (mysql_num_rows($result)<>0)
                    {
                        $out .= '<ul>';
//Пройдемся по массиву результата
                        while($myrow = mysql_fetch_assoc($result))
                        {
                            if ($myrow['hide']==0)
                            {
                                $out .= '<li>';
                                if ($level == 0) $span_class='level1';
                                    else $span_class='dir';
                                $out .= '<span class="'.$span_class.'"><a href="'.stripslashes($myrow['link']).'">'.stripslashes($myrow['name']).'</a></span>';
//Выполняем рекурсивный вызов функции
                                $out .= $this->show_menu((int)$myrow['id'],$level+1);
                                $out .= '</li>';
                            }
                        }
                        $out .= '</ul>';
                    }
//Удаляем лишнее
                    $out = str_replace ('<ul></ul>','', $out);
//Возвращаем результат функции
                    return $out;
                }
//__________________
mar4elo вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
меню как на сайте p&g (меню ввиде таблицы) ilma55 WordPress и другие CMS 0 19.09.2010 19:09
И сново sendMessage =) Как нажать пункт верхнего меню и меню правой кнопки? TwiX Win Api 9 15.10.2009 01:57
Для доступа к пунктам главного меню клавиши ALT + подчеркнутая буква меню в офис 2007? Окоча Юра Microsoft Office Word 1 24.02.2009 12:29
Меню с Items в виде набора Bitmap (как меню редактирования в Word'е) chandrasecar Мультимедиа в Delphi 7 14.01.2009 09:20