Автор Тема: Call to a member function execute() on a non-object Почта России  (Прочитано 1288 раз)

24 Сентябрь 2015, 12:32:31
  • Новичок
  • *
  • Сообщений: 48
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Пытаюсь установить модуль 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, поэтому самостоятельно не разобраться.

24 Сентябрь 2015, 12:37:57
Ответ #1
  • Новичок
  • *
  • Сообщений: 48
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Я переносил некоторые таблицы из 1.6.0.9 в 1.6.1.1, что-то мне подсказывает, что в этом все дело, но не могу понять в чем.
Да переносил вот эти таблицы
ps_carrier_*
24 Сентябрь 2015, 12:59:38
Ответ #2
  • Модератор
  • Ветеран
  • *****
  • Сообщений: 33325
  • Репутация: +26771/-0
    • Просмотр профиля
Нельзя переносить таблицы из одной версии в другую. Удалите их. Установите заново модуль.
Если вам нужны старые данные, то используйте функции экспорт - импорт.
28 Сентябрь 2015, 18:44:23
Ответ #3
  • Новичок
  • *
  • Сообщений: 48
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
04 Октябрь 2015, 19:03:51
Ответ #4
  • Новичок
  • *
  • Сообщений: 19
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Здравствуйте. Ровно та же проблема, версия Prestashop 1.6.1.1
Но модуль Почты России ставлю на новую создаваемую базу.

В чем может быть проблема?
04 Октябрь 2015, 21:11:05
Ответ #5
  • Ветеран
  • *****
  • Сообщений: 1808
  • Репутация: +49/-1
  • Сообщество PrestaShop
    • Просмотр профиля
05 Октябрь 2015, 18:57:27
Ответ #6
  • Новичок
  • *
  • Сообщений: 19
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Пробовал ставить на абсолютно чистую базу, результат один.
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($sqlfalse)) {                -------------------------------------- 48 строка
            
return false;
        }

        return 
true;
    }

    public function 
dropTable() {

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

        if (!
RussianPost::$db->execute($sqlfalse)) {
            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']);
    }

}
05 Октябрь 2015, 19:50:59
Ответ #7
  • Партнер
  • Ветеран
  • ****
  • Сообщений: 22816
  • Репутация: +17143/-1
  • Разработка веб-сайтов и веб-программирование
    • Просмотр профиля
RussianPost::$db->execute($sql, false)Нет файла RussianPost.php, нет подключения этого файла в файле модуля. Если это ссылка на этот же класс, то код неправильный.
Этот модуль передывать нужно.
Db::getInstance()->execute('...
Интернет-магазин под ключ.
Какой выбрать движок для интернет магазина ?
Какой движок лучше ?
Magento или Prestashop ?
Решение всех Ваших вопросов в создании Интернет-магазина.
05 Октябрь 2015, 22:33:35
Ответ #8
  • Новичок
  • *
  • Сообщений: 19
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Спасибо большое. Но я с php вообще не знаком, если не сложно, покажите что как поменять.
06 Октябрь 2015, 09:13:31
Ответ #9
  • Партнер
  • Ветеран
  • ****
  • Сообщений: 22816
  • Репутация: +17143/-1
  • Разработка веб-сайтов и веб-программирование
    • Просмотр профиля
В этом модуле все менять нужно. Пишите владельцу пусть исправляет. Чужие модули никто не будет переделывать.
Интернет-магазин под ключ.
Какой выбрать движок для интернет магазина ?
Какой движок лучше ?
Magento или Prestashop ?
Решение всех Ваших вопросов в создании Интернет-магазина.