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


Правила форума

Внимание!!! Если не можете скачать, пожалуйста ознакомьтесь с условиями получения доступа с файлам форума. Правила форума


[дополнение] показать еще XX товаров


Сообщений в теме: 24

#1 badisoft

    Продвинутый пользователь

  • Assistent vsupport.ru
  • PipPipPip
  • 5 075 сообщений
Репутация: 786
Мастер

Отправлено 17 июня 2015 - 22:38

Дополнение, подгружающее AJAX-ом товары в категории.
Внизу над навигатором появится кнопка "показать еще XX товаров".
При нажатии кнопки происходит то же самое, что и при нажатии на следующую страницу в навигаторе, но:
- без перезагрузки всей страницы
- новая "порция" товаров добавляется снизу к уже имеющимся

Прикрепленный файл  next_old.jpg   79,18К   60 Количество загрузок:
Прикрепленный файл  next_new.jpg   44,87К   59 Количество загрузок:

Установка:
==========

1. копируем файлы

loading.gif -> /data/[шаблон]/
next.php -> /core/includes/processor/
next.tpl.html -> /core/tpl/user/[шаблон]/
next_category.tpl.html -> /core/tpl/user/[шаблон]/


2. в файле index.php ищем

array( "captcha", "cart"


и добавляем в этот массив еще один вариант - "next"


3. в файле category.php перед

$smarty->assign( "main_content_template", "category.tpl.html");


вставляем

# BEGIN next
$smarty->assign( "callBackParam", $callBackParam);
$smarty->assign("next_start_count", min(CONF_PRODUCTS_PER_PAGE,$smarty->get_template_vars('products_to_showc')-CONF_PRODUCTS_PER_PAGE));
# END next



4. в файле category.tpl.html перед нижним навигатором вставляем

{* BEGIN next *}
{include file="next_category.tpl.html"}
{* END next *}

PS. пример работы - https://cpu.badisoft.ru/Devices/

PPS. Забыл. Необходим jquery. Но он обычно и так у всех есть.

Прикрепленные файлы

  • Прикрепленный файл  next.zip   18,81К   28 Количество загрузок:

http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#2 Den

    Продвинутый пользователь

  • Assistent vsupport.ru
  • PipPipPip
  • 117 сообщений
Репутация: 0
Начинающий

Отправлено 18 июня 2015 - 15:34

Отличный модуль, спасибо!
Было бы круто прикрутить сюда отдельный навигатор, чтобы, к примеру, после подгрузки товаров с каждой следующей страницы, в навигаторе ссылки на эти страницы становились неактивными. Пример - _http://rozetka.com.ua/notebooks/c80004/filter/

UPD:
В файле next_category.tpl.html есть условие показа кнопки:
{if !$smarty.get.offset && $products_to_showc > $smarty.const.CONF_PRODUCTS_PER_PAGE}
которое не выполняется когда установлен модуль ЧПУ. Если удалить из него
!$smarty.get.offset &&
То кнопка отображается и все работает. На что влияет этот !$smarty.get.offset, на отображение количества товаров на кнопке?

И еще вопросец, как сделать чтобы loading.gif всплывал рядом с кнопкой "показать.."?

#3 badisoft

    Продвинутый пользователь

  • Assistent vsupport.ru
  • PipPipPip
  • 5 075 сообщений
Репутация: 786
Мастер

Отправлено 18 июня 2015 - 18:27

Просмотр сообщенияDen сказал:

На что влияет этот !$smarty.get.offset, на отображение количества товаров на кнопке?
на показ кнопки только на первой странице, т.к. на второй и последующих совершенно не понятно, какие "еще XX товаров" показывать, ведь на второй и последующих страницах мы видим не начало отсортированного набора товаров, куда можно добавлять "следующие" товары соответственно сортировке, а часть набора товаров из середины.

Просмотр сообщенияDen сказал:

Было бы круто прикрутить сюда отдельный навигатор, чтобы, к примеру, после подгрузки товаров с каждой следующей страницы, в навигаторе ссылки на эти страницы становились неактивными
Идея интересная и просто реализуемая. Я подумаю, если будет нечего делать. Именно так сделано это дополнение :).

