Ñïèñîê òîâàðîâ â êàòåãîðèè ShopOS

Íåìíîãî òåîðèè:
http://www.getinfo.ru/article610.html - êðóòàÿ ñòàòüÿ!
http://phpclub.ru/detail/article/db_tree
http://phpclub.ru/detail/article/db_tree
Ïî òîïèêó ïîíÿòíî, ÷òî îí ïîñâÿù¸í èìåííî äâèãó ShopOS. Êëàññíûé, â áåñïëàòíîé ñáîðêå îí èäåò áåç ïî÷òû (ôóíêöèÿ óìåëî óäàëåíà), íî èìåÿ ãóãë è ñíîðîâêó ìîæíî äîïèëèòü åãî, ÷òî áû îí çàðàáîòàë êàê ïîëíîôóíêöèîíàëüíûé ìàãàçèí÷èê. Äàëüøå î êàòåãîðèÿõ.
Äëÿ íà÷àëî íóæíî áûëî ïîëó÷èòü âîò òàêîå ìåíþ:

×òî áû ïðè íàæàòèè íà ãëàâíóþ êàòåãîðèþ âûïàäàë ñïèñîê òîâàðîâ. Íå äîëãî ìó÷àÿñü îòïèñàë íà îôèöèàëüíîì ôîðóìå . Óâû îòâåòîâ íå ïîëó÷èë, ãîòîâûõ ðåøåíèé íåò. Ïîíÿë, ÷òî ïðèä¸òñÿ ñàìîìó.
Ñ ×ÏÓ (âñòàâèòü â index.html âàøåãî øàáëîíà):
<ul id="my-menu">
{php}
$sql = "SELECT cat.categories_id, cd.categories_name FROM vip_categories cat, vip_categories_description cd WHERE cat.categories_status = '1' AND cd.categories_id = cat.categories_id";
$sql = osDBquery($sql);
while ($row = os_db_fetch_array($sql)) {
$menu[$row['categories_id']] = $row['categories_name'];
}
foreach ($menu as $CatId => $CatName )
{
echo "<li><a href=\"#\">".$CatName."</a>";
echo "<ul>";
$query = "SELECT * FROM
vip_products p,
vip_products_description pd,
vip_products_to_categories p2c,
vip_categories c
WHERE
c.categories_status='1'
and p.products_status = '1'
and p.products_id = p2c.products_id
and p.products_id=pd.products_id
and p2c.categories_id = '".$CatId."'
and c.categories_id = '".$CatId."'
ORDER by p.products_date_added";
$query = osDBquery($query);
while ($row1 = os_db_fetch_array($query)) {
echo "<li><a href=\"{$row1['products_page_url']}\">".$row1['products_name']."</a></li>";
}
echo "</ul></li>";
}
{/php}
</ul>
{php}
$sql = "SELECT cat.categories_id, cd.categories_name FROM vip_categories cat, vip_categories_description cd WHERE cat.categories_status = '1' AND cd.categories_id = cat.categories_id";
$sql = osDBquery($sql);
while ($row = os_db_fetch_array($sql)) {
$menu[$row['categories_id']] = $row['categories_name'];
}
foreach ($menu as $CatId => $CatName )
{
echo "<li><a href=\"#\">".$CatName."</a>";
echo "<ul>";
$query = "SELECT * FROM
vip_products p,
vip_products_description pd,
vip_products_to_categories p2c,
vip_categories c
WHERE
c.categories_status='1'
and p.products_status = '1'
and p.products_id = p2c.products_id
and p.products_id=pd.products_id
and p2c.categories_id = '".$CatId."'
and c.categories_id = '".$CatId."'
ORDER by p.products_date_added";
$query = osDBquery($query);
while ($row1 = os_db_fetch_array($query)) {
echo "<li><a href=\"{$row1['products_page_url']}\">".$row1['products_name']."</a></li>";
}
echo "</ul></li>";
}
{/php}
</ul>
Íà âûõîäå:
<ul>
<li><a href="#">Êàòåãîðèÿ 1</a>
<ul>
<li><a href="url">Òîâàð 1</a></li>
<li><a href="url">Òîâàð 2</a></li>
<li><a href="url">Òîâàð 3</a></li>
</ul>
</li>
<li><a href="#">Êàòåãîðèÿ 2</a></li>
</ul>
<li><a href="#">Êàòåãîðèÿ 1</a>
<ul>
<li><a href="url">Òîâàð 1</a></li>
<li><a href="url">Òîâàð 2</a></li>
<li><a href="url">Òîâàð 3</a></li>
</ul>
</li>
<li><a href="#">Êàòåãîðèÿ 2</a></li>
</ul>
Îêàçàëîñü ÷òî íåîáõîäèìîñòü â äàííîì ìåíþ îòïàäàåò, íî ïîÿâëÿåòñÿ íîâàÿ!

