Автор Тема: Как сделать пагинацию подкатегории  (Прочитано 129 раз)

28 Июль 2020, 00:28:32
  • Новичок
  • *
  • Сообщений: 16
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Доброго времени, уважаемые гуру Престашоп,

Понадобилось сделать листинг (пагинацию) подкатегорий на странице категорий.

Пример:
Родительская категория ПЛИТКА в ней много подкатегорий - коллекции плитки(4000+), сделал отображение подкатегорий по этому гайду и теперь если зайти в категорию плитка выводятся все подкатегории сразу, вот тут и возникает вопрос: Как сделать вывод допустим по 50 подкатегорий на 1 странице еще 50 на второй и т.д. (пагинацию подкатегорий, как это реализовано с товарами) ?

Помогите пожалуйста, а то уже который день не могу найти решение, что в принципе удивительно столько магазинов на престе и неужели ранее некому не нужен был такой функционал))

Prestashop 1.7.6.7 + стандартная тема
28 Июль 2020, 00:47:46
Ответ #1
  • Ветеран
  • *****
  • Сообщений: 21915
  • Репутация: +25297/-1
  • Prestashop - просто и эффективно
    • Просмотр профиля
Контролер Category придеться переопределять. За пример берите ProductSearchQuery
Эксперт Prestashop - решения всех проблем, написание модулей, создание тем для интернет-магазинов под Prestashop.
Эксперт Magento - создам сайт на Magento, программирование кастомных модулей для Magento, кастомизация тем Magento.
Лучшие цены!!!
28 Июль 2020, 01:15:19
Ответ #2
  • Новичок
  • *
  • Сообщений: 16
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Контролер Category придеться переопределять. За пример берите ProductSearchQuery

Спасибо за подсказку, буду пробовать ковырять)
02 Август 2020, 14:32:08
Ответ #3
  • Новичок
  • *
  • Сообщений: 16
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Что -то не получается у меня сделать пагинацию... удалось только ограничить количество выводимых категорий 5 шт.

Как и что дальше ковырять уже ума не приложу(фигово когда пхп не знаешь)

В /classes/Category.php

Было:
    public function getSubCategories($idLang, $active = true)
    {
        $sqlGroupsWhere = '';
        $sqlGroupsJoin = '';
        if (Group::isFeatureActive()) {
            $sqlGroupsJoin = 'LEFT JOIN `' . _DB_PREFIX_ . 'category_group` cg ON (cg.`id_category` = c.`id_category`)';
            $groups = FrontController::getCurrentCustomerGroups();
            $sqlGroupsWhere = 'AND cg.`id_group` ' . (count($groups) ? 'IN (' . implode(',', $groups) . ')' : '=' . (int) Configuration::get('PS_UNIDENTIFIED_GROUP'));
        }

        $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS('
SELECT c.*, cl.`id_lang`, cl.`name`, cl.`description`, cl.`link_rewrite`, cl.`meta_title`, cl.`meta_keywords`, cl.`meta_description`
FROM `' . _DB_PREFIX_ . 'category` c
' . Shop::addSqlAssociation('category', 'c') . '
LEFT JOIN `' . _DB_PREFIX_ . 'category_lang` cl ON (c.`id_category` = cl.`id_category` AND `id_lang` = ' . (int) $idLang . ' ' . Shop::addSqlRestrictionOnLang('cl') . ')
' . $sqlGroupsJoin . '
WHERE `id_parent` = ' . (int) $this->id . '
' . ($active ? 'AND `active` = 1' : '') . '
' . $sqlGroupsWhere . '
GROUP BY c.`id_category`
ORDER BY `level_depth` ASC, category_shop.`position` ASC');

        foreach ($result as &$row) {
            $row['id_image'] = Tools::file_exists_cache($this->image_dir . $row['id_category'] . '.jpg') ? (int) $row['id_category'] : Language::getIsoById($idLang) . '-default';
            $row['legend'] = 'no picture';
        }

        return $result;
    }


Стало:
public function getSubCategories($idLang, $active = true,$p = 1, $n = 5 )
    {
if (!$context)
        $context = Context::getContext();
if ($p < 1) $p = 1;

        $sqlGroupsWhere = '';
        $sqlGroupsJoin = '';
        if (Group::isFeatureActive()) {
            $sqlGroupsJoin = 'LEFT JOIN `' . _DB_PREFIX_ . 'category_group` cg ON (cg.`id_category` = c.`id_category`)';
            $groups = FrontController::getCurrentCustomerGroups();
            $sqlGroupsWhere = 'AND cg.`id_group` ' . (count($groups) ? 'IN (' . implode(',', $groups) . ')' : '=' . (int) Configuration::get('PS_UNIDENTIFIED_GROUP'));
        }

        $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS('
SELECT c.*, cl.`id_lang`, cl.`name`, cl.`description`, cl.`link_rewrite`, cl.`meta_title`, cl.`meta_keywords`, cl.`meta_description`
FROM `' . _DB_PREFIX_ . 'category` c
' . Shop::addSqlAssociation('category', 'c') . '
LEFT JOIN `' . _DB_PREFIX_ . 'category_lang` cl ON (c.`id_category` = cl.`id_category` AND `id_lang` = ' . (int) $idLang . ' ' . Shop::addSqlRestrictionOnLang('cl') . ')
' . $sqlGroupsJoin . '
WHERE `id_parent` = ' . (int) $this->id . '
' . ($active ? 'AND `active` = 1' : '') . '
' . $sqlGroupsWhere . '
GROUP BY c.`id_category`
ORDER BY `level_depth` ASC, category_shop.`position` ASC LIMIT '.(((int)$p - 1) * (int)$n).','.(int)$n);

        foreach ($result as &$row) {
            $row['id_image'] = Tools::file_exists_cache($this->image_dir . $row['id_category'] . '.jpg') ? (int) $row['id_category'] : Language::getIsoById($idLang) . '-default';
            $row['legend'] = 'no picture';
        }

        return $result;
    }

Подскажите пожалуйста, куда дальше копать?

Пробовал частично брать инфу по примеру этому гайду конкретно не понятно как наподобие этого гайда правильно переопределить CategoryController

03 Август 2020, 11:20:11
Ответ #4
  • Ветеран
  • *****
  • Сообщений: 1639
  • Репутация: +46/-1
  • Сообщество PrestaShop
    • Просмотр профиля
Переопределить контроллер
class CategoryController extends CategoryControllerCore
{
}
сохранить в папке /override/controllers/front/
Для пагинации еще нужен шаблон номеров страниц как /themes/classic/templates/_partials/pagination.tpl