Просмотр сообщенияDen сказал:

И еще вопросец, как сделать чтобы loading.gif всплывал рядом с кнопкой "показать.."?
Тогда уж не рядом с кнопкой, а внутрь кнопки, рядом с написью, как сделано на розетке. Для этого надо будет прописывать кнопке на время подгрузки backgroung-image в виде анимированного гифа. Примерно так на розетке и сделано.
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#4 Dbus

    Продвинутый пользователь

  • Assistent vsupport.ru
  • PipPipPip
  • 1 114 сообщений
Репутация: 174
Мастер
  • ГородОдесса

Отправлено 18 июня 2015 - 23:54

badisoft, а в связке с твоим аякс-фильтром работает? :)
502 Bad Gateway

#5 Den

    Продвинутый пользователь

  • Assistent vsupport.ru
  • PipPipPip
  • 117 сообщений
Репутация: 0
Начинающий

Отправлено 19 июня 2015 - 08:58

Просмотр сообщенияDbus сказал:

badisoft, а в связке с твоим аякс-фильтром работает?
У себя опробовал - работает.

#6 badisoft

    Продвинутый пользователь

  • Assistent vsupport.ru
  • PipPipPip
  • 5 075 сообщений
Репутация: 786
Мастер

Отправлено 19 июня 2015 - 09:58

Просмотр сообщенияDbus сказал:

а в связке с твоим аякс-фильтром работает?
Ты имеешь в виду выдачу результата работы фильтра? Нет, не работает. В дополнении используется функция prdSearchProductByTemplate, т.е. ровно та же, что и при выдаче категории, нужно лишь подсунуть ей те же самые параметры - номер категории, сортировка, направление - и соответствующее смещение. А в фильтре совершенно другой способ получения контента. Т.е. сделать-то можно, но в текущем виде - не работает.
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#7 badisoft

    Продвинутый пользователь

  • Assistent vsupport.ru
  • PipPipPip
  • 5 075 сообщений
Репутация: 786
Мастер

Отправлено 22 июня 2015 - 21:26

Цитата

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

Цитата

Было бы круто прикрутить сюда отдельный навигатор, чтобы, к примеру, после подгрузки товаров с каждой следующей страницы, в навигаторе ссылки на эти страницы становились неактивными
Отдельный навигатор не надо, вполне делается поверх штатного. Только я сделал не как на розетке (кнопка страницы, содержимое которой уже подгружено становится серой), а чуть по другому - кнопка становится "активной". Т.е. для шаблона от 3.1.2 "жирной и без ссылки", а для шаблона от 3.1.3 "синей и без ссылки". Выглядит очень удобно, особенно на 3.1.3. Ну и после первого же нажатия "показать еще" пропадает кнопка "следующая страница" т.к. становится бессмысленной.
См. тестовый сайт, там есть выбор шаблонов, так что можно увидеть оба варианта.

Цитата

Тогда уж не рядом с кнопкой, а внутрь кнопки, рядом с написью, как сделано на розетке. Для этого надо будет прописывать кнопке на время подгрузки backgroung-image в виде анимированного гифа. Примерно так на розетке и сделано.
Сделал. Опять же, см. тестовый сайт.

Цитата

У себя опробовал - работает.
Оно работает на уровне "одно другому не мешает", не более того. Думаю, DBus имел в виду совсем другое "работает". :)

Цитата

которое не выполняется когда установлен модуль ЧПУ. Если удалить из него
... то на второй странице при нажатии на "показать еще" Вы получите содержимое второй страницы, т.е. дубль.
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#8 Den

    Продвинутый пользователь

  • Assistent vsupport.ru
  • PipPipPip
  • 117 сообщений
Репутация: 0
Начинающий

Отправлено 23 июня 2015 - 17:04

Просмотр сообщенияbadisoft сказал:

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

Цитата

