Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Многоуровневый каталог
 
 автор: dina   (23.01.2006 в 18:50)   письмо автору
 
 

Пытаюсь сделать многоуровневый каталог, но не
получается. Подкаталоги не выводятся.

<?php

// Устанавливаем соединение с базой данных
require_once("config.php");
$title="Каталог продукции";
?>
<h1 class=artnamepage>Каталог продукции</h1>
<?
// Если значение параметра id_parent не установлено, следовательно,
// выбран самый верхний уровень меню
if(!isset($_GET['id_parent'])) $_GET['id_parent'] = 0;
// Если имеем дело не с корневым каталогом, то выводим ссылку на
// уровень выше и воспроизводим вышележащее меню
if ($_GET['id_parent'] != 0)
{
// Выводим ссылку для возврата в предыдущее меню
echo "<a href=index.php?id_parent=".$_GET['id_parent'].">Верхний уровень</a></p>";
// Воспроизводим вышележащее меню
$query = "SELECT * FROM catalog
WHERE hide='show' AND id_parent=".$_GET['id_parent'];
$prev = mysql_query($query);
if(!$prev) puterror("Ошибка при обращении к каталогу");
// Выводим список каталогов
while($pmenu = mysql_fetch_array($prev))
{
echo "<a href=index.php?id_parent=".$pmenu['id_parent']."&id_catalog=".$pmenu['id_catalog'].">".$pmenu['name']."</a><br>";
// Если вышележащий каталог совпадает с текущим, и у него имеются
// подкаталоги, то выводим их
if($_GET['id_parent'] == $pmenu['id_catalog'])
{
// Формируем и осуществляем SQL-запрос, извлекающий подкаталоги
// текущего каталога
$query = "SELECT * FROM catalog
WHERE hide='show' AND id_parent=".$_GET['id_parent']."
ORDER BY pos";
$ctg = mysql_query($query);
if (!$ctg) puterror("Ошибка при обращении к каталогу");
// Если SQL-запрос вернул больше одной строки – выводим
// подкаталоги
if(mysql_num_rows($ctg)>0)
{
while($cat = mysql_fetch_array($ctg))
{
// Выводим список каталогов
echo "<a href=index.php?id_parent=".$_GET['id_parent']."&id_catalog=".$cat['id_catalog'].">".$cat['name']."</a><br>";
}
}
}
}
}
// Если это корневой каталог просто выводим его подкаталоги
else
{
Выводим список подкаталогов
$query = "SELECT * FROM catalog WHERE hide='show' AND id_parent=".$_GET['id_parent']." ORDER BY pos";
$ctg = mysql_query($query);
if (!$ctg) puterror("Ошибка при обращении к каталогу1");
while($cat = mysql_fetch_array($ctg))
{
// Выводим список подкаталогов корневого каталога
echo "<a href=index.php?id_parent=".$cat['id_parent']."&id_catalog=".$cat['id_catalog'].">".$cat['name']."</a><br>";
}
}
// Если это не корневой каталог: выводим таблицу с товарными позициями
if($_GET['id_catalog'] != 0) include "product.php";

?>


и создаю таблицу

CREATE TABLE 'catalog' (
'id_catalog' int(8) NOT NULL auto_increment,
'name' text NOT NULL,
'description' text NOT NULL,
'pos' int(3) NOT NULL default '0',
'hide' enum('show','hide') NOT NULL default 'show',
'id_parent' int(8) NOT NULL default '0',
PRIMARY KEY ('id_catalog'),
KEY 'id_parent' ('id_parent')
) TYPE=MyISAM;

#
# Дамп данных таблицы 'catalog'
#

INSERT INTO 'catalog' VALUES (1, 'Жильё', 'Вторичный рынок', 1, 'show', 0);
INSERT INTO 'catalog' VALUES (2, 'Строящися квартиры', ' ', 2, 'show', 0);
INSERT INTO 'catalog' VALUES (3, 'Квартиры', ' ', 2, 'show', 1);

Должно быть ведь: Жилье
Квартиры
Строящиеся квартиры


а у меня только Жилье
Строящиеся квартиры

   
 
 автор: XPraptor   (23.01.2006 в 19:16)   письмо автору
 
   для: dina   (23.01.2006 в 18:50)
 