Êëàññ! Òåïåðü åñòü åùå óðîâåíü âëîæåííîñòè.
Ñ ×ÏÓ (âñòàâèòü â index.html âàøåãî øàáëîíà):
<ul id="my-menu">
{php}
$sql = "SELECT cat.categories_id, cat.parent_id, cat.categories_url, cd.categories_name FROM vip_categories cat, vip_categories_description cd WHERE cat.categories_status = '1' AND cd.categories_id = cat.categories_id ORDER BY cat.parent_id, cat.categories_id";
$sql = osDBquery($sql);
while ($row = os_db_fetch_array($sql)) {
$menu[$row['parent_id']][$row['categories_id']] = $row['categories_name'];
}
foreach ($menu[0] as $CatId => $CatName )
{
echo "<li><a href=\"#\">".$CatName."</a>";
if (isset($menu[$CatId])) {
echo "<ul>";
foreach ($menu[$CatId] as $ItemId => $ItemName)
{
echo "<li><a href=\"#\">".$ItemName."</a>";
echo "<ul>";
$query = "SELECT * FROM
vip_products p,
vip_products_description pd,
vip_products_to_categories p2c,
vip_categories c
WHERE
c.categories_status='1'
and p.products_status = '1'
and p.products_id = p2c.products_id
and p.products_id=pd.products_id
and p2c.categories_id = '".$ItemId."'
and c.parent_id = '".$CatId."'
ORDER by p.products_date_added";
$query = osDBquery($query);
while ($row1 = os_db_fetch_array($query)) {
echo "<li><a href=\"{$row1['products_page_url']}\">".$row1['products_name']."</a></li>";
}
echo "</ul>";
echo "</li>";
}
echo "</ul></li>";
} else { echo "</li>";}
}
{/php}
</ul>
{php}
$sql = "SELECT cat.categories_id, cat.parent_id, cat.categories_url, cd.categories_name FROM vip_categories cat, vip_categories_description cd WHERE cat.categories_status = '1' AND cd.categories_id = cat.categories_id ORDER BY cat.parent_id, cat.categories_id";
$sql = osDBquery($sql);
while ($row = os_db_fetch_array($sql)) {
$menu[$row['parent_id']][$row['categories_id']] = $row['categories_name'];
}
foreach ($menu[0] as $CatId => $CatName )
{
echo "<li><a href=\"#\">".$CatName."</a>";
if (isset($menu[$CatId])) {
echo "<ul>";
foreach ($menu[$CatId] as $ItemId => $ItemName)
{
echo "<li><a href=\"#\">".$ItemName."</a>";
echo "<ul>";
$query = "SELECT * FROM
vip_products p,
vip_products_description pd,
vip_products_to_categories p2c,
vip_categories c
WHERE
c.categories_status='1'
and p.products_status = '1'
and p.products_id = p2c.products_id
and p.products_id=pd.products_id
and p2c.categories_id = '".$ItemId."'
and c.parent_id = '".$CatId."'
ORDER by p.products_date_added";
$query = osDBquery($query);
while ($row1 = os_db_fetch_array($query)) {
echo "<li><a href=\"{$row1['products_page_url']}\">".$row1['products_name']."</a></li>";
}
echo "</ul>";
echo "</li>";
}
echo "</ul></li>";
} else { echo "</li>";}
}
{/php}
</ul>
Íà âûõîäå:
<ul>
<li><a href="#">Êàòåãîðèÿ 1</a>
<ul>
<li><a href="#">ÏîäÊàòåãîðèÿ 1</a>
<ul>
<li><a href="url">Òîâàð 1</a></li>
<li><a href="url">Òîâàð 2</a></li>
<li><a href="url">Òîâàð 3</a></li>
</ul>
</li>
</ul>
</li>
<li><a href="#">Êàòåãîðèÿ 2</a></li>
</ul>
<li><a href="#">Êàòåãîðèÿ 1</a>
<ul>
<li><a href="#">ÏîäÊàòåãîðèÿ 1</a>
<ul>
<li><a href="url">Òîâàð 1</a></li>
<li><a href="url">Òîâàð 2</a></li>
<li><a href="url">Òîâàð 3</a></li>
</ul>
</li>
</ul>
</li>
<li><a href="#">Êàòåãîðèÿ 2</a></li>
</ul>
Ìíå ×ÏÓ íå íàäî - ÁÅÇ ×ÏÓ (âñòàâèòü â index.html âàøåãî øàáëîíà):
<ul id="my-menu">
{php}
$sql = "SELECT cat.categories_id, cat.parent_id, cat.categories_url, cd.categories_name FROM vip_categories cat, vip_categories_description cd WHERE cat.categories_status = '1' AND cd.categories_id = cat.categories_id ORDER BY cat.parent_id, cat.categories_id";
$sql = osDBquery($sql);
while ($row = os_db_fetch_array($sql)) {
$menu[$row['parent_id']][$row['categories_id']] = $row['categories_name'];
}
foreach ($menu[0] as $CatId => $CatName )
{
echo "<li><a href=\"/index.php?cat={$CatId}\">".$CatName."</a>";
if (isset($menu[$CatId])) {
echo "<ul>";
foreach ($menu[$CatId] as $ItemId => $ItemName)
{
echo "<li><a href=\"/index.php?cat={$ItemId}\">".$ItemName."</a>";
echo "<ul>";
$query = "SELECT * FROM
vip_products p,
vip_products_description pd,
vip_products_to_categories p2c,
vip_categories c
WHERE
c.categories_status='1'
and p.products_status = '1'
and p.products_id = p2c.products_id
and p.products_id=pd.products_id
and p2c.categories_id = '".$ItemId."'
and c.parent_id = '".$CatId."'
ORDER by p.products_date_added";
$query = osDBquery($query);
while ($row1 = os_db_fetch_array($query)) {
//echo "<pre>";
//print_r($row1);
//echo "</pre>";
echo "<li><a href=\"/product_info.php?products_id={$row1['products_id']}\">".$row1['products_name']."</a></li>";
}
echo "</ul>";
echo "</li>";
}
echo "</ul></li>";
} else { echo "</li>";}
}
{/php}
</ul>
Íà âûõîäå:
<ul>
<li><a href="/index.php?cat=ID">Êàòåãîðèÿ 1</a>
<ul>
<li><a href="/index.php?cat=ID">ÏîäÊàòåãîðèÿ 1</a>
<ul>
<li><a href="/product_info.php?products_id=ID">Òîâàð 1</a></li>
<li><a href="/product_info.php?products_id=ID">Òîâàð 2</a></li>
<li><a href="/product_info.php?products_id=ID">Òîâàð 3</a></li>
</ul>
</li>
<li><a href="/index.php?cat=ID">ÏîäÊàòåãîðèÿ 2</a></li>
<li><a href="/index.php?cat=ID">ÏîäÊàòåãîðèÿ 3</a></li>
</ul>
</li>
<li><a href="#">Êàòåãîðèÿ 2</a></li>
</ul>
<li><a href="/index.php?cat=ID">Êàòåãîðèÿ 1</a>
<ul>
<li><a href="/index.php?cat=ID">ÏîäÊàòåãîðèÿ 1</a>
<ul>
<li><a href="/product_info.php?products_id=ID">Òîâàð 1</a></li>
<li><a href="/product_info.php?products_id=ID">Òîâàð 2</a></li>
<li><a href="/product_info.php?products_id=ID">Òîâàð 3</a></li>
</ul>
</li>
<li><a href="/index.php?cat=ID">ÏîäÊàòåãîðèÿ 2</a></li>
<li><a href="/index.php?cat=ID">ÏîäÊàòåãîðèÿ 3</a></li>
</ul>
</li>
<li><a href="#">Êàòåãîðèÿ 2</a></li>
</ul>
Ïîëó÷èëè ÷òî õîòåëè, íà íå ñîâñåì òàê. Òåïåðü ÿ íå ìîãó ïîïàñòü â ðàçäåë ÊÀÒÅÃÎÐÈÈ, îí òî íå êëèêàáåëüíûé (ÿ èñïîëüçóþ ÿâà ìåíþ ïðè êëèêå íà êàòåãîðèþ âûïàäàåò âëîæåííûé UL), à ýòî ñóùåñòâåííî è â ÒÇ ïðîïèñàíî.
Ïîýòîìó ýòîò âàðèàíò ìíå íå ïîäõîäèò, ñîâñåì. Áóäåì ðàáîòàòü ñ {$box_CATEGORIES}.
Èäåì â íàø_ñàéò\themes\íàø_øàáëîí\source\inc\show_category.inc.php. Ïðîâåðÿåì ÷òî áû ïàðàìåòð $MaxLevel ðàâåí áûë 1, ýòî çíà÷èò, ÷òî ïî óìîë÷àíèþ áóäåò ïîêàçûâàòüñÿ 1 óðîâåíü âëîæåííîñòè.
 òîì æå ôàéëèêå íàõîäèì:
