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


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

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


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


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

#21 badisoft

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

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

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

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

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

#22 badisoft

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

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

Отправлено 27 апреля 2016 - 18:02

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

Ну а $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);
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#23 Den

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

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

Отправлено 23 мая 2018 - 18:56

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

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

#24 badisoft

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

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

Отправлено 23 мая 2018 - 21:45

Цитата

не подскажете, из-за чего подобное могло случиться, куда копать?
Не могу подсказать.
По нажатию на кнопку делается 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.
Ну а дальше надо смотреть, на каком этапе теряются эти данные.
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#25 Den

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

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

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

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