Трудно читать код. В принципе такой вариант многоуровневости не очень удобен. Я когда то тоже сделал один сайт на таком принципе и потом долго сожалел об этом.
Вам лучше использовать для каждого уровня свою таблицу и выводить из них данные станет на много проще.
В каждой таблице нижнего уровня присутствует ид раздела верхнего уровня к которому относится запись.

   
 
 автор: dina   (24.01.2006 в 10:37)   письмо автору
 
   для: XPraptor   (23.01.2006 в 19:16)
 

Таблицы я создам, но как выводить сперва главные каталоги, а под ними подкаталоги.
Напишите поподробнее

   
 
 автор: ZC   (23.01.2006 в 21:05)   письмо автору
 
   для: dina   (23.01.2006 в 18:50)
 


<?php
// Устанавливаем соединение с базой данных
require_once("config.php");
$title="Каталог продукции";
?>
<h1 class=artnamepage>Каталог продукции</h1>
<?
// Если значение параметра id_parent не установлено, следовательно,
// выбран самый верхний уровень меню
if(!isset($_GET['id_parent'])) $_GET['id_parent'] = 0;
// Если имеем дело не с корневым каталогом, то выводим ссылку на
// уровень выше и воспроизводим вышележащее меню
if ($_GET['id_parent'] != 0)
{
// Выводим ссылку для возврата в предыдущее меню
echo "<a href=index.php?id_parent=".$_GET['id_parent'].">Верхний уровень</a></p>";
// Воспроизводим вышележащее меню
$query "SELECT * FROM catalog
WHERE hide='show' AND id_parent="
.$_GET['id_parent'];
$prev mysql_query($query);
if(!
$prevputerror("Ошибка при обращении к каталогу");
// Выводим список каталогов
while($pmenu mysql_fetch_array($prev))
{
echo 
"<a href=index.php?id_parent=".$pmenu['id_parent']."&id_catalog=".$pmenu['id_catalog'].">".$pmenu['name']."</a><br>";
// Если вышележащий каталог совпадает с текущим, и у него имеются
// подкаталоги, то выводим их
if($_GET['id_parent'] == $pmenu['id_catalog'])
{
// Формируем и осуществляем SQL-запрос, извлекающий подкаталоги
// текущего каталога
$query "SELECT * FROM catalog
WHERE hide='show' AND id_parent="
.$_GET['id_parent']."
ORDER BY pos"
;
$ctg mysql_query($query);
if (!
$ctgputerror("Ошибка при обращении к каталогу");
// Если SQL-запрос вернул больше одной строки – выводим
// подкаталоги
if(mysql_num_rows($ctg)>0)
{
while(
$cat mysql_fetch_array($ctg))
{
// Выводим список каталогов
echo "<a href=index.php?id_parent=".$_GET['id_parent']."&id_catalog=".$cat['id_catalog'].">".$cat['name']."</a><br>";
}
}
}
}
}
// Если это корневой каталог просто выводим его подкаталоги
else
{
Выводим список подкаталогов
$query 
"SELECT * FROM catalog WHERE hide='show' AND id_parent=".$_GET['id_parent']." ORDER BY pos";
$ctg mysql_query($query);
if (!
$ctgputerror("Ошибка при обращении к каталогу1");
while(
$cat mysql_fetch_array($ctg))
{
// Выводим список подкаталогов корневого каталога
echo "<a href=index.php?id_parent=".$cat['id_parent']."&id_catalog=".$cat['id_catalog'].">".$cat['name']."</a><br>";
}
}
// Если это не корневой каталог: выводим таблицу с товарными позициями
if($_GET['id_catalog'] != 0) include "product.php";

?>



CREATE TABLE 'catalog' (
'id_catalog' int(8) NOT NULL auto_increment,
'name' text NOT NULL,
'description' text NOT NULL,
'pos' int(3) NOT NULL default '0',
'hide' enum('show','hide') NOT NULL default 'show',
'id_parent' int(8) NOT NULL default '0',
PRIMARY KEY ('id_catalog'),
KEY 'id_parent' ('id_parent')
) TYPE=MyISAM;



INSERT INTO 'catalog' VALUES (1, 'Жильё', 'Вторичный рынок', 1, 'show', 0);
INSERT INTO 'catalog' VALUES (2, 'Строящися квартиры', ' ', 2, 'show', 0);
INSERT INTO 'catalog' VALUES (3, 'Квартиры', ' ', 2, 'show', 1);

   
 
 автор: dina   (24.01.2006 в 10:39)   письмо автору
 
   для: ZC   (23.01.2006 в 21:05)
 

Этот код не выводит многоуровневый каталог, не могу найти ошибку, взят из учебника.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования