Перейти к содержимому


Подскажите Как Скрывать Категорию Товара Если Внутри Нет Товара (Временно Нет В Наличии)


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 36

#21 Vaccina

Vaccina

    Активный участник

  • Модераторы
  • 24 353 сообщений

Отправлено 04 Июль 2013 - 03:28

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

Цитата

Попробуйте сделать следующее:
Сайт - Редактор шаблонов - HTML - найдите:
<!-- Каталог товаров -->
<h4 class="contentTbodyCatalogHeader">Каталог товаров</h4>
{%IFNOT catalog_empty %}
{% FOR catalog %}
{% IF catalog.GOODS_COUNT %}
{% IF catalog.FIRST %}<ul>{% ENDIF %}
<li>
<a href="{catalog.URL}"
{% IF catalog.CURRENT %}
class="contentTbodyCatalogCurent"
{% ELSEIF catalog.CURRENT_PARENT %}
class="contentTbodyCatalogCurentBranch"
{% ENDIF %}
>
{catalog.NAME}
</a>
{% IF catalog.ISSET_SUB=0 %}</li>{% ENDIF %}
{% IF catalog.LAST %}
{% FOR out %}</ul>{%IFNOT catalog.out.LAST %}</li>{% ENDIF %}{% ENDFOR %}
{% ENDIF %}
{% ENDIF %}
{% ENDFOR %}
{% ENDIF %}
<!-- Если в тарифном плане подключен модуль фильтров по товарам -->
и замените его на:
<!-- Каталог товаров -->
<h4 class="contentTbodyCatalogHeader">Каталог товаров</h4>
{%IFNOT catalog_full_empty %}
{% FOR catalog_full %}
{% IF catalog_full.GOODS_COUNT %}
{% IF catalog_full.FIRST %}<ul>{% ENDIF %}
<li>
<a href="{catalog_full.URL}"
{% IF catalog_full.CURRENT %}
class="contentTbodyCatalogCurent"
{% ELSEIF catalog_full.CURRENT_PARENT %}
class="contentTbodyCatalogCurentBranch"
{% ENDIF %}
>
{catalog.NAME}
</a>
{% IF catalog_full.ISSET_SUB=0 %}</li>{% ENDIF %}
{% IF catalog_full.LAST %}
{% FOR out %}</ul>{%IFNOT catalog_full.out.LAST %}</li>{% ENDIF %}{% ENDFOR %}
{% ENDIF %}
{% ENDIF %}
{% ENDFOR %}
{% ENDIF %}
<!-- Если в тарифном плане подключен модуль фильтров по товарам -->

Говоря коротко, вам нужно было в том же блоке, в котором вы работали и ранее, заменить все catalog на catalog_full

Также можно вместо имеющегося кода каталога попробовать:
<!-- Каталог товаров -->
<h4 class="contentTbodyCatalogHeader">Каталог товаров</h4>
{%IFNOT catalog_full_empty %}
{% FOR catalog_full %}{%IFNOT catalog_full.HIDE %}
{% IF catalog_full.GOODS_COUNT %}
{% IF catalog_full.FIRST %}<ul>{% ENDIF %}
<li>
<a href="{catalog_full.URL}"
{% IF catalog_full.CURRENT %}
class="contentTbodyCatalogCurent"
{% ELSEIF catalog_full.CURRENT_PARENT %}
class="contentTbodyCatalogCurentBranch"
{% ENDIF %}
>
{catalog.NAME}
</a>
{% IF catalog_full.ISSET_SUB=0 %}</li>{% ENDIF %}
{% IF catalog_full.LAST %}
{% FOR out %}</ul>{%IFNOT catalog_full.out.LAST %}</li>{% ENDIF %}{% ENDFOR %}
{% ENDIF %}
{% ENDIF %}{% ENDIF %}
{% ENDFOR %}
{% ENDIF %}
<!-- Если в тарифном плане подключен модуль фильтров по товарам -->


#22 Andrew S.

Andrew S.

    Активный участник

  • Пользователи
  • PipPipPipPip
  • 1 382 сообщений
  • ГородKhabarovsk

Отправлено 06 Июль 2013 - 02:26

Просмотр сообщенияVaccina (04 Июль 2013 - 03:28) писал:

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


Говоря коротко, вам нужно было в том же блоке, в котором вы работали и ранее, заменить все catalog на catalog_full

Также можно вместо имеющегося кода каталога попробовать:
<!-- Каталог товаров -->
<h4 class="contentTbodyCatalogHeader">Каталог товаров</h4>
{%IFNOT catalog_full_empty %}
{% FOR catalog_full %}{%IFNOT catalog_full.HIDE %}
{% IF catalog_full.GOODS_COUNT %}
{% IF catalog_full.FIRST %}<ul>{% ENDIF %}
<li>
<a href="{catalog_full.URL}"
{% IF catalog_full.CURRENT %}
class="contentTbodyCatalogCurent"
{% ELSEIF catalog_full.CURRENT_PARENT %}
class="contentTbodyCatalogCurentBranch"
{% ENDIF %}
>
{catalog.NAME}
</a>
{% IF catalog_full.ISSET_SUB=0 %}</li>{% ENDIF %}
{% IF catalog_full.LAST %}
{% FOR out %}</ul>{%IFNOT catalog_full.out.LAST %}</li>{% ENDIF %}{% ENDFOR %}
{% ENDIF %}
{% ENDIF %}{% ENDIF %}
{% ENDFOR %}
{% ENDIF %}
<!-- Если в тарифном плане подключен модуль фильтров по товарам -->
Вот. А я думал, что везде-повсюду по всем шаблонам найти эту опцию и изменить на catalog_full. Но это не помогает. И второй вариант тоже не работает.

#23 Vaccina

Vaccina

    Активный участник

  • Модераторы
  • 24 353 сообщений

Отправлено 06 Июль 2013 - 03:05

Сайт - Редактор тем - HTML - свой код каталога из приведенных выше замените:
<!-- Каталог -->
		 <h4 class="contentTbodyCatalogHeader">Каталог товаров 657565768</h4>
			 <ul id="subNavigation">
		 {%IFNOT catalog_empty %}
				 {% FOR catalog %}
				 {% IFNOT catalog.HIDE %}
					 <li {% IF catalog.GOODS_COUNT=0 && catalog.LEVEL>0 %}style="display:none;"{% ENDIF %}>
					 <a href="{catalog.URL}"
						 {% IF catalog.LEVEL>0%}style="padding-left:{catalog.LEVEL | multiply("20")}px"{% ENDIF %}
						 {% IF catalog.CURRENT %}class="selected"{% ENDIF %}
					 >{catalog.NAME}</a>
					 </li>
				 {% ENDIF %}
				 {% ENDFOR %}
			 {% ENDIF %}
		 </ul>
		 <!-- end Каталог -->

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

#24 Andrew S.

Andrew S.

    Активный участник

  • Пользователи
  • PipPipPipPip
  • 1 382 сообщений
  • ГородKhabarovsk

Отправлено 06 Июль 2013 - 08:53

Не получается..

#25 Vaccina

Vaccina

    Активный участник

  • Модераторы
  • 24 353 сообщений

Отправлено 06 Июль 2013 - 09:10

ну это не ответ, что именно не получается? какой результат получается?
Просто этот код я использовала и тестировала на тестовом магазине и все адекватно работало.

#26 Andrew S.

Andrew S.

    Активный участник

  • Пользователи
  • PipPipPipPip
  • 1 382 сообщений
  • ГородKhabarovsk

Отправлено 06 Июль 2013 - 10:10

Просмотр сообщенияVaccina (06 Июль 2013 - 09:10) писал:

ну это не ответ, что именно не получается? какой результат получается?
Просто этот код я использовала и тестировала на тестовом магазине и все адекватно работало.
Не, просто по-внимательней посмотрите. Я не знаю как описать словами. Но при этом изменении показывается лишнее и скрывается то, что надо..

Как бы сказать..

