|
|
|
| Есть две 2 таблицы в первой категории, в другой продукт.
Код вывода подкатегорий и товара.
<?php
//соединение с БД
require_once("config.php");
?>
<table align='center' border='1' cellpadding='4' cellspacing='0' bordercolordark='white' bordercolorlight='gray' width='98%' style='margin:0; padding:0;'>
<tr>
<th>Название</th><th>Описание</th><th>Поз.</th><th>Действия</th>
<?php
//вывод все подкатегории данной категории
$query = "SELECT * FROM catalog WHERE id_parent=".$_GET['id_catalog']." ORDER BY pos";
if(!$result = mysql_query($query)) echo "Неправильно".mysql_error();
while($podcat = mysql_fetch_array($result))
{
echo "<tr>
<td bgcolor=#DDCCFF><a href=show_cat.php?id_catalog=".$podcat['id_catalog'].">".$podcat['name']."</a></td>
<td bgcolor=#DDCCFF>".$podcat['description']."</td>
<td bgcolor=#DDCCFF>".$podcat['pos']."</tr>";
//вывод товара данной подкатегории
$query2 = "SELECT * FROM product WHERE id_catalog=".$podcat['id_catalog']." ORDER BY pos";
if(!$result1 = mysql_query($query2)) echo "Неправильно".mysql_error();
while($prod = mysql_fetch_array($result1))
{
echo "<tr>
<td bgcolor=#DDCCDD><a href=show_prod.php?id_catalog=".$prod['id_catalog'].">".$prod['name']."</a></td>
<td bgcolor=#DDCCDD>".$prod['note']."</td>
<td bgcolor=#DDCCDD>".$prod['pos']."</tr>";
}
}
?>
|
если есть в подкатегории, другая подкатегория то нужно сначало нажать на ссылку и только потом выводится подкатегория 3 уровня. Только уровень вложенности может быть и больше.
Как осуществить чтоб все подкатегории и товар выводились сразу, а не по ссылки переходить?
Заранее спасибо!!! | |
|
|
|
|
|
|
|
для: Spyder
(31.05.2006 в 09:04)
| | А какие данные подаются на вход скрипту? | |
|
|
|
|
|
|
|
для: Trianon
(31.05.2006 в 09:36)
| | show_cat.php?id_catalog=1 | |
|
|
|
|
|
|
|
для: spyder
(31.05.2006 в 10:45)
| | И Вы хотите получить все продукты в этом разделе?
И еще неплохо было бы структуру таблиц показать. | |
|
|
|
|
|
|
|
для: Trianon
(31.05.2006 в 11:02)
| | >И Вы хотите получить все продукты в этом разделе?
продукты у меня выводятся. Вопрос в том чтоб выводить не только продукты, но и категории. Есть подкатегория и в ней может ещё находится подкатегории, мне нужно вывести все подкатегории, другой подкатегории.
Подкатегория уровень1
Подкатегория уровень 2
Товар
Товар
Подкатегория уровень 2
Подкатегория уровень 2
Подкатегория уровень 3
Товар
Товар
|
Вот так мне нужно. | |
|
|
|
|
|
|
|
для: spyder
(31.05.2006 в 10:45)
| | Глубина вложенности каталога как-нибудь ограничена?
И каков его приблизительный объем?
Исправьте свое последнее сообщение.
Эскиз вывода возьмите в теги code. А то лесенки не видно. | |
|
|
|
|
|
|
|
для: Trianon
(31.05.2006 в 11:23)
| | >Глубина вложенности каталога как-нибудь ограничена?
нет не ограничена
>И каков его приблизительный объем?
не понял какой объем? | |
|
|
|
|
|
|
|
для: Spyder
(31.05.2006 в 11:31)
| | Что - совершенно неограничена? Так не бывает.
Пользователь на глубину больше десятка не полезет.
Администратор не полезет глубже трех десятков.
Касательно объема - сколько примерно разделов в каталоге?
Сто?
Десять тысяч?
Миллион? | |
|
|
|
|
|
|
|
для: Trianon
(31.05.2006 в 11:36)
| | >Что - совершенно неограничена? Так не бывает.
>Пользователь на глубину больше десятка не полезет.
>Администратор не полезет глубже трех десятков.
Вы меня не так понял, естественно что больше десятка уровней не будет. Но если даже и будет у меня вывод будет подругому.
Напр-р:
Категор Компьютеры
Подкатег Компы Compaq
в неё входят ещё подкатегории Сервера
HP сервер
И сдесь товар
|
У меня будет две страницы одна будет отображать категории, а другая все подкатегории и товар, выбранной категории. Т.е бегать по ссылкам не надо.
>Касательно объема - сколько примерно разделов в каталоге?
Категорий около 20, потом может и больше будет. | |
|
|
|
|
|
|
|
для: Spyder
(31.05.2006 в 11:44)
| | поднимаю тему | |
|
|
|
|
|
|
|
для: spyder
(31.05.2006 в 14:37)
| |
<?
include 'config.inc.php';
function readalltree($tab, $id, $parent, $filter='')
{
$sql = "SELECT $id, $parent FROM $tab $filter";
$res = mysql_query($sql);
if(!$res)
{
echo "SQL error in ".nl2br($sql)." : <br>".mysql_error();
return false;
}
$tree = array();
while($row = mysql_fetch_row($res))
{
$id = intval($row[0]); $pid = intval($row[1]);
$pars = isset($tree[$pid]) ? $tree[$pid] : array();
$pars[] = $id;
$tree[$pid] = $pars;
}
return $tree;
}
function selectnodes(&$tree, $pid, $lev=0)
{
$s = array();
$s[$pid] = $lev;
if(isset($tree[$pid]))
foreach($tree[$pid] as $id)
foreach(selectnodes($tree, $id, $lev+1) as $k => $v)
$s[$k] = $v;
return $s;
}
function printnodes(&$tree, &$catnames, &$catprods, $id, $lev = 0)
{
echo str_repeat(" . ", $lev+1);
$nm = $catnames[$id];
echo "<a href=?cat=$id>[$nm]</a><br>\r\n";
if(!empty($catprods[$id]))
foreach($catprods[$id] as $pid => $pin)
{
echo str_repeat(" . ", $lev+1);
echo " : ";
echo "<a href=productinfo.php?prod=$pid>$pin</a><br>\r\n";
}
if(!empty($tree[$id]))
foreach($tree[$id] as $nid)
printnodes($tree, $catnames, $catprods, $nid, $lev+1);
}
$tree = readalltree('catalog', 'id_catalog', 'id_parent');
$cat = intval($_REQUEST['cat']);
$lev = selectnodes($tree, $cat);
$list = implode(',',array_keys($lev));
$sql = "SELECT id_catalog, name FROM catalog WHERE id_catalog IN($list)";
if(!($res = mysql_query($sql)))
echo "SQL error in ".nl2br($sql)." : <br>".mysql_error();
$catnames = array();
$catprods = array();
while($row = mysql_fetch_row($res))
{
$catnames[$row[0]] = $row[1];
$catprods[$row[0]] = array();
}
$sql = "SELECT id_product, id_catalog, name FROM product WHERE id_catalog IN($list)";
if(!($res = mysql_query($sql)))
echo "SQL error in ".nl2br($sql)." : <br>".mysql_error();
while($row = mysql_fetch_row($res))
$catprods[$row[1]][$row[0]] = $row[2];
printnodes($tree, $catnames, $catprods, $cat);
?>
|
Эх... была идея сделать без лишних массивов, с последовательным выводом из базы.
Но Вы же так торопитесь. ...
Впрочем базовый инструментарий здесь есть, так что дальше можно развить.
Более того можно сделать даже для таких баз, содержимое которых не ограничивается памятью php. | |
|
|
|
|
|
|
|
для: Trianon
(31.05.2006 в 17:49)
| | вау клево. Спасибо большое то что надо.
Не могли бы подсказать как осуществляют такую фичу.
У меня иногда бывает что товар может находится в разных категориях(подкатегориях).
Как можно сделать чтобы при добавлении товара можно было отмечать в каких категория будет видно этот товар. Можно ли вообще как нибудь осуществить?
Подскажите пожалуйста!!! | |
|
|
|
|
|
|
|
для: Spyder
(01.06.2006 в 12:06)
| | Для этого в Вашей структуре вроде даже поле есть.
hide ENUM('show','hide') NOT NULL DEFAULT 'show',
в таблице product | |
|
|
|
|
|
|
|
для: Trianon
(01.06.2006 в 13:10)
| | не этот столбец отвечает показать или непоказывать товар вообще. А мне нужно чтоб можно было отметить в каких подкатегориях показывать. Сейчас у меня получается что к товару прикрепляется id опрделенного подкаталога, а я хочу чтоб можно было выбрать несколько подкатегорий к которой товар относился.
Может кто сталкевался с такой задачей.
Надеюсь понятно объяснил. | |
|
|
|
|
|
|
|
для: Spyder
(01.06.2006 в 13:42)
| | Построить отношение "многие ко многим". Оно разбивается на два отношения "Многие к одному" и "один ко многим" .
создаем таблицу loc_prod_cat "место товара в каталоге" с полями (id_loc, id_product, id_cataog) и набиваем её записями о размещении товаров по разделам каталога.
После этого поле id_catalog из таблицы товаров удаляем. | |
|
|
|
|
|
|
|
для: Trianon
(01.06.2006 в 14:01)
| | Спасибо за таблицу.
Мне не очень понятно каким образом будет определятся(выбиратся) к каким категориям отнести товар. | |
|
|
|
|
|
|
|
для: Spyder
(01.06.2006 в 14:16)
| | а каким образом это делается сейчас? | |
|
|
|
|
|
|
|
для: Trianon
(01.06.2006 в 14:23)
| | >а каким образом это делается сейчас?
Сейчас ни как. | |
|
|
|
|
|
|
|
для: Spyder
(01.06.2006 в 14:26)
| | Перефразирую.
Покажите фрагмент кода, который не работает. | |
|
|
|
|
|
|
|
для: Trianon
(01.06.2006 в 14:29)
| | Я пока код не писал. Потому что я не пойму каким образом делают отмемтку отношения товара к разным категория. | |
|
|
|
|
|
|
|
для: Spyder
(01.06.2006 в 14:34)
| | Для каждого товара добавляют в таблицу размещения столько строк, в скольких разделах он должен отображаться. | |
|
|
|