Ошибка при добавлении плагина товара

Ребята, добрый день!
Никак не могу понять в чем ошибка. Добавил через плагин свойство товара (наличие). И постоянно получаю ошибку:
[2018-04-05 11:49:50] (ERROR @ C:\OpenServer\domains\antikmagaz-new.ru\core\components\minishop2\model\minishop2\minishop2.class.php : 558) PHP warning: Invalid argument supplied for foreach()
Не могу понять почему? Должен быть массив, а его нет!

Вот код плагина:
index.php
<?php
return array (
    'xpdo_meta_map' => array (
        'msProductData' => require_once dirname(__FILE__) .'/model/msproductdata.map.inc.php',
    ),
    'manager' => array (
        'msProductData' => MODX_ASSETS_URL . 'components/minishop2/plugins/nalichie/msproductdata.js',
    ),
);
msproductdata.map.inc.php

<?php
return array (
	'fields' => array (
		'availability' => 1,
	)
	,'fieldMeta' => array (
		'availability' => array (
			'dbtype' => 'tinyint',
			'precision' => '1',
			'attributes' => 'unsigned',
			'phptype' => 'boolean',
			'null' => false,
			'default' => 1,
		),
	),
);
msproductdata.js

miniShop2.plugin.availability = {
	getFields: function(config) {
		return {
			availability: {xtype: 'xcheckbox',  description: '<b>[[+availability]]</b><br />'+_('ms2_product_availability_help'),inputValue: 1,checked: parseInt(config.record.availability || 1)}
		}
	}
	,getColumns: function() {
		return {
			availability: {width:50, sortable:true, editor: {xtype:'combo-boolean', renderer:'boolean'}}
		}
	}
};
А это на что он ссылается (558 строка):

if (isset($this->modx->map[$class])) {
                        foreach ($map as $key => $values) {
                            $this->modx->map[$class][$key] = array_merge($this->modx->map[$class][$key], $values);
                        }
                    }
Подскажите, пожалуйста куда копать???
Спасибо!

Ребята, неужели никто не может подсказать,хоть куда копать!!!
Алексей
05 апреля 2018, 09:02
modx.pro
2 125
0

Комментарии: 10

Евгений
02 августа 2019, 07:14
0
Вчера с такой же проблемой столкнулся. Не нашли решение?

Добавлено через пару минут: Только стоило написать как нашел решение проблемы)) Плагин лежал в папке /core/components/minishop2/plugins в документации сказано, что это устаревший способ и я всё же разместив файлы там сделал вторым способом (через API). Но только стоило переместить файлы плагина из папки plugins как ошибка ушла и начали добавляться товары в корзину (до этого не добавлялись).
    Артем
    13 января 2020, 02:07
    0
    Тоже столкнулся с такой проблемой, удалил файлы плагина из папки, но ошибка не исчезла.
    R2m0x94 (Vasily)
    22 декабря 2021, 18:15
    0
    Возьмем например такую иерархию в дереве каталогов проекта:
    plugins
    |_cart
    |_|_availability
    |_|_|_index.php
    |_order
    |_|_custom_modules
    |_|_|_index.php
    |_|_deliverytime
    |_|_|_index.php
    И рассмотрим пример системной настройки ms2_plugins: []
    Давайте попробуем туда записать данные за вместо квадратных скобок, поместим массив json:
    {
        "cart": {"availability": "{core_path}components/minishop2/plugins/cart/availability/index.php"}, 
        "order": {
            "custom_modules": "{core_path}components/minishop2/plugins/order/custom_modules/index.php",
            "deliverytime": "{core_path}components/minishop2/plugins/order/deliverytime/index.php"
        }
    }
    Работает, отлично!

    На Вашем же примере надо просто выполнить код в консоле, который будет помещать массив в плагин cart
    <?php
    $plugins = [
        'cart' => ['availability' => '{core_path}components/minishop2/plugins/cart/availability/index.php']
    ];
    if ($miniShop2 = $modx->getService('miniShop2')) {
        $miniShop2->addPlugin($plugins);
    }
    И Вы увидите в системной настройке ms2_plugins массив-json со следующем содержимом:
    {"cart": {"availability": "{core_path}components/minishop2/plugins/cart/availability/index.php"}}
      R2m0x94 (Vasily)
      22 декабря 2021, 18:38
      0
      Точнее так будет более правильнее:
      $plugin = ['availability' => '{core_path}components/minishop2/plugins/cart/availability/index.php'];
      if ($miniShop2 = $modx->getService('miniShop2')) {
          $miniShop2->addPlugin('cart', $plugin);
      }
        R2m0x94 (Vasily)
        23 декабря 2021, 19:26
        1
        0
        На всякий случай если не заработает, то
        // удаляем плагин
        if ($miniShop2 = $modx->getService('miniShop2')) {
            $miniShop2->removePlugin('cart');
        }
        // добавляем вновь
        $plugin = '{core_path}components/minishop2/plugins/cart/availability/index.php';
        if ($miniShop2 = $modx->getService('miniShop2')) {
            $miniShop2->addPlugin('availability', $plugin);
        }
        // результат в ms2_plugins: {"availability":"{core_path}components\/minishop2\/plugins\/cart\/availability\/index.php"}
        
        /* Вложенность иерархии в дереве и подключение, тоже имеют значение:
        plugins
        |_cart
        |_|_availability
        |_|_|_index.php
        |_|_|_msproductdata.map.inc.php
        */
        Николай Савин
        23 декабря 2021, 20:51
        0
        Этот вопрос написан почти четыре года назад! Зачем на него отвечать?
          Павел Гвоздь
          24 декабря 2021, 12:01
          +2
          Возможно человек нашёл решение проблемы и решил поделиться с теми, кто будет решать такую же. В любом случае, чем больше решённых вопросов в сообществе, тем лучше.
            R2m0x94 (Vasily)
            24 декабря 2021, 14:29
            0
            Да, и главное не надо боятся переименовывать, переносить папки и файлы указывая правильные пути на сервере, а также переименовывать результат в ms2_plugins, чтобы не трогать бэкапы.
            SELECT * FROM `modx_system_settings` WHERE `key` LIKE 'ms2_plugins'
            R2m0x94 (Vasily)
            24 декабря 2021, 14:49
            0
            Привет, лично у меня при разработке ушло на это время, и я не смог понять, почему если я регистрирую плагин относительно пути
            /plugins/order/custom_modules/index.php
            И вдруг захотел сменить путь на более удобный
            /plugins/custom_fields/index.php
            У меня появляется эта ошибка, сразу задался вопросом, а как же происходит регистрация плагинов, но ответа не нашел, поэтому и решил проблему таким способом
            /plugins/custom_fields/ms2/index.php
            Странно, но работает))
              R2m0x94 (Vasily)
              24 декабря 2021, 17:03
              0
              Разумеется, если в настройке ms2_plugins была бы возможность добавлять плагины просто через запятую (например ms2_plugins: availability, custom_modules, deliverytime и т.д., которые подключены напрямую из папки plugins/), то отпали бы такие заметки, и деактивация плагинов проходила бы глаже при регистрации того же плагина в другое место.

              Надеюсь на то, что в minishop3 появится такая возможность из коробки.
          Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
          10