productSave как с ним работают?

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


Пишу такую конструкцию, но она в моем плагине не срабатывает, при сохранении товара зависает, причем зависает на строчке я так понял 

$product->save();

(по идеи, данный код должен сохранять название товара с id 10, при сохранении любого товара из доступных):

public function productSave(&$params)
{
$product = new shopProduct(10);
$product['name'] = 'Супер товар';
$product->save();
}

В плагине plugin.php: 

'handlers' => array(
'product_save' => 'productSave',
),

Спасибо за помощь!

3 ответа

  • 1
    Алексей Webasyst 18 ноября 2019 23:07 #

    Начните с простого, описания того что вы хотите сделать.
    В $params вам передаются значения товара, который уже сохраняется, поэтому внутри него точно не нужно создавать второй экземпляр и делать рекурсию сохранения.

    • +1
      Ram Ram 19 ноября 2019 00:45 #

      То что туда идут значения текущего товара это я знаю, вопрос заключается как сохранить другой товар, при сохранении текущего.

      Ну и второй вариант как сохранить текущий товар и присвоить ему значения.

      • +1
        Алексей Алексей Webasyst 19 ноября 2019 14:39 #

        Как минимум добавить проверку что текущий товар не 10.

        • +1
          Ram Ram 19 ноября 2019 17:28 #

          То есть в том же товаре нельзя его же и сохранить?

          Ну и на второй вопрос так и не понял как просто поменять название текущего товара, что использовать?

          • +1
            Eugen Nichikov Eugen Nichikov 19 ноября 2019 19:29 #

            Нет.

            $pm = new shopProductModel();
            $pm->updateById(10, array(
                'name' => 'Супер товар'
            ));
            • +1
              Ram Ram 20 ноября 2019 00:19 #

              Да так работает.

              А это не работает потому-что цикл бесконечный становится сохранения?

              $product = new shopProduct(10); $product['name'] = 'Супер товар'; $product->save();
              
  • 1
    Ram 20 ноября 2019 00:30 #

    вопрос 1.

    public function productSave(&$params)

    срабатывает после сохранения товара или перед?

    В смысле например, если при редактировании товара, я поменяю значение "поле1", а потом сохраню, а в 

    public function productSave(&$params) { 
    поставлю "поле1"="другое значение"
    }

    я так понял поле будет

    "поле1"="другое значение"

    вопрос 2.

    public function productSave(&$params)
    как работать с изменением текущего товара в этой конструкции?
    $product = new shopProduct(10); $product['name'] = 'Супер товар';
    $product->save(); - не работает я так понял
    
    Как сохранять товар после сохранения в админке?

    • +1
      Александр Тарасенко Александр Тарасенко 20 ноября 2019 07:00 #

      На самом деле все логично, метод $product->save() вызывает хук product_save, соотвественно делая такое сохранение в хуке вы получаете бесконечную рекурсию, тут или воспользуйтесь моделью shopProductModel или используйте другой хук возможно вам более подойдет хук product_presave 

      • +1
        Ram Ram 20 ноября 2019 08:36 #

        Спасибо за ответ.

        в документации есть

        $params['instance'] - как им можно пользоваться?

        На 1 вопрос пока ответа нета. Так как же работает

        productSave

        после сохранения товара или перед?

        Я к тому что можно ли сделать проверку на то что вбил в товар после сохранения? (в product_save)

        • +1
          Александр Тарасенко Александр Тарасенко 20 ноября 2019 13:47 #

          Хук вызывается после сохранения товара,  product_presave - перед

          $params['instance'] - это клас shopProduct сохраняемого товара

          Еще раз посмотрите в сторону product_presave - в нем вы можете менять данные до сохранения товара

  • 1
    Ram 20 ноября 2019 15:03 #

    Ок спасибо за ответ разобрался.

    Еще одна проблема то что когда мы обновляем значение товара с помощью в  

    public function productSave(&$params) { $pm->updateById ... }
    

    Само поле обновляется, но когда в бекэнде нажимаем сохранить это не происходит, нужно рефреш делать, то есть новое значение сразу не подгружается. Это можно как то исправить?

Добавить ответ

Чтобы добавить комментарий, зарегистрируйтесь или войдите