Тема: Дата изменения товара

Здравствуйте!

Подскажите как можно отфильтровать (отсортировать) по дате изменения
Т.е.
Необходимо следующее:
После обмена с 1С, товары вновь созданные, которых ещё не было и товары у которых произошли изменения (цена) необходима возможность на сайте выводить эти товары в отдельный блок. Например "Новые поступления", как это сделать?

Повысить оценку Понизить оценку

Re: Дата изменения товара

Решается просто.  В моделе надо навесить обработку события на сохранение товара и на окончание импорта 1с (чтобы раскидать по спецкатегориям, например).

  function init()
    {
        $this
            
            ->bind('exchange.gate.afterimport.all')//событие после импорта 1c
            ->bind('orm.beforewrite.catalog-product');//перехватываем сохранение товара
                           
    }
       

Пример для простановки даты создания товара. Аналогично тут можно сравнить старую и новую цену и сделать еще что-либо

public static function ormBeforewriteCatalogProduct(array $params, \RS\Event\Event $event)
    {
        if ($params['flag'] == \RS\Orm\AbstractObject::INSERT_FLAG) { //Если это добавление товара
            /**
            * Получаем из параметра ORM объект
            * @var \Catalog\Model\Orm\Product
            */
             $product = $params['orm'];
             if (!isset($product->dateof)) $product->dateof=date('Y-m-d H:i:s') ;
                         
           }
    }    

Вот пример того, как раскидать товары по спецкатегориям:

 
     public static function exchangeGateAfterimportAll()

    {  
        $router = \RS\Router\Manager::obj();
       
    
         if (\Setup::$INSTALLED) {
           $config = \RS\Config\Loader::byModule('users');
            $new_days  = 20;//$config['new_days']; пусть будет 20 дней
            $dir_new=2;//id спецкатегории "новинки"
    
             ///добавляем товары в спецкатегории
               //удалим связи с новинками 
              \RS\Orm\Request::make()
                    ->delete()              
                    ->from(new \Catalog\Model\Orm\Xdir()) 
                    ->where("dir_id in (".$dir_new.")")
                    ->exec();

             $xdir_table =  \RS\Orm\Tools::getTable( new \Catalog\Model\Orm\Xdir() ); 
                      $product_table = \RS\Orm\Tools::getTable( new \Catalog\Model\Orm\Product() );
            

                      \RS\Db\Adapter::sqlExec( "INSERT IGNORE INTO {$xdir_table} (product_id, dir_id) SELECT wp.id,{$dir_new} FROM {$product_table} wp WHERE  TO_DAYS(NOW()) - TO_DAYS(wp.dateof) <= ".$new_days);
             
         
                                    
            
        }
      
    }

3

Re: Дата изменения товара

Ярослав пишет:

Решается просто.  В моделе надо навесить обработку события на сохранение товара и на окончание импорта 1с (чтобы раскидать по спецкатегориям, например).

  function init()
    {
        $this
            
            ->bind('exchange.gate.afterimport.all')//событие после импорта 1c
            ->bind('orm.beforewrite.catalog-product');//перехватываем сохранение товара
                           
    }
       

Пример для простановки даты создания товара. Аналогично тут можно сравнить старую и новую цену и сделать еще что-либо

public static function ormBeforewriteCatalogProduct(array $params, \RS\Event\Event $event)
    {
        if ($params['flag'] == \RS\Orm\AbstractObject::INSERT_FLAG) { //Если это добавление товара
            /**
            * Получаем из параметра ORM объект
            * @var \Catalog\Model\Orm\Product
            */
             $product = $params['orm'];
             if (!isset($product->dateof)) $product->dateof=date('Y-m-d H:i:s') ;
                         
           }
    }    

Вот пример того, как раскидать товары по спецкатегориям:

 
     public static function exchangeGateAfterimportAll()

    {  
        $router = \RS\Router\Manager::obj();
       
    
         if (\Setup::$INSTALLED) {
           $config = \RS\Config\Loader::byModule('users');
            $new_days  = 20;//$config['new_days']; пусть будет 20 дней
            $dir_new=2;//id спецкатегории "новинки"
    
             ///добавляем товары в спецкатегории
               //удалим связи с новинками 
              \RS\Orm\Request::make()
                    ->delete()              
                    ->from(new \Catalog\Model\Orm\Xdir()) 
                    ->where("dir_id in (".$dir_new.")")
                    ->exec();

             $xdir_table =  \RS\Orm\Tools::getTable( new \Catalog\Model\Orm\Xdir() ); 
                      $product_table = \RS\Orm\Tools::getTable( new \Catalog\Model\Orm\Product() );
            

                      \RS\Db\Adapter::sqlExec( "INSERT IGNORE INTO {$xdir_table} (product_id, dir_id) SELECT wp.id,{$dir_new} FROM {$product_table} wp WHERE  TO_DAYS(NOW()) - TO_DAYS(wp.dateof) <= ".$new_days);
             
         
                                    
            
        }
      
    }

У нас сайт в облаке. Получается нельзя?

Повысить оценку Понизить оценку

Re: Дата изменения товара

Попробуйте со стороны 1с сделать доработку.

5

Re: Дата изменения товара

Ярослав пишет:

Попробуйте со стороны 1с сделать доработку.

Мы думали сделать через характеристики, но это как говорится "костыль"

Повысить оценку Понизить оценку

6

Re: Дата изменения товара

Ярослав пишет:

Попробуйте со стороны 1с сделать доработку.

Подскажите если сделать характеристику с типом дата и название "Дата поступления". можно ли импортировать в поле "Дата поступления" на сайте?

Повысить оценку Понизить оценку

Re: Дата изменения товара

Андрей пишет:
Ярослав пишет:

Попробуйте со стороны 1с сделать доработку.

Подскажите если сделать характеристику с типом дата и название "Дата поступления". можно ли импортировать в поле "Дата поступления" на сайте?

Можно добавить такое свойство в 1С и дополнительным модулем перед записью объекта товара, записывать в нужное Вам поле из характеристики.