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

Разбить товары на категории с подзаголовками


Перейти к решению Решено Kami,

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

Друзья, вопрос. Есть Категория 

 

Бытовая техника, она делится на пылесосы и миксеры.

 

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

 

Суть задачи такова: привести к виду при переходе в бытовую технику.

 

Пылесосы:

Пылесос 1 

Пылесос 2

Пылесос 3

 

Ниже 

 

Миксеры:

Миксер 1

Миксер 2

Миксер 3

 

 

 {foreach $category->subcategories as $c}
		{if $c->visible}
					<div class="cat_title">	{$c->name}</div>
		{/if}
	{/foreach}

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

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

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

А еще надо как-то учитывать возможные подкатегории более глубоких уровней. И может, и еще что возникнет...

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

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

А еще надо как-то учитывать возможные подкатегории более глубоких уровней. И может, и еще что возникнет...

 

уточню, товар без пагинации, на одной странице. Категории 3 уровня не требуются. 

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

уточню, товар без пагинации, на одной странице. Категории 3 уровня не требуются. 

 

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

 

в макете достаточно просто - при обходе сравниваем текущую категорию с категорией товаров, если не равны выводим заголовок

 

{$current_category = null}

{foreach $products as $p}

{if $current_category->id !== $p->category->id}
  {$p->category->name|escape}
  {$current_category = $p->category}
{/if}

....

{/foreach}

 

сложностей особых нет, главное что бы сортировка по категории в запросе дополняла стандартные

Изменено пользователем DaVinci
Ссылка на сообщение
Поделиться на другие сайты

еще вариант, если нет пагинации, взять все подкатегории и для каждой отдельно подтянуть товары.

 

И да, вы не ограничены только ProductsView. можете создавать их столько сколько угодно, или логику в них разбивать по небольшим методам и подтягивать необходимый при определенных условиях

 

к примеру 

 

if( $category->id == 1) {
   return $this->base_view();
} else {
  return $this->new_view();
}

 

в большинстве случаев просто ставят условия в одном методе на все случаи жизни. и потом в таком обилии условий сложно разобраться что к чему

Изменено пользователем DaVinci
Ссылка на сообщение
Поделиться на другие сайты

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

 

в макете достаточно просто - при обходе сравниваем текущую категорию с категорией товаров, если не равны выводим заголовок

 

{$current_category = null}

{foreach $products as $p}

{if $current_category->id !== $p->category->id}
  {$p->category->name|escape}
  {$current_category = $p->category}
{/if}

....

{/foreach}

 

сложностей особых нет, главное что бы сортировка по категории в запросе дополняла стандартные

 

 

Не совсем понял решение , 

 

я же нахожусь в категории бытовая техника , 

 

и у меня там 2 категории , Миксеры и пылесосы .

 

итого находясь на странице бытовой техники, вывод должен быть формата 

 

 

Пылесосы:

Пылесос 1 

Пылесос 2

Пылесос 3

 

Ниже 

 

Миксеры:

Миксер 1

Миксер 2

Миксер 3

 

 

То есть проверка текущей категории проблему не решит.

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

Решил проблему данным способом

 

 

 {foreach $category->subcategories as $c} <!-- Находим подкатегории-->
		{if $c->visible}  <!-- Проверяем активна или нет-->
	<div class="cat_title">{$c->id}{$c->name}</div> <!-- Заголовок под категории -->
{get_products var=custom_products category_id=$c->id}  <!-- Универсальный виджет(решение форума)-->
{if $custom_products}
    {foreach $custom_products as $product}  <!-- Отбираем товары каждой под категории -->
<!-- непосредственно список товаров-->
    {/foreach}

{/if}

{/if}

{/foreach}

Интересно мнение спецов, понятно дело что пагинация не подойдет под данное решение, но если товаров много то решение следующее, задать limit в функции, например limit=10 и кнопку переходящую в под категорию.

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

Если Вам подходит, то и хорошо.

 

А вообще, кроме вышеупомянутых, сразу видны такие недостатки:

1. Если некий товар находится в самой категории, то он выпадает из показа.

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

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

Если Вам подходит, то и хорошо.

 

А вообще, кроме вышеупомянутых, сразу видны такие недостатки:

1. Если некий товар находится в самой категории, то он выпадает из показа.

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

 

ну 1 пункт это бесмыслица, если товар делится на подкатегории, то почему он должен находиться в корневой. Тут уже структуру каталога надо продумывать.

 