if ($old_level > $level) {
è ïîñëå âñòàâëÿåì:
if ( isset($GLOBALS['cPath']) ) {
if ( !strpos($GLOBALS['cPath'], "_")===false ) {
$path = explode('_',$GLOBALS['cPath']);
$query = "SELECT * FROM
vip_products p,
vip_products_description pd,
vip_products_to_categories p2c,
vip_categories c
WHERE
c.categories_status='1'
and p.products_status = '1'
and p.products_id = p2c.products_id
and p.products_id=pd.products_id
and p2c.categories_id = '".$path[1]."'
and c.parent_id = '".$path[0]."'
ORDER by p.products_date_added";
$query = osDBquery($query);
$categories_string .= "<ul>";
while ($row1 = os_db_fetch_array($query)) {
$categories_string .= "<li><a href=\"/product_info.php?products_id={$row1['products_id']}\">".$row1['products_name']."</a></li>";
}
$categories_string .= "</ul>";
}
}
if ( !strpos($GLOBALS['cPath'], "_")===false ) {
$path = explode('_',$GLOBALS['cPath']);
$query = "SELECT * FROM
vip_products p,
vip_products_description pd,
vip_products_to_categories p2c,
vip_categories c
WHERE
c.categories_status='1'
and p.products_status = '1'
and p.products_id = p2c.products_id
and p.products_id=pd.products_id
and p2c.categories_id = '".$path[1]."'
and c.parent_id = '".$path[0]."'
ORDER by p.products_date_added";
$query = osDBquery($query);
$categories_string .= "<ul>";
while ($row1 = os_db_fetch_array($query)) {
$categories_string .= "<li><a href=\"/product_info.php?products_id={$row1['products_id']}\">".$row1['products_name']."</a></li>";
}
$categories_string .= "</ul>";
}
}
Èòîãî: åñëè åñòü ïàðàìåòð cPath (îí ïîêàçûâàåò êàòåãîðèþ òåêóùóþ), òî ñìîòðèì âëîæåííàÿ îíà, åñëè äà, òî ðàçáèâàåì è ïîëó÷àåì àéäè êàòåãîðèè è ïîäêàòåãîðèè. À äàëüøå çàïðîñ - ðèñóåì ñïèñîê.

