Как изменить кол-во товаров странице для конкретной категории

Я использую отдельное отображение для некоторых категорий со своим шаблоном и думал что если я задам в шаблоне параметр {$settings.Appearance.products_per_page = 50} то это повлияет на кол-во отображаемых товаров, но это не так. как я могу изменить для своего шаблона это ?

почистите кэш шаблонов, например добавив в url
&ctpl

{$settings.Appearance.products_per_page|fn_print_r}
{$settings.Appearance.products_per_page = 50}
{$settings.Appearance.products_per_page|fn_print_r}

выводит
image

значение меняется, если смотреть так, но на кол-во отображаемых товаров, к сожалению, это не влияет…
для наглядности я вывел один товар и ничего не изменилось… Screenshot by Lightshot

Lightshot недоступен у меня.

Это потому что расчет и выборка товаров ведется не в шаблоне, а в контроллере. То есть по хорошему надо в категорию добавить поле, чтобы заполнять его в настройках категории, а в своем pre-контроллере смотреть, если значение поля для текущей категории указано, то подменять

1 лайк

я надеялся, что есть возможность проще сделать это) понял, спасибо

Есть платный модуль, в котором можно настраивать для категорий количество выводимых товаров и сортировку.

Может сможете помочь/подсказать как исправить ситуацию)
добился я того чего хотел через пре контроллер

if (!defined('BOOTSTRAP')) { die('Access denied'); }

if ($mode == 'view' && !empty($_REQUEST['category_id'])) {
    $category_id = $_REQUEST['category_id'];
    $is_child = isChildOfCategory($category_id, 269);
    
    if ($is_child) {
        $total_products = getTotalProductsInCategory($category_id);
        $_REQUEST['items_per_page'] = $total_products > 0 ? $total_products : 1;
    } else {
        $_REQUEST['items_per_page'] = '';
    }
}

function isChildOfCategory($category_id, $parent_category_id) {
    $id_path = db_get_field('SELECT id_path FROM ?:categories WHERE category_id = ?i', $category_id);
    $path_ids = explode('/', $id_path);
    return in_array($parent_category_id, $path_ids);
}

function getTotalProductsInCategory($category_id) {
    $total_products = db_get_field("SELECT COUNT(*) FROM ?:products_categories 
                                    JOIN ?:products ON ?:products_categories.product_id = ?:products.product_id 
                                    WHERE ?:products_categories.category_id = ?i AND ?:products.status = 'A'", $category_id);
    return $total_products;
}

но теперь я не могу в других категориях переключить кол-во отоборажаемых товаров в поле сортировки… там остается только то значение которое установлено в настройках и не переключается… как это можно исправить подскажите ?

Настройки - внешний вид, попробуйте отметить чекбокс “Использовать выбранное отображение только для текущей категории или страницы поиска:”

он уже был отмечен ранее…

Попозже посмотрю в коде, сейчас не могу, наверное в сессию пишется.

1 лайк

Здесь напишите так

    if ($is_child) {
        $total_products = getTotalProductsInCategory($category_id);
        if ($total_products > 0) {
            $_REQUEST['items_per_page'] = $total_products;
        }
    } 

И видимо нужен еще post контроллер, чтобы вернуть значение обратно (включая сессию)

Заменил в этом условии $_REQUEST[‘items_per_page’] на $_SESSION[‘items_per_page’] и ситуация улучшилась) теперь могу в категории переключать кол-во отображаемых товаров… Спасибо за внимание и потраченное время )