minishop2.class.php 630 PHP warning: Invalid argument supplied for foreach()

Добрый день!

Прощу помочь со следующей проблемой:

Эта ошибка стала забивать весь журнал ошибок
/public_html/core/components/minishop2/model/minishop2/minishop2.class.php 630
PHP warning: Invalid argument supplied for foreach()
<div id="msGallery0">
  {if $files?} 
    <div id="productSlider" class="flexslider">
      <ul class="slides">
      {foreach $files as $file}
        <li>
          <a href="{$file['450x450']}" data-lightbox="roadtrip">
            <img src="{$file['450x450'] | phpthumbon : 'w=450&h=450&zc=C&f=webp'}" alt="" title="">
          </a>
        </li>
      {/foreach}
      </ul>
    </div>
    <div id="productCarousel" class="flexslider">
      <ul class="slides">
      {foreach $files as $file}
        <li>
          <a href="{$file['450x450']}">
            <img src="{$file['450x450'] | phpthumbon : 'w=100&h=100&zc=C&f=webp'}" alt="" title="">
          </a>
        </li>
      {/foreach}
      </ul>
    </div>
  {else}
    <img class="img-responsive" src="/theme/img/no-image-450.png" alt="" title="">
  {/if}  

</div>
Ругается, видимо на второй вызов {foreach $files as $file}

Как исправить?
adminixi
20 декабря 2023, 12:45
modx.pro
261
0

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

Артур Шевченко
20 декабря 2023, 23:25
+1
Это не ошибка, ошибка это ERROR, это предупреждение и на него можно просто забить, или отключить их показ в системных настройках.
    adminixi
    22 декабря 2023, 17:17
    0
    Поняла, спасибо!
    Александр Туниеков
    21 декабря 2023, 04:17
    +1
    Это предупреждение наверно не из этого чанка галереи. Во первых стоит проверка {if $files?} во вторых если ругается на второй вызов {foreach $files as $file}, то должно ругаться и на первый вызов {foreach $files as $file}.
    И, самое главное, в третьих ругается в файле /public_html/core/components/minishop2/model/minishop2/minishop2.class.php на строке 630. То есть чанк вообще не при чем. Посмотрите что есть там у вас в файле minishop2.class.php на строке 630
      adminixi
      22 декабря 2023, 17:18
      0
      Спасибо за наводку, посмотрю там.
        adminixi
        22 декабря 2023, 17:23
        0
        joxi.ru/ZrJ6WPDce33KZr
        foreach ($map as $key => $values)
        public function loadMap()
            {
                if (method_exists($this->pdoTools, 'makePlaceholders')) {
                    $plugins = $this->loadPlugins();
                    foreach ($plugins as $plugin) {
                        // For legacy plugins
                        if (isset($plugin['xpdo_meta_map']) && is_array($plugin['xpdo_meta_map'])) {
                            $plugin['map'] = $plugin['xpdo_meta_map'];
                        }
                        if (isset($plugin['map']) && is_array($plugin['map'])) {
                            foreach ($plugin['map'] as $class => $map) {
                                if (!isset($this->modx->map[$class])) {
                                    $this->modx->loadClass($class, $this->config['modelPath'] . 'minishop2/');
                                }
                                if (isset($this->modx->map[$class])) {
                                foreach ($map as $key => $values) 
                                        $this->modx->map[$class][$key] = array_merge($this->modx->map[$class][$key], $values);
                                    }
                                }
                            }
                        }
                    }
                } else {
                    $this->modx->log(modX::LOG_LEVEL_ERROR, 'pdoTools not installed, metadata for miniShop2 objects not loaded');
                }
            }
          Александр Туниеков
          22 декабря 2023, 22:09
          +1
          Какой то не правильный плагин в папке core/components/minishop2/plugins/. Там плагины для расширения полей базы данных минишопа в виде index.php например
          <?php
          return array(
              'map' => array(
                  'msProductData' => require_once 'msproductdata.map.inc.php',
              ),
              'manager' => array(
                  'msProductData' => MODX_ASSETS_URL . 'components/minishop2/plugins/myplugin/msproductdata.js',
              ),
          );
          и msproductdata.map.inc.php
          <?php
          return array(
              'fields' => array (
          		'avaible' => 1,
          		'europrice' => 0.0
          	  ),
              'fieldMeta' => array (
          		'avaible' => 
          		array (
          		  'dbtype' => 'varchar',
          		  'precision' => '50',
          		  'phptype' => 'integer',
          		  'null' => true,
          		),
          		'europrice' => 
          		array (
          		  'dbtype' => 'decimal',
          		  'precision' => '12,2',
          		  'phptype' => 'float',
          		  'null' => true,
          		  'default' => 0.0,
          		),
              )
              ,'indexes' => array(
          .....
          наверно index.php присутствует, а файл определенный в строке ниже отсутствует

          'map' => array(
                  'msProductData' => require_once 'msproductdata.map.inc.php',
          то есть для msProductData отсутствует файл msproductdata.map.inc.php.

          Возможно в этом причина. Код брал со страницы Плагин товара для miniShop2 MODx Revo
            Александр Туниеков
            22 декабря 2023, 22:42
            +1
            Или в index.php 'msProductData' вместо массива строка
            'msProductData' => "require_once 'msproductdata.map.inc.php'",
              adminixi
              23 декабря 2023, 13:03
              0
              Спасибо, попробую разобраться.
          Николай Савин
          21 декабря 2023, 22:39
          +1
          Это предупреждение связано с работой опций. Смотрите что у вас с ними. Есть ли они, Может некорректно созданы. Может вызов где то в шаблоне некорректный
            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
            9