Слева список - не показывает подкаталоги без товара, в которых есть подкаталоги с товаром.

Справа - там где все каталоги и подкаталоги с картинками - там вообще ВСЁ показывается и ничего не скрывается.

Как-то так..

#27 Andrew S.

Andrew S.

    Активный участник

  • Пользователи
  • PipPipPipPip
  • 1 382 сообщений
  • ГородKhabarovsk

Отправлено 06 Июль 2013 - 11:57

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

#28 Vaccina

Vaccina

    Активный участник

  • Модераторы
  • 24 353 сообщений

Отправлено 09 Июль 2013 - 04:00

Ну мы пока изменяем левую колонку с каталогом, до правой нам еще шагать и шагать, поэтому запаситесь терпением :)
В принципе проблему поняла и нашла в чем причина. У нас используется следующее условие:
IF catalog.GOODS_COUNT=0 && catalog.LEVEL>0
оно означает - если кол-во товаров = 0 и уровень каталога > 0 то скрываем категорию, тут два варианта:
1. сделать свой каталог с одинаковым кол-вом вложенностей(к примеру двухуровневый), тогда мы сможем указать сточное условие catalog.LEVEL>0
2.сделать каталог раскрытым - полностью все вложенности открыты, в таком случае каталогу будет заранее известно в каких подкатегориях есть иль нет товары.

#29 Andrew S.

Andrew S.

    Активный участник

  • Пользователи
  • PipPipPipPip
  • 1 382 сообщений
  • ГородKhabarovsk

Отправлено 09 Июль 2013 - 05:42

Просмотр сообщенияVaccina (09 Июль 2013 - 04:00) писал:

Ну мы пока изменяем левую колонку с каталогом, до правой нам еще шагать и шагать, поэтому запаситесь терпением :)
В принципе проблему поняла и нашла в чем причина. У нас используется следующее условие:
IF catalog.GOODS_COUNT=0 && catalog.LEVEL>0
оно означает - если кол-во товаров = 0 и уровень каталога > 0 то скрываем категорию, тут два варианта:
1. сделать свой каталог с одинаковым кол-вом вложенностей(к примеру двухуровневый), тогда мы сможем указать сточное условие catalog.LEVEL>0
2.сделать каталог раскрытым - полностью все вложенности открыты, в таком случае каталогу будет заранее известно в каких подкатегориях есть иль нет товары.
Ладно, не получится. Слишком сложно. Потом может додумаюсь до этого.

#30 User1

User1

    Пользователь

  • Пользователи
  • PipPip
  • 46 сообщений

Отправлено 10 Август 2014 - 18:48

Уважаемые суппорты!
Говорим не о дереве каталога, а о правом блоке вывода подкаталогов (с картинками).

А если упростить задачу: скрывать каталоги в которых нет НИ ТОВАРОВ НИ ПОДКАТАЛОГОВ.
Первую часть условия можно реализовать совсем просто:


{% FOR nested_categories_list %}  <!-- Бежим по вложенным категориям... -->

{% IF nested_categories_list.GOODS_COUNT=0 }

// ничего не делаем

{% ELSE %}

// рисуем подкаталоги

{% ENDIF %}

{% ENDFOR %}


Остаётся вторая часть..
В принципе можно пробежатся по catalog_full, если есть у кого PARENT_ID равный ID подкаталога значит это подкаталог с под-подкаталогами и его надо выводить.
Но практическая реализация этого потребует вложенного цикла либо временной переменной. Из-за ограниченности синтаксиса языка ни то ни другое не возможно.

Сделайте так чтобы в nested_categories_list передавались не только кол-во товаров но и булевская величина - есть/нет детей (т.е. подкаталогов).

Если же это можно решить средствами Java то пожалуйста конкретней, с примерами:
1) как объявить свою переменную
2) как присвоить ей значение
3) как проверить её значение в условии {% IF ... }

#31 Сake

Сake

    Активный участник

  • Модератоpы
  • 5 979 сообщений

Отправлено 12 Август 2014 - 02:53

Если используется древовидная структура вложенности списков ul li ul, то использовать код

