Kst Posted November 18, 2022 Share Posted November 18, 2022 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. Link to comment Share on other sites More sharing options...
0 endriu107 Posted November 19, 2022 Share Posted November 19, 2022 Był instalowany ostatnio jakiś moduł w sklepie? Możesz podać cały komunikat błędu? Link to comment Share on other sites More sharing options...
0 Kst Posted November 21, 2022 Author Share Posted November 21, 2022 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 More sharing options...
0 endriu107 Posted November 21, 2022 Share Posted November 21, 2022 I poniżej nie ma więcej komunikatów? Link to comment Share on other sites More sharing options...
0 Kst Posted November 22, 2022 Author Share Posted November 22, 2022 Nie ma nic więcej Link to comment Share on other sites More sharing options...
0 atomek Posted November 22, 2022 Share Posted November 22, 2022 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 More sharing options...
0 Kst Posted November 23, 2022 Author Share Posted November 23, 2022 (edited) Spróbuj wstawić przed pętlą foreach dump($results); zobacz jaka jest zawartość - a gdzie mam sprawdzić jej zawartość? @atomek Nigdy nie używałam phpMyAdmin więc nie wiem gdzie znaleźć zapytania i dane. Proszę o prostsze wyjaśnienie Edited November 23, 2022 by Kst (see edit history) Link to comment Share on other sites More sharing options...
0 Daresh Posted November 23, 2022 Share Posted November 23, 2022 Wystarczy wyłączyć tryb debug żeby ten komunikat zniknął. Raczej nie jest to nic krytycznego dla sklepu. Link to comment Share on other sites More sharing options...
0 Kst Posted November 23, 2022 Author Share Posted November 23, 2022 @DareshKomunikat pojawia się przy wyłączonym debugowaniu. Link to comment Share on other sites More sharing options...
0 Daresh Posted November 23, 2022 Share Posted November 23, 2022 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 More sharing options...
0 Kst Posted November 23, 2022 Author Share Posted November 23, 2022 (edited) @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 Edited November 23, 2022 by Kst (see edit history) Link to comment Share on other sites More sharing options...
0 Daresh Posted November 23, 2022 Share Posted November 23, 2022 To już raczej będzie coś z modułami, ale nie widzę dokładnie... Link to comment Share on other sites More sharing options...
0 atomek Posted November 23, 2022 Share Posted November 23, 2022 W metodzie getHookModuleList w treści zapytania sql spróbuj zmienić active na m.active 1 Link to comment Share on other sites More sharing options...
0 Kst Posted November 24, 2022 Author Share Posted November 24, 2022 @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 More sharing options...
Question
Kst
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.
Link to comment
Share on other sites
13 answers to this question
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now