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


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


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

#21 badisoft

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

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

Отправлено 26 April 2016 - 11:03 AM

Переменная $count в category.php вроде как содержит правильное кол-во товара для вывода.

Там какая-то ОЧЕНЬ странная логика, либо я не очень понял ее (логику).
$count вычисляется в функции prdSearchProductByTemplate, причем довольно интересно.
Если существует $callBackParam["extraParametrsTemplate"], т.е. функция вызвана из фильтра, то в $count будет количество товара на текущей странице. А если не существует, т.е. вызов функции произошел, например, из категории, то будет полное число товаров категории.
См. самый конец функции prdSearchProductByTemplate.
Переменная $count_row это и есть $count в category.php, она по ссылке передается последовательно через две функции.
Ну а $products_to_showc всегда содержит именно количество товаров на странице.
Другими словами, $count и $products_to_showc содержат принципиально разные величины если страниц больше одной.
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#22 badisoft

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

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

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

Ну а $products_to_showc всегда содержит именно количество товаров на странице. Другими словами, $count и $products_to_showc содержат принципиально разные величины если страниц больше одной.

Это не совсем верно, как оказалось.
Вариантов расчета $products_to_showc в category.php три:
1. для расширенного поиска он берется как count($products), т.е. число товаров на странице. И потому тоже равен $count.
2. для обычного вывода категории с подкатегориями как $category["products_count"], т.е. полное количество товара в категории с подкатегориями.
3. для обычного вывода без подкатегорий как catGetCategoryProductCount( $categoryID, true), т.е. число товаров в категории без подкатегорий.

И вот в (2) ошибка и кроется! Элемент $category["products_count"] (т.е. исходно поле product_count таблицы CATEGORIES_TABLE) содержит сумму товаров в своей категории и дочерних. Если какой-либо товар путем использования доп.категорий дублируется в этой иерархии категорий (основная категория и дополнительная или просто две дополнительные), то количество товаров в родительской категории с подкатегориями будет меньше, чем сумма товаров по всей иерархии категорий.

Короче, таки да, еще одна штатная ошибка shopCMS. Исправление:

# BEGIN если товар ПОВТОРЯЕТСЯ за счет доп.категорий, то содержимое $category["products_count"] будет некорректным.
#$smarty->assign( "products_to_showc", $category["products_count"]);
$smarty->assign( "products_to_showc", $count);
# END если товар ПОВТОРЯЕТСЯ за счет доп.категорий, то содержимое $category["products_count"] будет некорректным.

В принципе, как уже выше было написано Robby, можно весь этот if else if else заменить на $smarty->assign( "products_to_showc", $count);
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#23 Den

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

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

Отправлено 23 May 2018 - 06:56 PM

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

badisoft, не подскажете, из-за чего подобное могло случиться, куда копать? Модификации вносились неоднократно, а заметили ошибку только сейчас...
  • 0

#24 badisoft

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

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

Отправлено 23 May 2018 - 09:45 PM

не подскажете, из-за чего подобное могло случиться, куда копать?

Не могу подсказать.
По нажатию на кнопку делается AJAX-запрос следующего (еще двадцать, точнее еще CONF_PRODUCTS_PER_PAGE) набора данных.
Этот набор данных отдает файл next.php.
Основной код в модуле:

$navigatorParams["CountRowOnPage"] = CONF_PRODUCTS_PER_PAGE;
foreach ($_POST as $key => $val)
{
if ($key == 'offset') $navigatorParams['offset'] = $val;
else $callBackParam[$key] = $val;
}
$products = prdSearchProductByTemplate($callBackParam, $count_row, $navigatorParams);

Т.е. количество товаров берется из константы, а смещение выборки товаров - из $_POST['offset'].
Для получения выборки используется штатная функция prdSearchProductByTemplate.
Ну а дальше надо смотреть, на каком этапе теряются эти данные.
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#25 Den

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

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

Отправлено 24 May 2018 - 11:32 AM

badisoft, спасибо за наводку, функция prdSearchProductByTemplate была виновата
Спойлер

  • 0