По второму, согласен, но если товар в 2 категориях, то и пусть показывает в двух. Это же логично.

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

ну 1 пункт это бесмыслица, если товар делится на подкатегории, то почему он должен находиться в корневой. Тут уже структуру каталога надо продумывать.

 

По второму, согласен, но если товар в 2 категориях, то и пусть показывает в двух. Это же логично.

 

вполне логично, но исключить достаточно просто -  NOT IN или по категориям или по уже запрошенным товарам

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

ну 1 пункт это бесмыслица, если товар делится на подкатегории, то почему он должен находиться в корневой.

 

1. Товар никому ничего не должен. В админке есть возможность поместить товар как ЛЮБУЮ  категорию - как админ сочтет нужным. Если Вы никогда не помещаете в корневую, то это не значит, что всегда у всех так, и тем более не значит, что это бессмыслица...

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

вполне логично, но исключить достаточно просто -  NOT IN или по категориям или по уже запрошенным товарам

 

Насчет логичности - совсем не очевидно. С точки зрения подкатегории - оно логично. А с точки зрения всей страницы категории - совсем нелогично в списке товаров категории  повторять элементы... 

 

Что-то я сомневаюсь, что исключить будет столь же просто, как в решении ТС из #7. Или может, напишете полное решение, раз уж оно столь просто?

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

Насчет логичности - совсем не очевидно. С точки зрения подкатегории - оно логично. А с точки зрения всей страницы категории - совсем нелогично в списке товаров категории  повторять элементы... 

 

Что-то я сомневаюсь, что исключить будет столь же просто, как в решении ТС из #7. Или может, напишете полное решение, раз уж оно столь просто?

 

я уже написал - NOT IN

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

я уже написал - NOT IN

 

Прекрасно! Осталось лишь написать, куда конкретно в способ ТС это вставить, чтобы сразу заработало. Чтобы было ПОЛНОЕ решение. А кинуть  обрывок чего-то, что можно использовать в решении, тут и так есть много умельцев - в Сети много всего есть и легко копируется...

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

Прекрасно! Осталось лишь написать, куда конкретно в способ ТС это вставить, чтобы сразу заработало. Чтобы было ПОЛНОЕ решение. А кинуть обрывок чего-то, что можно использовать в решении, тут и так есть много умельцев - в Сети много всего есть и легко копируется...

Для автора темы данное решение вполне Полноне. Если вы так не считаете можете дополнить. Я лишь указал на вполне очевидное решение для того что бы исключить дубли. Как кто это реализует дело того кому оно надо.

 

Не забывайте тему обсуждения - общие

 

В сети так же достаточно тролей которые выкладывают неполноценное кеширование в платной ветке но при этом им ничто не мешает считать работы других авторов не ПОЛНЫМИ

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

Еще есть такой момент в предложенном решении: на каждую подкатегорию делается добавочно 3 запроса к базе.

Так что если, к примеру, имеется 5 подкатегорий, то получаем добавочно 15 запросов. Это добавки к 15 запросам,  которые делаются стандартно.  То есть выходит приличная дополнительная нагрузка на базу.

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

Корс, у тебя ЕСТЬ решение лучше?

Ты готов его выложить бесплатно?

Если нет - сиди и не трынди)))

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

Еще есть такой момент в предложенном решении: на каждую подкатегорию делается добавочно 3 запроса к базе.

Так что если, к примеру, имеется 5 подкатегорий, то получаем добавочно 15 запросов. Это добавки к 15 запросам, которые делаются стандартно. То есть выходит приличная дополнительная нагрузка на базу.

Решений может быть несколько. Но почему то вы думаете что предполагаемое вами решение самое лучшее.

 

Какая нагрузка, о чем вы? Если вы так боитесь пользоваться базой, то собственно для чего она предназначена ну откажитесь вы от неё уже в конце концов, и от php откажитесь, пишите на C, Java, они работают быстрее.

 

Даже если вы якобы одним запросов по group by в извращенном виде достанете все товары подкатегорий то быстрее он не окажется. Или если вы считаете что один запрос с множество подзапросов все так же остается одним то вы очень сильно ошибаетесь.

 

Люди почитают таких умников потом боятся лишний запрос к базе писать... да и впрочем тут толком никто не видел как пишите вы, потому принимать на веру вменяемость вашей компетенции я бы не стал. Троль он и есть троль

 

сиди и не трынди)))

 

самый отличный совет, Крос я бы на вашем месте прислушался.

Изменено пользователем DaVinci
Ссылка на сообщение
Поделиться на другие сайты

