Polskie wsparcie PrestaShop
PrestaShop => PrestaShop 1.6 => Wątek zaczęty przez: felis w Luty 20, 2018, 10:26:38 pm
-
Witam
Mam świeżą instalacje presty 1.6.1.18. Nagle przestało działać usuwanie obrazów reklam z konfiguracji szablonu.
Wchodzę w preferencje - szablony (default-bootstrap) - konfigurator szablonu. Wybieram jakiś obraz z Podepnij do "home" i potem "usuń element" i dostaje komunikat:
[PrestaShop] Fatal error in module file :/home/trustinadm/public_html/shop/classes/db/DbPDO.php:
Uncaught Error: Call to a member function rowCount() on boolean in /home/trustinadm/public_html/shop/classes/db/DbPDO.php:208 Stack trace: #0 /home/trustinadm/public_html/shop/modules/themeconfigurator/themeconfigurator.php(399): DbPDOCore->Affected_Rows() #1 /home/trustinadm/public_html/shop/modules/themeconfigurator/themeconfigurator.php(532): ThemeConfigurator->removeItem() #2 /home/trustinadm/public_html/shop/controllers/admin/AdminModulesController.php(868): ThemeConfigurator->getContent() #3 /home/trustinadm/public_html/shop/controllers/admin/AdminModulesController.php(1117): AdminModulesControllerCore->postProcessCallback() #4 /home/trustinadm/public_html/shop/classes/controller/Controller.php(178): AdminModulesControllerCore->postProcess() #5 /home/trustinadm/public_html/shop/classes/Dispatcher.php(367): ControllerCore->run() #6 /home/trustinadm/public_html/shop/mfbja4ke9vneloa1/index.php(58): DispatcherCore->dispatch() #7 {main} thrown
Wcześniej to działało bez problemu. Mogę dodać nowy element, działa, mogę edytować, wyłączyć działa, a jak usuwam ten sam błąd.
W preście nie było nic zmieniane, ale ruszane były ustawienia DNS dla domeny, bo źle działała poczta.
Ma ktoś jakiś pomysł jak to naprawić, bo boję się by błąd nie pojawił się w jakimś innym ważnym miejscu.
-
wygląda to na błąd tabeli. Jeśli możesz odinstaluj całkowicie ten moduł i zainstaluj ponownie. Upewnij się, że tabele zostały usunięte z bazy danych
-
Spróbuje, ale myślę, że to problem po stronie serwera. Wszystko działało. Nagle przestało. Usunąłem całą prestę bo to jeszcze projekt włącznie z tabelami. Zainstalowałem ponownie prestę i problem nie zniknął. Dlatego sądzę, że coś się popsuło na serwerze.
Zrobiłem wyczyść moduł, usuń moduł, zainstaluj ponownie moduł. Nie ma poprawy. Nie wiem jak sprawdzić czy przy tych czynnościach tabele zostały sunięte z bazy danych.
Jeszcze dodam, że robiłem to z modułem konfigurator szablonu.
Nie wiem co to jest przywołany na początku DbPDO.php
-
Zobacz w katalogu classes oraz włącz tryb debugowania wtedy ładnie Ci powie co jest nie tak [FAQ tego forum]
-
Mam taki komunikat z trybu debugowania
[PrestaShopDatabaseException]
Table 'i4413557_ps1.ps_ps_themeconfigurator' doesn't exist
DELETE FROM `ps_ps_themeconfigurator` WHERE id_item = 1
at line 791 in file classes/db/Db.php
786. if ($webservice_call && $errno) {
787. $dbg = debug_backtrace();
788. WebserviceRequest::getInstance()->setError(500, '[SQL Error] '.$this->getMsgError().'. From '.(isset($dbg[3]['class']) ? $dbg[3]['class'] : '').'->'.$dbg[3]['function'].'() Query was : '.$sql, 97);
789. } elseif (_PS_DEBUG_SQL_ && $errno && !defined('PS_INSTALLATION_IN_PROGRESS')) {
790. if ($sql) {
791. throw new PrestaShopDatabaseException($this->getMsgError().'<br /><br /><pre>'.$sql.'</pre>');
792. }
793.
794. throw new PrestaShopDatabaseException($this->getMsgError());
795. }
796. }
DbCore->displayError - [line 425 - classes/db/Db.php] - [1 Arguments]
DbCore->query - [line 580 - classes/db/Db.php] - [1 Arguments]
DbCore->delete - [line 397 - modules/themeconfigurator/themeconfigurator.php] - [2 Arguments]
ThemeConfigurator->removeItem - [line 532 - modules/themeconfigurator/themeconfigurator.php]
ThemeConfigurator->getContent - [line 868 - controllers/admin/AdminModulesController.php]
AdminModulesControllerCore->postProcessCallback - [line 1117 - controllers/admin/AdminModulesController.php]
AdminModulesControllerCore->postProcess - [line 178 - classes/controller/Controller.php]
ControllerCore->run - [line 367 - classes/Dispatcher.php]
DispatcherCore->dispatch - [line 58 - admin/index.php]
Aha zauważyłem, że można rozwinąć dolne komunikaty. W razie potrzeby zamieszczę cały kod.
-
Zamieszczam pozostałe wpisy:
DbCore->displayError - [line 425 - classes/db/Db.php] - [1 Arguments]
420. $this->result = $this->_query($sql);
421. }
422. }
423.
424. if (_PS_DEBUG_SQL_) {
425. $this->displayError($sql);
426. }
427.
428. return $this->result;
429. }
430.
DbCore->query - [line 580 - classes/db/Db.php] - [1 Arguments]
575. $table = _DB_PREFIX_.$table;
576. }
577.
578. $this->result = false;
579. $sql = 'DELETE FROM `'.bqSQL($table).'`'.($where ? ' WHERE '.$where : '').($limit ? ' LIMIT '.(int)$limit : '');
580. $res = $this->query($sql);
581. if ($use_cache && $this->is_cache_enabled) {
582. Cache::getInstance()->deleteQuery($sql);
583. }
584.
585. return (bool)$res;
DbCore->delete - [line 397 - modules/themeconfigurator/themeconfigurator.php] - [2 Arguments]
392. $id_item = (int)Tools::getValue('item_id');
393.
394. if ($image = Db::getInstance()->getValue('SELECT image FROM `'._DB_PREFIX_.'themeconfigurator` WHERE id_item = '.(int)$id_item))
395. $this->deleteImage($image);
396.
397. Db::getInstance()->delete(_DB_PREFIX_.'themeconfigurator', 'id_item = '.(int)$id_item);
398.
399. if (Db::getInstance()->Affected_Rows() == 1)
400. {
401. Db::getInstance()->execute('
402. UPDATE `'._DB_PREFIX_.'themeconfigurator`
ThemeConfigurator->removeItem - [line 532 - modules/themeconfigurator/themeconfigurator.php]
527. if (Tools::isSubmit('newItem'))
528. $this->addItem();
529. elseif (Tools::isSubmit('updateItem'))
530. $this->updateItem();
531. elseif (Tools::isSubmit('removeItem'))
532. $this->removeItem();
533.
534. $html = $this->renderConfigurationForm();
535. $html .= $this->renderThemeConfiguratorForm();
536.
537. return $html;
ThemeConfigurator->getContent - [line 868 - controllers/admin/AdminModulesController.php]
863.
864. if (count($this->errors)) {
865. continue;
866. }
867. // Get the return value of current method
868. $echo = $module->{$method}();
869.
870. // After a successful install of a single module that has a configuration method, to the configuration page
871. if ($key == 'install' && $echo === true && strpos(Tools::getValue('install'), '|') === false && method_exists($module, 'getContent')) {
872. Tools::redirectAdmin(self::$currentIndex.'&token='.$this->token.'&configure='.$module->name.'&conf=12');
873. }
AdminModulesControllerCore->postProcessCallback - [line 1117 - controllers/admin/AdminModulesController.php]
1112. }
1113. }
1114.
1115. // Call appropriate module callback
1116. if (!isset($ppm_return)) {
1117. $this->postProcessCallback();
1118. }
1119.
1120. if ($back = Tools::getValue('back')) {
1121. Tools::redirectAdmin($back);
1122. }
AdminModulesControllerCore->postProcess - [line 178 - classes/controller/Controller.php]
173. if (!$this->content_only && ($this->display_header || (isset($this->className) && $this->className))) {
174. $this->setMedia();
175. }
176.
177. // postProcess handles ajaxProcess
178. $this->postProcess();
179.
180. if (!empty($this->redirect_after)) {
181. $this->redirect();
182. }
183.
ControllerCore->run - [line 367 - classes/Dispatcher.php]
362. if (isset($params_hook_action_dispatcher)) {
363. Hook::exec('actionDispatcher', $params_hook_action_dispatcher);
364. }
365.
366. // Running controller
367. $controller->run();
368. } catch (PrestaShopException $e) {
369. $e->displayMessage();
370. }
371. }
372.
DispatcherCore->dispatch - [line 58 - admin/index.php]
53. if (!isset($_REQUEST['controller']) && isset($_REQUEST['tab'])) {
54. $_REQUEST['controller'] = strtolower($_REQUEST['tab']);
55. }
56.
57. // Prepare and trigger admin dispatcher
58. Dispatcher::getInstance()->dispatch();
I da się coś wywnioskować z tych wpisów? Bo dla mnie nie są jasne.
-
Dodam jeszcze, że na tym samym serwerze zainstalowałem sklep w wersji o jeden niższej czyli 1.6.1.17 i tam działa bez problemu. Czyżby jakiś błąd wersji 1.6.1.18? Podobny problem zgłosił ktoś bodaj z Hiszpanii na forum www.prestashop.com/forums/
Ale póki co nikt nie znalazł rozwiązania.
-
Dodam jeszcze:
Na innym serwerze miałem instalację presty 1.6.1.17. Usuwanie działało. Dokonałem aktualizacji do 1.6.1.18. Przestało działać. Chyba to ewidentny błąd presty 1.6.1.18. Jeśli ktoś może sprawdzić w swojej instalacji dla potwierdzenia to poproszę. Dziwne tylko, że przez chwilę na początku działało, ale może nie zauważyłem zmiany wersji.
-
Rozwiązanie problemu:
Edytuj plik modules/themeconfigurator/themeconfigurator.php.
Znajdź wiersz 397
Db::getInstance()->delete(_DB_PREFIX_.'themeconfigurator', 'id_item = '.(int)$id_item);
wymień na:
Db::getInstance()->delete('themeconfigurator', 'id_item = '.(int)$id_item);
Zapisz zmiany.