{% IF nested_categories_list.GOODS_COUNT=0 }
// ничего не делаем
{% ELSE %}
// рисуем подкаталоги
{% ENDIF %}

лучше не стоит, так как может нарушится структура вложенности. Лучше всего использовать стиль скрытия display: none.

Цитата

1) как объявить свою переменную

var variableName;

Цитата

2) как присвоить ей значение

var variableName = 1;
variableName = 2;

Цитата

3) как проверить её значение в условии {% IF ... }

Тут понадобиться полный обход дерева списка ul li и проверка вложенности в него дополнительных потомков. Если таковые отсутствуют, то список скрывается. Это может выглядеть следующим образом

$('.navigation li').each(function() {
  if (!$(this).children('ul').length) {
	$(this).hide();
  }
});


#32 User1

User1

    Пользователь

  • Пользователи
  • PipPip
  • 46 сообщений

Отправлено 14 Август 2014 - 20:25

Спасибо за помощь! Но если вас не затруднит пожалуйста поподробнее третий пункт.
Дело то нужное, надо всем так сделать: покупатели раздражаются когда заходят в пустые каталоги, а оперативно отслеживать и скрывать в ручном режиме трудоёмко и времязатратно.

Применительно к шаблону "Техника". Как я выяснил отрисовка каталогов происходит в шаблоне "Товары", строки 58-78

		{% IF goods_empty %}
		  {% IF goods_filters_empty %}
			<!-- Если в категории нет товаров, но есть категории, то отобразим их -->
			{%IFNOT nested_categories_list_empty %}
			  <!-- Блок навигации по категориям, вложенным в текущую категорию -->
				<ul class="content_catalog_nested_categories">
				  {% FOR nested_categories_list %}
				  <li>
					<a href="{nested_categories_list.URL}" title="Перейти к категории &laquo;{nested_categories_list.NAME}&raquo;" class="goods-cat-image-medium-square" style="background: url('{% IF nested_categories_list.IMAGE_EMPTY %}{ASSETS_IMAGES_PATH}no-photo-small.png{% ELSE %}{nested_categories_list.IMAGE_MEDIUM}{% ENDIF %}') no-repeat center center; background-size: contain;"></a>
					<a class="category-name" href="{nested_categories_list.URL}" title="Перейти к категории &laquo;{nested_categories_list.NAME}&raquo;">{nested_categories_list.NAME}</a>
				  </li>
				  {% ENDFOR %}
				</ul>
				<br clear="all"/>
			<!-- Если в категории нет ни товаров, ни категорий то сообщим пользователю что ничего нет -->
			{% ELSE %}
			  <p class="note-msg">Нет товаров в выбранной категории</p>
			{% ENDIF %}
		  {% ELSE %}
			<p class="note-msg">Нет товаров для выбранных условий</p>
		  {% ENDIF %}
		{% ENDIF %}

Соответственно надо как-то ваш java-код вставить туда...

#33 Сake

Сake

    Активный участник

  • Модератоpы
  • 5 979 сообщений

Отправлено 15 Август 2014 - 00:41

Приведенный вами код отображает вложенные каталоги, на их основе реализовать не получится, так как заранее не известно имеются ли они, а так же вывод вложенных каталогов может быть скрыт, например если присутствуют товары в категории. Необходимо отталкиваться от каталога расположенного в меню навигации (шаблон "HTML"). Пожалуйста, сообщите какие категории у вас являются пустыми?

#34 User1

User1

    Пользователь

  • Пользователи
  • PipPip
  • 46 сообщений

Отправлено 15 Август 2014 - 17:37

Цитата

Необходимо отталкиваться от каталога расположенного в меню навигации (шаблон "HTML")
Да, но 99% пользователей не пользуются этим левым древовидным навигационным меню, большинство щёлкают по значкам категорий в правом блоке - если скрытие категорий в навигационном меню не скроет их иконки в правом блоке - тогда нет смысла всё  делать..