решение автора вполне лаконично и решает поставленные перед ним задачи и при этом результат работы дополнения не противоречит логике приложение - товары могут находится в нескольких категориях.

 

один Курс не согласен будто для него делали, но сам ни каких решений не публикует  :D

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

Решений может быть несколько. Но почему то вы думаете что предполагаемое вами решение самое лучшее.

 

Какая нагрузка, о чем вы? Если вы так боитесь пользоваться базой, то собственно для чего она предназначена ну откажитесь вы от неё уже в конце концов, и от php откажитесь, пишите на C, Java, они работают быстрее.

 

Даже если вы якобы одним запросов по group by в извращенном виде достанете все товары подкатегорий то быстрее он не окажется. Или если вы считаете что один запрос с множество подзапросов все так же остается одним то вы очень сильно ошибаетесь.

 

Люди почитают таких умников потом боятся лишний запрос к базе писать... да и впрочем тут толком никто не видел как пишите вы, потому принимать на веру вменяемость вашей компетенции я бы не стал. Троль он и есть троль

 

Никак не ожидал столь бурной нервной неакции на простенькое замечание.

 

1. "Но почему то вы думаете что предполагаемое вами решение самое лучшее." - Не припомню, чтобы я где-то писал, что так считаю. Это Вы себе сами почему-то нафантазировали...

 

2. "Какая нагрузка, о чем вы?" - Всего лишь о том, что добавлять для решения несложной задачи на пустом месте 15 лишних запросов вместо одного простого есть нерациональность...

 

3. "Даже если ... в извращенном виде..." - Тут Вы совершенно правы. Если в извращенном виде, то будет плохо. А здесь Вам бы стоило включить фантазию и задуматься, а нельзя ли сделать не в извращенном, а в обычном виде простым и аккуратным запросом. Как Вы справедливо заметили вначале, "Решений может быть несколько". Неужто не догадываетесь, что, кроме предложеного, могут быть быть другие решения, причем не извращенные?

 

4. "Или если вы считаете что один запрос с множество подзапросов все так же остается одним то вы очень сильно ошибаетесь." - Опять фантазии на пустом месте. Я нигде не говорил, что для решения нужен непременно запрос с множеством подзапросов. Мне периодически приходится решать вопросы с тормозами на сайте, в большинстве случаев переделкой запросов, причем вовсе не в сторону их усложнения...

 

5. "боятся лишний запрос к базе писать" - На главной странице CMS Simpla http://simplacms.ru/ сказано: "Все запросы к базе оптимизированы, на большинстве страниц магазина используется не более десяти SQL-запросов". Это позиционируется как достоинство ситемы, разработчик дает четкий посыл о том, что специально приложил усилия, чтобы уменьшить нагрузку на базу. Если же Вы не согласны с таким подходом, а собираетесь уподобляться домохозяйке из пословицы, которая таскала сметану из погреба маленькими ложками, но это Ваш выбор...

 

6. "принимать на веру вменяемость вашей компетенции" - куда опять Вас тянут Ваши фантазии? Обсуждать чью-то компетенцию - это Вам в другую тему, а здесь речь идет про конкретное решение конкретного вопроса...

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

 

Никак не ожидал столь бурной нервной неакции на простенькое замечание.

 

1. "Но почему то вы думаете что предполагаемое вами решение самое лучшее." - Не припомню, чтобы я где-то писал, что так считаю. Это Вы себе сами почему-то нафантазировали...

 

2. "Какая нагрузка, о чем вы?" - Всего лишь о том, что добавлять для решения несложной задачи на пустом месте 15 лишних запросов вместо одного простого есть нерациональность...

 

3. "Даже если ... в извращенном виде..." - Тут Вы совершенно правы. Если в извращенном виде, то будет плохо. А здесь Вам бы стоило включить фантазию и задуматься, а нельзя ли сделать не в извращенном, а в обычном виде простым и аккуратным запросом. Как Вы справедливо заметили вначале, "Решений может быть несколько". Неужто не догадываетесь, что, кроме предложеного, могут быть быть другие решения, причем не извращенные?

 

4. "Или если вы считаете что один запрос с множество подзапросов все так же остается одним то вы очень сильно ошибаетесь." - Опять фантазии на пустом месте. Я нигде не говорил, что для решения нужен непременно запрос с множеством подзапросов. Мне периодически приходится решать вопросы с тормозами на сайте, в большинстве случаев переделкой запросов, причем вовсе не в сторону их усложнения...

 