Òåïåðü, êîãäà âû íàæèìàåòå íà ïîäêàòåãîðèþ âûïàäàåò åùå è ñïèñîê òîâàðîâ. Îïòèìèçèðóéòå è êîâûðÿéòå -) Äà è íå çàáóäüòå â êîäå ïîìåíÿòü ïðåôèêñ ÁÄ íà ñâîé.
UPD 02.09.11. äëÿ åùå îäíîãî óðîâíÿ + îïòèìèçèðîâàí êîä.
âñòàâèòü â îðèãèíàëüíûé ôàéë show_category.inc.php ïîñëå ( $foo[$cid]['name'].$ProductsCount. ''; - 114 ñòðî÷êà)
if ($level == 3) {
if ( !empty($Aktiv)) {
//$categories_string .= $cid;
$query = "SELECT * FROM
vip_products_to_categories p2c,
vip_products p,
vip_products_description pd
WHERE
p2c.categories_id = '".$cid."'
and p.products_status = '1'
and p.products_id = p2c.products_id
and p.products_id=pd.products_id
ORDER by p.products_date_added";
$query = osDBquery($query);
$categories_string .= "<ul>";
while ($row1 = os_db_fetch_array($query)) {
$categories_string .= "<li />[url=/product_info.php?products_id={$row1[]".$row1['products_name']."[/url]";
}
$categories_string .= "</ul>";
}
}
if ( !empty($Aktiv)) {
//$categories_string .= $cid;
$query = "SELECT * FROM
vip_products_to_categories p2c,
vip_products p,
vip_products_description pd
WHERE
p2c.categories_id = '".$cid."'
and p.products_status = '1'
and p.products_id = p2c.products_id
and p.products_id=pd.products_id
ORDER by p.products_date_added";
$query = osDBquery($query);
$categories_string .= "<ul>";
while ($row1 = os_db_fetch_array($query)) {
$categories_string .= "<li />[url=/product_info.php?products_id={$row1[]".$row1['products_name']."[/url]";
}
$categories_string .= "</ul>";
}
}
Ðåêîìåíäóþ ê ïðîñìîòðó: