[Решено] Invalid argument supplied for foreach()

Тема в разделе "OpenCart", создана пользователем Ping, 29 июн 2015.

Статус темы:
Закрыта.
  1. Ping

    Ping PingWin always win

    Регистрация:
    29 окт 2012
    Сообщения:
    445
    Симпатии:
    302
    Ошибка в модуле flyout-mega-menu-v3.
    Warning: Invalid argument supplied for foreach() in /home/zjvovvwn/public_html/moto/catalog/controller/module/flyoutmenumodule.php on line 911
    Как побороть ее ?
     
  2. Dotrox

    Dotrox Команда форума

    Регистрация:
    27 ноя 2012
    Сообщения:
    3.198
    Симпатии:
    1.306
    У тебя в переменной $added_menus должен быть массив, а там не он. Откуда эта переменная берётся?
     
  3. Ping

    Ping PingWin always win

    Регистрация:
    29 окт 2012
    Сообщения:
    445
    Симпатии:
    302
     
  4. Baco

    Baco Антихронофаг Команда форума

    Регистрация:
    9 окт 2012
    Сообщения:
    803
    Симпатии:
    399
    Добавь перед:
    $this->config->get('flyoutmenumodule_added_menus');
    эти строки:
    $this->log->write('added_menu_conf:' . print_r($this->config->get('flyoutmenumodule_added_menus'),1));
    и отпиши, что в журнале.

    Попробуй переустанови модуль.
     
  5. Ping

    Ping PingWin always win

    Регистрация:
    29 окт 2012
    Сообщения:
    445
    Симпатии:
    302
    Вот что в журнале появилось:
     
  6. Baco

    Baco Антихронофаг Команда форума

    Регистрация:
    9 окт 2012
    Сообщения:
    803
    Симпатии:
    399
    пустой массив, оптимальное решение, это проставить заглушку преед:
    Код:
    foreach ($added_menus as $menu) {
    вот так:
    Код:
    if (isset($added_menus)) {
    и соотв. в конце, закрыть:
    Код:
    }
    Но проблема в том, что в админке не добавлены категории, или так должно быть ?
     
    Ping нравится это.
  7. Ping

    Ping PingWin always win

    Регистрация:
    29 окт 2012
    Сообщения:
    445
    Симпатии:
    302
    Поставил заглушку.
    Категории все есть.
    Спасибо :Smile:
     
    Baco нравится это.
  8. cereberlum

    cereberlum

    Регистрация:
    26 май 2013
    Сообщения:
    756
    Симпатии:
    269
    Аналогичная проблема с мудулем категорий у меня, вродь попробовал поставить заглушку как советовал Baco, собственно вот содержимое контроллера:
    Сам текст предупреждения: Warning: Invalid argument supplied for foreach() in ......../catalog/view/theme/journal2/template/module/category.tpl on line 5
    Код шаблона (тоже пытался ставить заглушку)
    Пока предупреждение не вижу, но оно "блуждающее" какое-то, иногда появляется, а в основном норм все.
     
  9. Dotrox

    Dotrox Команда форума

    Регистрация:
    27 ноя 2012
    Сообщения:
    3.198
    Симпатии:
    1.306
    Потому что ошибка в данных, а не в коде (в коде просто недоработка).

    Надо вот эту строку поправить:
    PHP:
    <?php if (isset($categories)) { ?>
    Такой вариант решит все проблемы:
    PHP:
    <?php if (isset($categories) && is_array($categories) && !empty($categories)) { ?>
     
    cereberlum нравится это.
  10. Andriyaa

    Andriyaa

    Регистрация:
    6 авг 2013
    Сообщения:
    1
    Симпатии:
    0
    помогло
    було
    PHP:
            foreach ($added_menus as $menu) {
                
    $menu_preffix 'menu'.$menu.'_';
                if (
    $this->config->get($menu_preffix.'flyoutmenu_settings_status')) {
                    
    $menus[] = array (
                        
    'class' => ' .flyoutmenu_'.$menu,
                        
    'flyout_settings' => $this->config->get($menu_preffix.'flyoutmenu_settings')
                    );
                }
            }

    стало
    PHP:
            $added_menus $this->config->get('flyoutmenumodule_added_menus');
            if (isset(
    $added_menus)) {
            foreach (
    $added_menus as $menu) {
                
    $menu_preffix 'menu'.$menu.'_';}
                if (
    $this->config->get($menu_preffix.'flyoutmenu_settings_status')) {
                    
    $menus[] = array (
                        
    'class' => ' .flyoutmenu_'.$menu,
                        
    'flyout_settings' => $this->config->get($menu_preffix.'flyoutmenu_settings')
                    );
                }
            }
     
    Lasted edited by : 24 фев 2017
  11. Rom4ik

    Rom4ik

    Регистрация:
    22 ноя 2017
    Сообщения:
    2
    Симпатии:
    0
    Помогите, пожалуйста.
    В журнале ошибок вот такое:
    Код:
    2017-11-16 9:11:20 - PHP Warning:  Invalid argument supplied for foreach() in /home/dluqxiwn/public_html/admin/controller/extension/module/settingnewstore.php on line 283
    2017-11-16 9:15:55 - PHP Warning:  Invalid argument supplied for foreach() in /home/dluqxiwn/public_html/admin/controller/extension/module/settingnewstore.php on line 283
    2017-11-16 9:18:13 - PHP Warning:  Invalid argument supplied for foreach() in /home/dluqxiwn/public_html/admin/controller/extension/module/settingnewstore.php on line 283
    2017-11-21 23:45:24 - PHP Notice:  Undefined index: newstore_data in /home/dluqxiwn/public_html/admin/controller/extension/module/settingnewstore.php on line 215
    2017-11-21 23:45:24 - PHP Warning:  Invalid argument supplied for foreach() in /home/dluqxiwn/public_html/admin/model/extension/module/settingnewstore.php on line 54
    2017-11-21 23:45:28 - PHP Notice:  Undefined index: newstore_data in /home/dluqxiwn/public_html/admin/controller/extension/module/settingnewstore.php on line 215
    2017-11-21 23:45:28 - PHP Warning:  Invalid argument supplied for foreach() in /home/dluqxiwn/public_html/admin/model/extension/module/settingnewstore.php on line 54
    Когда выскакивает ошибка, настройки шаблона все сбрасываются, как исправить?
    Вот что в 54-ой строке:
    Код:
    54.    foreach ($data as $key => $value) {
     
  12. Master2KAZ

    Master2KAZ

    Регистрация:
    25 окт 2014
    Сообщения:
    183
    Симпатии:
    72
    Думаю стоит показать код всего файла, в частности там, где переменной $data присваивается значение.
     
  13. Rom4ik

    Rom4ik

    Регистрация:
    22 ноя 2017
    Сообщения:
    2
    Симпатии:
    0
    Это?
    Код:
    foreach ($data as $key => $value) {
                if (!is_array($value)) {
                        $this->db->query("INSERT INTO " . DB_PREFIX . "setting SET store_id = '0', `code` = '" . $this->db->escape($code) . "', `key` = '" . $this->db->escape($key) . "', `value` = '" . $this->db->escape($value) . "'");
                    } else {
                        if (VERSION < 2.1) {
                            $this->db->query("INSERT INTO " . DB_PREFIX . "setting SET store_id = '0', `code` = '" . $this->db->escape($code) . "', `key` = '" . $this->db->escape($key) . "', `value` = '" . $this->db->escape(serialize($value)) . "', serialized = '1'");
                        } else {
                            $this->db->query("INSERT INTO " . DB_PREFIX . "setting SET store_id = '0', `code` = '" . $this->db->escape($code) . "', `key` = '" . $this->db->escape($key) . "', `value` = '" . $this->db->escape(json_encode($value)) . "', serialized = '1'");
                        }
                    }   
                }
     
  14. Master2KAZ

    Master2KAZ

    Регистрация:
    25 окт 2014
    Сообщения:
    183
    Симпатии:
    72
    Нет. На этом участке перебирается массив $data. Ищите строку где типа $data = ...
     
Статус темы:
Закрыта.