5. "боятся лишний запрос к базе писать" - На главной странице CMS Simpla http://simplacms.ru/ сказано: "Все запросы к базе оптимизированы, на большинстве страниц магазина используется не более десяти SQL-запросов". Это позиционируется как достоинство ситемы, разработчик дает четкий посыл о том, что специально приложил усилия, чтобы уменьшить нагрузку на базу. Если же Вы не согласны с таким подходом, а собираетесь уподобляться домохозяйке из пословицы, которая таскала сметану из погреба маленькими ложками, но это Ваш выбор...

 

6. "принимать на веру вменяемость вашей компетенции" - куда опять Вас тянут Ваши фантазии? Обсуждать чью-то компетенцию - это Вам в другую тему, а здесь речь идет про конкретное решение конкретного вопроса...

Если у вас есть иное решиерие которое вы готовы продемонстрировать тогда разговор будет предметным.

 

Но его нет, потому приходится включать фантазию что бы предположить о чем вы там себе думаете.

 

Косяк на данный счёт сделал достаточно содержательное и локаничное замечание.

 

Корс, у тебя ЕСТЬ решение лучше?

Ты готов его выложить бесплатно?

Если нет - сиди и не трынди)))

Изменено пользователем DaVinci
Ссылка на сообщение
Поделиться на другие сайты

 

3. "Даже если ... в извращенном виде..." - Тут Вы совершенно правы. Если в извращенном виде, то будет плохо. А здесь Вам бы стоило включить фантазию и задуматься, а нельзя ли сделать не в извращенном, а в обычном виде простым и аккуратным запросом. Как Вы справедливо заметили вначале, "Решений может быть несколько". Неужто не догадываетесь, что, кроме предложеного, могут быть быть другие решения, причем не извращенные?

 

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

Изменено пользователем DaVinci
Ссылка на сообщение
Поделиться на другие сайты

 

5. "боятся лишний запрос к базе писать" - На главной странице CMS Simpla http://simplacms.ru/ сказано: "Все запросы к базе оптимизированы, на большинстве страниц магазина используется не более десяти SQL-запросов". Это позиционируется как достоинство ситемы, разработчик дает четкий посыл о том, что специально приложил усилия, чтобы уменьшить нагрузку на базу. Если же Вы не согласны с таким подходом, а собираетесь уподобляться домохозяйке из пословицы, которая таскала сметану из погреба маленькими ложками, но это Ваш выбор...

 

не знаю какие вы там посылы для себя получаете и по каким каналам они к вам доходят. автор использовал ровно столько запросов к базе сколько их потребовалось для реализации функциональности приложения. И это не повод ограничиваться именно этим количеством запросов.

 

И да, таскать сметану из погреба маленькими ложками очень кстати - это основа хорошего кода. Вы не зная того сами озвучили один из принципов хорошей архитектуры - тонкие контроллеры, толстые модели. Да, это мой выбор.

Изменено пользователем DaVinci
Ссылка на сообщение
Поделиться на другие сайты

Есть использовать поиск, то можно найти старую тему аж 2013 года

 

http://forum.simplacms.ru/topic/6179-%D0%BA%D0%B0%D0%BA-%D0%B2%D1%8B%D0%B2%D0%B5%D1%81%D1%82%D0%B8-%D0%BA%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8E-%D1%82%D0%BE%D0%B2%D0%B0%D1%80%D0%B0-%D0%BF%D1%80%D0%B8-%D0%BF%D1%80%D0%BE%D1%81%D0%BC%D0%BE%D1%82%D1%80%D0%B5-%D0%B1%D1%80/

 

Если применить предлагаемый там прием, то

1. добавится всего простой 1 запрос к текущему функционалу,

2. этот запрос даже не придется писать руками, он из API,

3. а написать придется не более 10 строк в PHP и не более 10 в шаблоне, все в стандартном стиле Simpla.

Изменено пользователем phukortsin
Ссылка на сообщение
Поделиться на другие сайты

автор использовал ровно столько запросов к базе сколько их потребовалось для реализации функциональности приложения. И это не повод ограничиваться именно этим количеством запросов.

 

"сколько их потребовалось" - довольно туманно. Ибо одну и ту же функциональность можно обеспечить РАЗНЫМ числом запросов. А автор малое количество запросов представляет как преимущество системы. Хотя легко можно создать ту же функциональность, используя и сотни запросов. И при этом даже PHP код сократить...

Изменено пользователем phukortsin
Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

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

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

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

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

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