Ошибка использования shopFeatureModel

Я разрабатываю свой плагин для приложения shop

в файле install.php я хочу создать новый тип товара и добавить для него свои кастомные характеристики
У меня вазникает циклическая ошибка при вызове модели shopFeatureModel

$shopFeatureModel = new shopFeatureModel();

Я получаю ошибку

Warning: Invalid argument supplied for foreach() in D:\OSPanel\domains\webasyst.loc\wa-system\database\waDbMysqliAdapter.class.php on line 436

причем она сыпется очень много раз, и просто на странице в админке и в логах, при этом блокируя работу всего фреймворка

Что я делаю не правильно, возможно нужны какие то параметры при создании объекта модели, или есть ограничения при вызове его из файла install.php плагина. 

Полный код файла install.php

<?php
try {
    $type_id   = 0;
    $type_name = 'Товары натали';
    $plugin_id = 'natali';

    $plugin        = wa('shop')--->getPlugin('natali');
    $shopTypeModel = new shopTypeModel();
    $type          = $shopTypeModel->getByName($type_name);

    // Создаем новый тип товара
    if (!$type) {

        $data = array(
            'name'     => $type_name,
            'icon_url' => 'https://promo.natali37.ru/app/uploads/2022/09/Icon-16-round.png',
        );

        $type_id            = $shopTypeModel->insert($data);
        $settings['typeId'] = $type_id;
        $plugin->saveSettings($settings);
    }

    $shopFeatureModel = new shopFeatureModel();

} catch (waException $e) {

}

7 ответов

  • 1
    Михаил Ушенин 27 сентября 2022 16:18 #

    В версии Shop-Script 9.2.2 не удаётся получить такой результат. Попробуйте поотлаживать код в том месте, где возникает ошибка (посмотрите стек вызовов функций и методов), чтобы точно убедиться, что проблема связана именно с данным, а не каким-то другим плагином.

    • +1
      Роман Мамаев Роман Мамаев 27 сентября 2022 16:27 #

      к сожалению ошибка не показывает стек вызовов, только эта ошибка что указана выше

      Warning: Invalid argument supplied for foreach() in D:\OSPanel\domains\webasyst.loc\wa-system\database\waDbMysqliAdapter.class.php on line 436

      в файле wa-log/error.log вообще ничего нет

  • 2
    Syrnik.com Эксперт Разработчик 27 сентября 2022 21:16 #

    Не надо так делать в install.php (и файлах обновлений)

    $plugin = wa('shop')->getPlugin('natali');

    При этом создаётся новый инстанс плагина, система видит, что install.php ещё не отработал и запускает его.

    • +1
      Роман Мамаев Роман Мамаев 28 сентября 2022 14:08 #

      А как тогда тут получать обьект плагина, что бы можно было сохранить в настройках id созданового типа товаров? 

      • +1

        Можно не создавать объект. Записывайте настройки напрямую в таблицу настроек.

        $app_settings_model = new waAppSettingsModel();
        $app_settings_model->set(array('shop','plugin_id'),'setting_name', $settings_value);

        Вроде как-то так.

  • 1
    Роман Мамаев 29 сентября 2022 10:58 #

    Убрав инициализацию плагина

    $plugin = wa('shop')->getPlugin('natali');

    Я устранил бесконечный цикл, и теперь плагин не ломает сайт))

    Но 1 предупреждение при вызове модели shopFeatureModel все ровно получаю уже не критично, но не приятно,

    Warning: Invalid argument supplied for foreach() in D:\OSPanel\domains\webasyst.loc\wa-system\database\waDbMysqliAdapter.class.php on line 436

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


    Документация достаточно скудная, залез в реализацию модели shopFuater нашел метод добавляющий характеристику и некоторые параметры которые нужно прокидывать массивом, но почему то не работает

    $data = array(
                'type'       => 'color',
                'selectable' => 1,
                'values'     => array(
                    'фисташковый',
                    'черный',
                    'белый'
                )
            );
    
            $typeFeatureModel->save($data);
    • +1
      Михаил Ушенин Михаил Ушенин 29 сентября 2022 12:40 #

      Возможно, вам будет проще понять логику, если вы посмотрите код контроллера wa-apps/shop/lib/actions/settings/typefeat/shopSettingsTypefeatFeatureSave.controller.php, который сохраняет свойства характеристики в настройках магазина.

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

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