Ещё, в текущей реализации шаблона Техника невозможен одновременный показ под-категорий и товаров в категории (подкатегории скрываются) - у нас такого не бывает поэтому:
Категория является ПУСТОЙ и подлежит скрытию при выполнении следующих условий:
1) нет вложенных подкатегорий
2) нет товаров, либо есть но все они отсутствуют в наличии и не показываются (установлен флаг "Не показывать товар на сайте, если его нет в наличии")

#35 Сake

Сake

    Активный участник

  • Модератоpы
  • 5 979 сообщений

Отправлено 16 Август 2014 - 03:20

Попробуйте сделать следующее изменение - в шаблоне "Товары" найдите код


{% FOR nested_categories_list %}
   <li>
	  <a href="{nested_categories_list.URL}" title="Перейти к категории &laquo;{nested_categories_list.NAME}&raquo;" class="goods-cat-image-medium-square" style="background: url('{% IF nested_categories_list.IMAGE_EMPTY %}{ASSETS_IMAGES_PATH}no-photo-small.png{% ELSE %}{nested_categories_list.IMAGE_MEDIUM}{% ENDIF %}') no-repeat center center; background-size: contain;"></a>
	  <a class="category-name" href="{nested_categories_list.URL}" title="Перейти к категории &laquo;{nested_categories_list.NAME}&raquo;">{nested_categories_list.NAME}</a>
   </li>
{% ENDFOR %}


и замените его на


{% FOR nested_categories_list %}
  {% IF nested_categories_list.GOODS_COUNT >= 1 && nested_categories_list.HIDE != 1 %}
   <li>
	  <a href="{nested_categories_list.URL}" title="Перейти к категории &laquo;{nested_categories_list.NAME}&raquo;" class="goods-cat-image-medium-square" style="background: url('{% IF nested_categories_list.IMAGE_EMPTY %}{ASSETS_IMAGES_PATH}no-photo-small.png{% ELSE %}{nested_categories_list.IMAGE_MEDIUM}{% ENDIF %}') no-repeat center center; background-size: contain;"></a>
	  <a class="category-name" href="{nested_categories_list.URL}" title="Перейти к категории &laquo;{nested_categories_list.NAME}&raquo;">{nested_categories_list.NAME}</a>
   </li>
  {% ENDIF %}
{% ENDFOR %}



#36 User1

User1

    Пользователь

  • Пользователи
  • PipPip
  • 46 сообщений

Отправлено 17 Август 2014 - 01:42

Переводя на язык:
{% IF nested_categories_list.GOODS_COUNT >= 1 && nested_categories_list.HIDE != 1 %} // если есть товары и под-каталог не скрыт, то
<li>
// рисуем его
</li>

Данное условие не учитывает что в под-каталоге может быть под-под-каталог, а уже в нём наличествующий товар. Поскольку в под-каталоге нет товаров (только под-под-каталог) ваш код его не рисует и покупатель никогда не дойдёт до конца цепочки и не увидет наличествующий товар, что не радует. Нужна дополнительная проверка - если у под-категории есть под-под-категория то рисовать её в любом случае. Т.е. сокрытие должно работать только для концевых, последних по уровню категорий.

Определить есть ли у под-категории под-под-категория можно пробежавшись по массиву catalog_full - если найдётся у кого PARENT_ID = ID проверяемой подкатегории - значит у нее есть вложенные категории и рисовать ее надо. Эта задача требует вложенного цикла или доп. булевской переменной - но синтаксис языка такой возможности не предоставляет...

И еще обратите внимание что ссылка на картинку к категории (IMAGE_MEDIUM) передаётся только в массив "nested_categories_list", но не передаётся в "catalog" и "catalog_full" так что использовать эти массивы для отрисовки подкаталогов правого блока не удастся.

Так что либо на уровне платформы передавать в nested_categories_list еще одно поле "есть/нет детей" (т.е. расширить информативность этой структуры), либо на уровне языка разрешить вложенные циклы и временные переменные...

#37 Сake

Сake

    Активный участник

  • Модератоpы
  • 5 979 сообщений

Отправлено 19 Август 2014 - 05:30

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




Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных