Перейти к содержанию
Официальный форум поддержки Simpla

Рекомендуемые сообщения

Ребята приветствую!
Есть задача, помогите реализовать...
Список категорий выглядит так:

-категория А 1 уровня
--- категория А 2 уровня
------ категория А 3 уровня
------ категория Б 3 уровня
--- категория Б 2 уровня

---------------------------------
в каждой категории 3-его уровня есть товар.

Если в меню открыть категорию 2 уровня, то сразу выводиться большой список товаров из всех категорий 3 уровня...

Как сделать так, чтобы открыв категорию 2 уровня - выводился список категорий 3 уровня, а не товаров.


Прошу прощение за тавтологию))

Ссылка на сообщение
Поделиться на другие сайты

Перефразируя :
Если в категории содержаться подкатегории, то при открытии оной должны отображаться именно описания категорий, а не товары.
Угу ?

Ссылка на сообщение
Поделиться на другие сайты

В Storefront.class.php ищем функцию
function fetch()

В условии:

elseif (!empty($category) || !empty($brand))
{
// Если задана категория, выводим товары этой категории
return $this->fetch_products($category, $brand);
}

Включаем вовнутрь проверку на наличие подкатегорий.
В таблице categories, ищем строку с url=$category, c этой строки тащим id категории.
Далее проверяем найдется ли в этой же таблице строка с parent=найденный id
Если найдется, значит есть подкатегории. Схематически выглядит так.

elseif (!empty($category) || !empty($brand))
{
if (!subcategories_exist())
// Нет дочерних категорий
return $this->fetch_products($category, $brand);
else
// Есть дочернии категории
return $this->fetch_subcategories($category); // эту функцию предстоит дописать тоже ручками
}

fetch_subcategories($category) очевидным образом будет собирать нужные нам массивы в том числе новый массив подкатегорий (пусть он будет назван $subcats), $this->smarty->assign() их всех, и $this->body = $this->smarty->fetch('products.tpl')...

В качестве примера можете взять fetch_products() функцию.

После того, как мы передали $subcats в шаблон, можем его там смело использовать. Ну думаю элементы массива обладают такими свойствами как description и name. Большее наврядли потребуется.

products.tpl

Ссылка на сообщение
Поделиться на другие сайты

Это можно сделать проще, не трогая движок, исправив только шаблон, без дописывания функций)))

Ссылка на сообщение
Поделиться на другие сайты

Исхожу из того, что нам надо вывести при выборе категории (с детьми) ее:
name
url
image
description

$categories - дерево категорий, передается в шаблон и несет с собой только name и url категорий.

$category - структура данных отражающих только текущую категорию, в ней уже есть и img, и description.

Потому, картинки и описания нужных на данный момент категорий придется нести через другой массив (у меня он $subcats для примера назван).

Нести все данные о категориях через $categories тоже можно, но это извращение.

Можно обойтись и шаблоном:
1) Проверяет что есть подкатегории.
2) Выбирает с БД категории у которых parent равен текущему, выводит от них image и description.
Тут надо не забыть разрешить Smarty внедрять php код напрямую в шаблоны.
Но как же "отделение дизайна от кода" ? Атата ! Мы же хотим хороший код ?

Конечно можно не трогая БД вывести просто названия ссылки-названия подкатегорий.
Даже наверно с картинками (Учитывая механизм именования картинок).

Ссылка на сообщение
Поделиться на другие сайты

Косяк прав! Я нуп и опозорился :(

$category с собой все кишки тащит через categories_tree...

Кот тады очевиден.

{if $category->subcategories}
{foreach item=cat from=$category->subcategories}
{$cat->name|escape} {$cat->image} {$cat->description|escape}<br />
{/foreach}
{else}
{if $products}
{* выводим продукты как в шаблоне *}
{/if}
{/if}

Естественно name, image и description под Ваш дизайн раскидать надо.
А вставлять вместо:

Ссылка на сообщение
Поделиться на другие сайты

Вместо блока с выводом товаров в products.tpl

{if $products}
{* выводим продукты как в шаблоне *}
{/if}

Точнее сверху него дописываем:

{if $category->subcategories}
{foreach item=cat from=$category->subcategories}
{$cat->name|escape} {$cat->image} {$cat->description|escape}<br /> {* Тут выводим категории как душа пожелает*}
{/foreach}
{else}

а снизу {/if} закрыть не забываем, а то смарти фигу нам покажет

Ссылка на сообщение
Поделиться на другие сайты

Не могу сооразить...Вот список товара, который выводится в родительской категории:

<!-- Товары /-->
<div class="clear"><!-- /--></div>
{foreach name=products item=product from=$products}
<div id="cat_products_block">

<div id="cat_products_img">



<a href="products/{$product->url}"><img src="{if $product->small_image}files/products/{$product->small_image}{else}images/no_foto.gif{/if}" alt=""/></a>
</div>

<div id="cat_products_name">
<h3 tooltip='hit' product_id='{$product->product_id}'><a href="products/{$product->url}">{$product->category|escape} {$product->brand|escape} {$product->model|escape}</a></h3>
</div>

<div class="desc">{$product->description}<br>
<form class=tovar_price action='cart' method=get style='float:left; width:300px;'>
<table cellpadding="0" style="border-collapse: collapse"><tr><td>
{foreach name=variants item=variant from=$product->variants}
<input {if $product->variants|@count<2}style='display:none;'{/if} type=radio name=variant_id value='{$variant->variant_id}' {if $smarty.foreach.variants.first}checked{/if}>{$variant->name} <b><font style="font-size: 14pt">{$variant->discount_price*$currency->rate_from/$currency->rate_to|string_format:"%.0f"} {$currency->sign|escape}</font></b>
<br>
{/foreach}
</td><td valign='top'><p style="margin-left: 11px">
{if $product->variants|@count>0}
<input style='float:right;' class="execute" type=submit href="cart/add/{$product->product_id}" value='в корзину' onclick="document.cookie='from='+location.href+';path=/';this.form.submit();">
{/if}
</td></tr></table>
</form>
</div>
</div>

{if $smarty.foreach.products.iteration%3 == 0}
<div class="clear"><!-- /--></div>
{/if}
{/foreach}
<div class="clear"><!-- /--></div>

....ГДЕ ЧТО НУЖНО ПОМЕНЯТЬ?

Ссылка на сообщение
Поделиться на другие сайты

Этот код трогать не нужно, нужно ДО него сделать проверку, и если есть подкатегории, то выводим их, если нет, то товары...
Как еще подробней описать, я даже не знаю)))
Напишите в аську...

Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
×
×
  • Создать...