Отдельный навигатор не надо, вполне делается поверх штатного. Только я сделал не как на розетке (кнопка страницы, содержимое которой уже подгружено становится серой), а чуть по другому - кнопка становится "активной"
Супер, теперь выглядит по-взрослому!

Просмотр сообщенияbadisoft сказал:

... то на второй странице при нажатии на "показать еще" Вы получите содержимое второй страницы, т.е. дубль.
еще и loading.gif не исчезает <_<

#9 Den

    Продвинутый пользователь

  • Assistent vsupport.ru
  • PipPipPip
  • 117 сообщений
Репутация: 0
Начинающий

Отправлено 14 июля 2015 - 13:55

Заметил, что при установленном ЧПУ от Трикивеба, у подгружаемых аяксом товаров, ссылка на подробное описание некорректная.
Для исправления добавил, по аналогии с модулем аякс-фильтра, в файл next.php 2 строки:
$data = db_query("SELECT categoryID, parent, uri FROM ".CATEGORIES_TABLE);
while ($row = db_fetch_assoc($data)) $fc[$row['categoryID']] = $row;


#10 SEOEngineer

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

  • Download User
  • PipPip
  • 10 сообщений
Репутация: 0
Начинающий

Отправлено 02 августа 2015 - 23:37

Супер модуль, спасибо badisoft

#11 badisoft

    Продвинутый пользователь

  • Assistent vsupport.ru
  • PipPipPip
  • 5 075 сообщений
Репутация: 786
Мастер

Отправлено 03 августа 2015 - 10:36

Просмотр сообщенияSEOEngineer сказал:

Показывает вот такую ошибку, подскажите в чем беда и как исправить
Ошибка при выполнении AJAX-запроса. Более по данному окну ничего сказать нельзя.
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#12 Robby

    Продвинутый пользователь

  • Assistent vsupport.ru
  • PipPipPip
  • 162 сообщений
Репутация: 75
Продвинутый

Отправлено 23 апреля 2016 - 17:41

Для версии 3.1.3 или шаблона на Bootstap содержание next.tpl.html должно быть таким:
<div class="row">
  {section name=u loop=$products_to_show}
  <div class="col-xs-{math equation="x/y" x=12 y=$smarty.const.CONF_COLUMNS_PER_PAGE}">
	{include file="product_brief.tpl.html" product_info=$products_to_show[u]}
  </div>
  {if $products_to_show|@count > ($smarty.section.u.index+1)}{if ($smarty.section.u.index+1) is div by $smarty.const.CONF_COLUMNS_PER_PAGE}
	  </div>
	  <div class="row">
		<div class="col-xs-12">
		  <hr>
		</div>
	  </div>
	  <div class="row">
		{/if}{/if}
  {/section}
</div>
<hr>

Для отображения кнопки на всех страницах, кроме последней содержимое файла next_category.tpl.html должно быть обернуто в условие
{if !$smarty.get.offset && !$smarty.get.show_all || $smarty.get.offset && $products_to_showc - $smarty.get.offset > $smarty.const.CONF_PRODUCTS_PER_PAGE}
// тут часть кода из файла next_category.tpl.html
{/if}
Но тут появятся пара проблем...

Пример вариантов кнопок c анимацией на Bootstrap, чтобы не использовать анимационный loading.gif:
			<button class="btn btn-primary btn-lg"><i class="fa fa-circle-o-notch fa-spin"></i> Loading</button>
			<button class="btn btn-primary btn-lg"><i class="fa fa-refresh fa-spin"></i> Loading</button>
			<button class="btn btn-primary btn-lg"><i class="fa fa-spinner fa-spin"></i> Loading</button>



badisoft, не поделитесь окончательным вариантом как у вас на сайте?

#13 badisoft

    Продвинутый пользователь

  • Assistent vsupport.ru
  • PipPipPip
  • 5 075 сообщений
Репутация: 786
Мастер

Отправлено 24 апреля 2016 - 18:25

Просмотр сообщенияRobby сказал:

