Jump to content
  • 0

Warning: Invalid argument supplied for foreach() in /public_html/classes/Hook.php on line 491


Kst

Question

Witam,

W górnej części naszej strony pojawił się błąd Warning: Invalid argument supplied for foreach() in /public_html/classes/Hook.php on line 491.

Czytałam, że może to być problem z pętlą foreach lub tablicami, ale nie znam php i nie wiem jak to naprawić. 

W linii 491 znajduję się: foreach ($results as $result) {

Proszę o pomoc w rozwiązaniu problemu, załączam również zdjęcie kodu. 

error ap.png

Link to comment
Share on other sites

13 answers to this question

Recommended Posts

  • 0

Cały komunikat to Warning: Invalid argument supplied for foreach() in /home/daqumbjcrj/domains/aparatsluchowy.com/public_html/classes/Hook.php on line 491.

 

Po aktualizacji sklep nie działał poprawnie więc przywróciliśmy kopię zapasową i po tym zaczął wyświetlać się ten komunikat. Nie instalowaliśmy nowych modułów. 

Link to comment
Share on other sites

  • 0

Spróbuj wstawić przed pętlą foreach

dump($results);  

zobacz jaka jest zawartość

 

możesz też dać

dump('SELECT h.id_hook, h.name as h_name, title, description, h.position, hm.position as hm_position, m.id_module, m.name, m.active
            FROM `' . _DB_PREFIX_ . 'hook_module` hm
            STRAIGHT_JOIN `' . _DB_PREFIX_ . 'hook` h ON (h.id_hook = hm.id_hook AND hm.id_shop = ' . (int) Context::getContext()->shop->id . ')
            STRAIGHT_JOIN `' . _DB_PREFIX_ . 'module` as m ON (m.id_module = hm.id_module)
            ORDER BY hm.position');
            
            
przekopiuj otrzymany wynik zapytania i wykonaj go z poziomu phpMyAdmina, sprawdź czy otrzymujesz jakieś dane,
wcześniej usuń znaki nowej lini "\n"

Link to comment
Share on other sites

  • 0

To może oznaczać, że raportowanie błędów jest wymuszone w jakiś inny sposób na serwerze. To też do zmiany, nie powinno być przy sklepie raportowanie błędów robione w ten sposób, co najwyżej do pliku error.log, do wglądu dla obsługi sklepu, a nie dla jego klientów :)

Link to comment
Share on other sites

  • 0

@endriu107 @Daresh @atomek

po włączeniu debugowania pojawiają się jeszcze takie błędy:

The association PrestaShopBundle\Entity\Tab#tabLangs refers to the owning side field PrestaShopBundle\Entity\TabLang#tab which does not exist.

 

Zmieniłam kod zgodnie z instrukcją z gita i nie ma poprawy https://github.com/PrestaShop/PrestaShop/pull/21218/commits/9c7ee90d97242433bd19a850140a90dbe201a771

debug info.png

debug info php.png

Edited by Kst (see edit history)
Link to comment
Share on other sites

  • 0

@atomek 

Dziękuje bardzo za pomoc, wszystko działa!

Wrzucam kod poniżej w razie gdyby inni mieli podobny problem :)

 

public static function getHookModuleList()

    {

        $cache_id = 'hook_module_list';

        if (Cache::isStored($cache_id)) {

            return Cache::retrieve($cache_id);

        }

 

        $results = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS(

            'SELECT h.id_hook, h.name as h_name, title, description, h.position, hm.position as hm_position, m.id_module, m.name, m.active

            FROM `' . _DB_PREFIX_ . 'hook_module` hm

            STRAIGHT_JOIN `' . _DB_PREFIX_ . 'hook` h ON (h.id_hook = hm.id_hook AND hm.id_shop = ' . (int) Context::getContext()->shop->id . ')

            STRAIGHT_JOIN `' . _DB_PREFIX_ . 'module` as m ON (m.id_module = hm.id_module)

            ORDER BY hm.position'

        );

        $list = [];

        foreach ($results as $result) {

            if (!isset($list[$result['id_hook']])) {

                $list[$result['id_hook']] = [];

            }

 

            $list[$result['id_hook']][$result['id_module']] = [

                'id_hook' => $result['id_hook'],

                'title' => $result['title'],

                'description' => $result['description'],

                'hm.position' => $result['position'],

                'm.position' => $result['hm_position'],

                'id_module' => $result['id_module'],

                'name' => $result['name'],

                'm.active' => $result['m.active'],

            ];

        }

        Cache::store($cache_id, $list);

 

        // @todo remove this in 1.6, we keep it in 1.5 for retrocompatibility

        Hook::$_hook_modules_cache = $list;

 

        return $list;

    }

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...