Call to a member function execute() on a non-object Почта России

Автор romeo143, 24 сентября 2015, 12:32:31

« назад - далее »

romeo143

Пытаюсь установить модуль russianpostcarrier (любой из предложенных - SergeR или Кассиопеей) при установке выдает ошибку
[PrestaShop] Fatal error in module file :/home/public_html/modules/russianpostcarrier/models/RussianPost.php:
Call to a member function execute() on a non-object


На 1.6.0.9 проблем не было сейчас ставлю на 1.6.1.1 - вот такая ошибка
У парня на гитхабе возник тот же вопрос, говорит на 48 строке

  public function createTable() {

        $sql = "CREATE TABLE IF NOT EXISTS `{$this->tableWithPrefix}` (" .
                '`id` INT(11) NOT NULL AUTO_INCREMENT,' .
                '`id_state` INT(11) NOT NULL,' .
                '`id_post_zone` INT(11) NOT NULL,' .
                '`active` INT(11) NOT NULL,' .
                'PRIMARY KEY (`id`)' .
                ') DEFAULT CHARSET=utf8;';

        if (!RussianPost::$db->execute($sql, false)) {
            return false;
        }


Немного не силен в SQL, поэтому самостоятельно не разобраться.


romeo143

#1
Я переносил некоторые таблицы из 1.6.0.9 в 1.6.1.1, что-то мне подсказывает, что в этом все дело, но не могу понять в чем.
Да переносил вот эти таблицы
ps_carrier_*

coder

Нельзя переносить таблицы из одной версии в другую. Удалите их. Установите заново модуль.
Если вам нужны старые данные, то используйте функции экспорт - импорт.

romeo143

#3
.

serg093

Здравствуйте. Ровно та же проблема, версия Prestashop 1.6.1.1
Но модуль Почты России ставлю на новую создаваемую базу.

В чем может быть проблема?

Mr.Sen


serg093

#6
Пробовал ставить на абсолютно чистую базу, результат один.
Fatal error: Call to a member function execute() on a non-object in C:\OpenServer\domains\Shop10\modules\russianpostcarrier\models\RussianPost.php on line 48
[PrestaShop] Fatal error in module file :C:\OpenServer\domains\Shop10\modules\russianpostcarrier\models\RussianPost.php:
Call to a member function execute() on a non-object


Сам RussianPost.php

<?php

class RussianPost extends ObjectModel {

   public
$id;
   public
$id_state;
   public
$id_post_zone;
   public
$active;
   public
$tableWithPrefix;
   protected
$dbconn;
   public static
$definition = array(
       
'table' => 'russian_post',
       
'primary' => 'id',
       
'multilang' => false,
       
'fields' => array(
           
'id_state' => array(
               
'type' => ObjectModel::TYPE_INT,
               
'required' => true
           
),
           
'id_post_zone' => array(
               
'type' => ObjectModel::TYPE_INT,
               
'required' => true
           
),
           
'active' => array(
               
'type' => ObjectModel::TYPE_INT,
               
'required' => false
           
),
       ),
   );

   public function
__construct($id = null, $id_lang = null, $id_shop = NULL) {

       
parent::__construct($id, $id_lang, $id_shop);

       
$this->tableWithPrefix = _DB_PREFIX_ . RussianPost::$definition['table'];
   }

   public function
createTable() {

       
$sql = "CREATE TABLE IF NOT EXISTS `{$this->tableWithPrefix}` (" .
               
'`id` INT(11) NOT NULL AUTO_INCREMENT,' .
               
'`id_state` INT(11) NOT NULL,' .
               
'`id_post_zone` INT(11) NOT NULL,' .
               
'`active` INT(11) NOT NULL,' .
               
'PRIMARY KEY (`id`)' .
               
') DEFAULT CHARSET=utf8;';

       if (!
RussianPost::$db->execute($sql, false)) {                -------------------------------------- 48 строка
           
return false;
       }

       return
true;
   }

   public function
dropTable() {

       
$sql = "DROP TABLE IF EXISTS `{$this->tableWithPrefix}`;";

       if (!
RussianPost::$db->execute($sql, false)) {
           return
false;
       }

       return
true;
   }

   public function
getRpZone($addr) {

       if (!
Country::containsStates($addr->id_country))
           return
0;

       if (!
$addr->id_state)
           return
0;

       
$row = RussianPost::$db->getRow("SELECT * FROM `{$this->tableWithPrefix}` WHERE `id_state` = {$addr->id_state} AND `active` = 1");

       if (!isset(
$row['id_post_zone']))
           return
0;

       return
$row['id_post_zone'];

       
//$row = $this->dbconn->getRow("SELECT ");
   
}

   
// Пришлось перегрузить этот метод. Колонка в таблице
   // у нас не по правилам называется.
   // Заодно довавил LIMIT на всякий случай
   // FIXME: Поле в таблице потом переименовать! И этот метод убрать!
   
public static function existsInDatabase($id_entity, $table) {

       
$row = Db::getInstance()->getRow(
               
"SELECT `id` FROM `" . _DB_PREFIX_ . $table . "` e " .
               
"WHERE `e`.`id` = " . (int) $id_entity . " " .
               
"LIMIT 1"
       
);

       return isset(
$row['id']);
   }

}

mAgency

RussianPost::$db->execute($sql, false)
Нет файла RussianPost.php, нет подключения этого файла в файле модуля. Если это ссылка на этот же класс, то код неправильный.
Этот модуль передывать нужно.
Db::getInstance()->execute('...
Интернет-магазин под ключ.
Какой выбрать движок для интернет магазина ?
Какой движок лучше ?
Magento или Prestashop ?
Решение всех Ваших вопросов в создании Интернет-магазина.

serg093

Спасибо большое. Но я с php вообще не знаком, если не сложно, покажите что как поменять.

mAgency

В этом модуле все менять нужно. Пишите владельцу пусть исправляет. Чужие модули никто не будет переделывать.
Интернет-магазин под ключ.
Какой выбрать движок для интернет магазина ?
Какой движок лучше ?
Magento или Prestashop ?
Решение всех Ваших вопросов в создании Интернет-магазина.