Фильтр и пагинация товаров вне интернет магазина.

#
Фильтр и пагинация товаров вне интернет магазина.
Нужна страница "Новые товары" вида: https://site.ru/products_new   --> чтобы в ссылке не было прокладки на сам каталог пример: https://site.ru/catalog/products_new

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

Как правильнее реализовать, чтобы все работало?
#
Re: Фильтр и пагинация товаров вне интернет магазина.
Это у вас получается как посадочная страница. По этому в отдельном ТДС унаследовав контроллер магазина должны пере определить  паттерны. Для пагинации использовать лимит. Также для этого контроллера отдельный xls шаблон переделанная для пагинации.
E-mail: info@syrbek.ru / телега: @syrbek /skype: activexm / syrbek.ru / Поддержка сайтов / г. Москва [HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, Git, SVN, Redmine]
#
Re: Фильтр и пагинация товаров вне интернет магазина.
Seri,
Есть ли примеры такой реализации? Меня сбивает с толку слова: переопределить паттерны)
#
Re: Фильтр и пагинация товаров вне интернет магазина.
Паттерны примерно так:
$oShop = Core_Entity::factory('Shop', 1);

$Shop_Controller_Show = new Shop_Controller_Show($oShop);

$oStructure = Core_Page::instance()->structure;

$Shop_Controller_Show->patternExpressions = array(
    'page' => '\d+'
);

$Shop_Controller_Show->pattern = rawurldecode($oStructure->getPath()) . '(page-{page}/)';

$Core_Router_Route = new Core_Router_Route($Shop_Controller_Show->pattern, $Shop_Controller_Show->patternExpressions);
$matches = $Core_Router_Route->applyPattern(Core::$url['path']);

$Shop_Controller_Show->limit(Core_Array::get(Core_Page::instance()->libParams, 'itemsOnPage'));

if (isset($matches['page']) && $matches['page'] > 1)
{
    $Shop_Controller_Show
        ->page($matches['page'] - 1)
        ->offset($Shop_Controller_Show->limit * $Shop_Controller_Show->page);
}
if (!$matches)
{
    // ошибка 404
    Core_Page::instance()->error404();
    return $this;
}
E-mail: info@syrbek.ru / телега: @syrbek /skype: activexm / syrbek.ru / Поддержка сайтов / г. Москва [HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, Git, SVN, Redmine]
#
Re: Фильтр и пагинация товаров вне интернет магазина.
Seri,
Спасибо. То есть тут переопределяем ссылки как я понял. Мало знаком с внутренностями hostcms.

Получается мне нужно:

1. создать ТДС  
2. Переопределить ссылки. (Куда именно это писать? В настройки страницы? а в коде все оставить как в оригинальном ТДС интернет магазина?)
3. Про лимит пагинации тоже не понимаю пока и про отдельный xls шаблон.
Модератор
#
Re: Фильтр и пагинация товаров вне интернет магазина.
Savrid,
Контроллер разбирает путь на основании паттерна, стандартно в паттерн используется адрес структуры сайта, указанный для магазина. При публикации на сторонних страницах, паттер подменяется, как указал Seri выше. По сути он вам подготовил готовый код для настроек ТДС с обработкой пагинации.

В коде самой ТДС применяете ограничения и делаете показ, по сути там будет десяток строк.
#
Re: Фильтр и пагинация товаров вне интернет магазина.
hostcms,
Пока поставил в настройки ТДС данный код. Новинки выводятся через макет. Пагинация и фильтр пока на той же стадии. То есть не работают.
Подскажите, в коде ТДС применять ограничения к чему ? и показ чего?
#
Re: Фильтр и пагинация товаров вне интернет магазина.
Для подсчета найденных при фильтре. В закладке ТДС в настройках типовой динамической страницы,  должен присутствовать код:
// Быстрый фильтр
if (Core_Array::getRequest('fast_filter'))
{
   $aJson = array();

   if ($oShop->filter)
   {
      $Shop_Controller_Show->modificationsList(TRUE);

      // В корне выводим из всех групп
      $Shop_Controller_Show->group == 0 && $Shop_Controller_Show->group(FALSE);

      $aJson['count'] = $Shop_Controller_Show->getFastFilteredCount();
   }

   Core::showJson($aJson);
}

Для применение фильтра в закладке ТДС PHP код типовой динамической страницы.
if ($Shop_Controller_Show->item == 0)
{
   // Producers
   if (Core_Array::getGet('producer_id'))
   {
      $iProducerId = Core_Array::getGet('producer_id', 0, 'int');
      $Shop_Controller_Show->producer($iProducerId);
   }

   if (Core_Array::getGet('filter') || Core_Array::getGet('sorting'))
   {
      $Shop_Controller_Show->addEntity(
         Core::factory('Core_Xml_Entity')->name('filter')->value(1)
      );

      // Sorting
      $sorting = Core_Array::getGet('sorting', 0, 'int');

      ($sorting == 1 || $sorting == 2) && $Shop_Controller_Show->orderBy('absolute_price', $sorting == 1 ? 'ASC' : 'DESC');

      $sorting == 3 && $Shop_Controller_Show->orderBy('shop_items.name', 'ASC');

      $Shop_Controller_Show->addEntity(
         Core::factory('Core_Xml_Entity')->name('sorting')->value($sorting)
      );

      // Prices
      $Shop_Controller_Show->setFilterPricesConditions($_GET);

      // Additional properties
      $Shop_Controller_Show->setFilterPropertiesConditions($_GET);
   }
}
E-mail: info@syrbek.ru / телега: @syrbek /skype: activexm / syrbek.ru / Поддержка сайтов / г. Москва [HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, Git, SVN, Redmine]
#
Re: Фильтр и пагинация товаров вне интернет магазина.
По фильтру более подробно тут
https://www.hostcms.ru/documentation/modules/shop/fast-filter/
E-mail: info@syrbek.ru / телега: @syrbek /skype: activexm / syrbek.ru / Поддержка сайтов / г. Москва [HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, Git, SVN, Redmine]
#
Re: Фильтр и пагинация товаров вне интернет магазина.
Вернулся я к своему проектику. Не совсем понимаю как дописать этот десяток строк. По кусочкам разобрал уже код, который предоставил Seri. В документации нашел такое:

скриншот (https://ibb.co/M9sRbBT)

Я так понимаю надо как-то этот patternParams применить в коде ТДС ?
Авторизация