badisoft, не поделитесь окончательным вариантом как у вас на сайте?
Окончательный вариант "как на сайте" на этом же сайте и продается за10$ - http://badisoft.ru/s...XX-tovarov.html
При такой цене не вижу надобности его выкладывать в бесплатный доступ.

Для шаблона 3.1.3 там другие:
файл next.tpl.html
файл next_category.tpl.html
функции ShowNavigator и ShowNavigatormd (несколько модифицированы).
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#14 Robby

    Продвинутый пользователь

  • Assistent vsupport.ru
  • PipPipPip
  • 162 сообщений
Репутация: 75
Продвинутый

Отправлено 24 апреля 2016 - 20:01

Просмотр сообщенияbadisoft сказал:

При такой цене не вижу надобности его выкладывать в бесплатный доступ.
Конечно, цена в 10$ может казаться низкой для того кто получает в месяц, например 4000$. Но мы живем в стране где зарплата ниже 200$ и если умножить 10$ на курс гривны или рубля, то получается совсем не маленькая цена. Но выкладывать или нет это ваше право, поэтому умолкаю... :)
Теперь по теме:
в модуле есть пара недоработок
1. Кол-во оставшегося товара для показа на кнопке берется из переменной $next_start_count. Но для предпоследней страницы это значение может быть меньше. Если перейти на на предпоследнюю страницу в навигаторе и при этом кол-во товаров не делиться без остатка на кол-во товаров, то число на кнопке показать еще ... товаров будет неправильным.
2. После вывода товаров кнопка остается с эффектом hover.
3. И еще дин интересный глюк описывать долго, покажу на пример вашего сайта:
перейдите по ссылке http://badisoft.ru/shopcms/modules/10/ нажмите кнопку показать показать еще ... товаров, после загрузки товаров кнопка должна исчезнуть так как будет выведена последняя страница с товарами, но она останется с надписью показать еще 1 товар. Если ее нажать будет загружен еще один пустой блок. Возможно это из-за товаров дополнительных категорий? Кол-во товаров в категории из переменной $products_to_showc не соответствует реальному кол-во товара в конкретной категории,

#15 badisoft

    Продвинутый пользователь

  • Assistent vsupport.ru
  • PipPipPip
  • 5 075 сообщений
Репутация: 786
Мастер

Отправлено 24 апреля 2016 - 20:39

Цитата

Конечно, цена в 10$ может казаться низкой для того кто получает в месяц, например 4000$. Но мы живем в стране где зарплата ниже 200$ и если умножить 10$ на курс гривны или рубля, то получается совсем не маленькая цена.
Получается на сегодня 600+ рублей. Т.е. стоимость поллитры хорошей водки или литра плохой.
Извините, но если пользователя коммерческой CMS пугает стоимость нужного модуля в бутылку водки/килограмм колбасы - он явно занимается не своим делом.
Мне смешны сказки о том, что 10$ это офигенная сумма для работника IT-сферы.
Тем более, если платит заказчик либо это свой магазин/бизнес.

У меня постоянно покупают модули в этом магазинчике. На этой неделе не было дня без продаж, хотя обычно реже. И давно сложилась уверенность, что если для покупателя ShopCMS это действительно инструмент бизнеса, а не "для подрочить" (уж извините), то покупатель о суммах уровня 1-2-4-8 тысяч рублей даже не задумывается.

Цитата

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

Цитата

Возможно это из-за товаров дополнительных категорий?
Да, действительно, грузится пустой блок. Из-за чего - не знаю. Записал в todo, но врядли стану исправлять до покупки модуля (тут уж никуда не денешься) либо до наличия свободного времени (что маловероятно, т.к. трачу свободное на универсальный модуль обмена с 1С).

PS. Модуль ни разу не сложен, иначе и цена была бы не 10$. Напишите сами, уж для Вас-то это врядли проблема. Тем более, что основа уже выложена в теме а остальное - украшательство и обвязка.
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#16 Robby

    Продвинутый пользователь

  • Assistent vsupport.ru
  • PipPipPip
  • 162 сообщений
Репутация: 75
Продвинутый

Отправлено 24 апреля 2016 - 21:48

Проблема с лишним выводом наблюдается на категориях которые имеют подкатегории. Предположение, что передается offset по которому функция возвращает пустой массив $products -> $products_to_show

#17 Robby

    Продвинутый пользователь

  • Assistent vsupport.ru
  • PipPipPip
  • 162 сообщений
Репутация: 75
Продвинутый

Отправлено 25 апреля 2016 - 13:25

badisoft,
Еще в аякс выводе отсутствует кнопка "В папку сравнения".

Что-то не могу понять куда пропадают товары из категории. Например есть основная категория в ней 25 товаров, есть подкатегория в которой 16 товаров. Всего получается 41 товар. В админке доступен 41 товар (25 в основной категории + 16 в подкатегории), в пользовательской части кол-во товаров в категории пишет тоже 41 - тут все правильно. Теперь начинается самое интересное - нажимаем показать все и получаем вывод из 32 товаров. В постраничном выводе тоже 32 товара, Вопрос - где остальное? Из-за этого и пустые блоки в аякс выводе.Должно быть: 41 товар (переменная смарти $products_to_showc = 41), на выходе имеем 6 страниц, на шестой 2 товара, товаров на страницу 6. Смещение offset=30. Что получается? Шестая страница умножить на 6 = 36. 36<41. В результате отображается кнопка показать еще 5 товаров. Всего должно быть 41 товар, а показано 32, 9 товаров где-то потеряны.

#18 badisoft

    Продвинутый пользователь

  • Assistent vsupport.ru
  • PipPipPip
  • 5 075 сообщений
Репутация: 786
Мастер

Отправлено 25 апреля 2016 - 16:14

Просмотр сообщенияRobby сказал:

Еще в аякс выводе отсутствует кнопка "В папку сравнения".
next.php (вторая и третья строки кода - новые)
$products = prdSearchProductByTemplate($callBackParam, $count_row, $navigatorParams);
$category = catGetCategoryById($callBackParam['categoryID']);
foreach ($products as $key => $val) $products[$key]["allow_products_comparison"] = $category["allow_products_comparison"];


http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#19 badisoft

    Продвинутый пользователь

  • Assistent vsupport.ru
  • PipPipPip
  • 5 075 сообщений
Репутация: 786
Мастер

Отправлено 25 апреля 2016 - 17:17

Просмотр сообщенияRobby сказал:

Что-то не могу понять куда пропадают товары из категории. Например есть основная категория в ней 25 товаров, есть подкатегория в которой 16 товаров. Всего получается 41 товар. В админке доступен 41 товар (25 в основной категории + 16 в подкатегории), в пользовательской части кол-во товаров в категории пишет тоже 41 - тут все правильно. Теперь начинается самое интересное - нажимаем показать все и получаем вывод из 32 товаров. В постраничном выводе тоже 32 товара, Вопрос - где остальное?
1. категориия ААА имеет две подкатегории - BBB и CCC.
2. товар А имеет две дополнительных категории BBB и CCC.
3. если показать содержимое категории ААА с подкатегориями, то товаров будет на один меньше, чем суммарно по категориям.
В выборке не будет двух товаров А, который есть и в BBB, и в CCC, а будет только один.

Скорее всего, именно это момент как-то завязан на непоказ "хвоста". Когда я писал модуль, мне эта тонкость в голову не пришла.
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#20 Robby

    Продвинутый пользователь

  • Assistent vsupport.ru
  • PipPipPip
  • 162 сообщений
Репутация: 75
Продвинутый

Отправлено 25 апреля 2016 - 19:22

Просмотр сообщенияbadisoft сказал:

В выборке не будет двух товаров А, который есть и в BBB, и в CCC, а будет только один.
Да все похоже так и есть. В некоторых категориях проблем с выводом нет. Значит в выводе исключается повтор товаров.

Переменная $count в category.php вроде как содержит правильное кол-во товара для вывода. Нужно ее использовать вместо $products_to_showc.
Проверил, теперь все правильно выводиться. Переменную нужно сделать доступной из шаблона
$smarty->assign("count", $count);