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


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


  • Вы не можете ответить в тему
Сообщений в теме: 24

#1 badisoft

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

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

Отправлено 17 June 2015 - 10:38 PM

Дополнение, подгружающее 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К   30 Количество загрузок:

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

#2 Den

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

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

Отправлено 18 June 2015 - 03:34 PM

Отличный модуль, спасибо!
Было бы круто прикрутить сюда отдельный навигатор, чтобы, к примеру, после подгрузки товаров с каждой следующей страницы, в навигаторе ссылки на эти страницы становились неактивными. Пример - _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 всплывал рядом с кнопкой "показать.."?
  • 0

#3 badisoft

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

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

Отправлено 18 June 2015 - 06:27 PM

На что влияет этот !$smarty.get.offset, на отображение количества товаров на кнопке?

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

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

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

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

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

#4 Dbus

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

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

Отправлено 18 June 2015 - 11:54 PM

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

#5 Den

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

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

Отправлено 19 June 2015 - 08:58 AM

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

У себя опробовал - работает.
  • 0

#6 badisoft

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

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

Отправлено 19 June 2015 - 09:58 AM

а в связке с твоим аякс-фильтром работает?

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

#7 badisoft

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

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

Отправлено 22 June 2015 - 09:26 PM

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

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

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

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

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

Сделал. Опять же, см. тестовый сайт.

У себя опробовал - работает.

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

которое не выполняется когда установлен модуль ЧПУ. Если удалить из него

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

#8 Den

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

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

Отправлено 23 June 2015 - 05:04 PM

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

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

Супер, теперь выглядит по-взрослому!

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

еще и loading.gif не исчезает <_<
  • 0

#9 Den

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

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

Отправлено 14 July 2015 - 01:55 PM

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

  • 0

#10 SEOEngineer

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

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

Отправлено 02 August 2015 - 11:37 PM

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

#11 badisoft

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

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

Отправлено 03 August 2015 - 10:36 AM

Показывает вот такую ошибку, подскажите в чем беда и как исправить

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

#12 Robby

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

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

Отправлено 23 April 2016 - 05:41 PM

Для версии 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, не поделитесь окончательным вариантом как у вас на сайте?
  • 0

#13 badisoft

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

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

Отправлено 24 April 2016 - 06:25 PM

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

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

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

#14 Robby

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

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

Отправлено 24 April 2016 - 08:01 PM

При такой цене не вижу надобности его выкладывать в бесплатный доступ.

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

#15 badisoft

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

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

Отправлено 24 April 2016 - 08:39 PM

Конечно, цена в 10$ может казаться низкой для того кто получает в месяц, например 4000$. Но мы живем в стране где зарплата ниже 200$ и если умножить 10$ на курс гривны или рубля, то получается совсем не маленькая цена.

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

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

в модуле есть пара недоработок

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

Возможно это из-за товаров дополнительных категорий?

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

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

#16 Robby

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

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

Отправлено 24 April 2016 - 09:48 PM

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

#17 Robby

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

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

Отправлено 25 April 2016 - 01:25 PM

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 товаров где-то потеряны.
  • 0

#18 badisoft

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

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

Отправлено 25 April 2016 - 04:14 PM

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

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"];

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

#19 badisoft

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

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

Отправлено 25 April 2016 - 05:17 PM

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

1. категориия ААА имеет две подкатегории - BBB и CCC.
2. товар А имеет две дополнительных категории BBB и CCC.
3. если показать содержимое категории ААА с подкатегориями, то товаров будет на один меньше, чем суммарно по категориям.
В выборке не будет двух товаров А, который есть и в BBB, и в CCC, а будет только один.

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

#20 Robby

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

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

Отправлено 25 April 2016 - 07:22 PM

В выборке не будет двух товаров А, который есть и в BBB, и в CCC, а будет только один.

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

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

  • 0