2016-02-17 59 views
2

我試圖在Prestashop中的某個類別中獲取產品總數,但獲得了正確的編號,但是出現此通知:

「嘗試獲取Category.php中非對象的屬性」。

這裏是我的代碼:

<?php 
define('PRESTASHOP_S_EXTERNAL_SCRIPT', true); 
include(dirname(__FILE__).'\..\prestashop_1.6.1.0\prestashop\config\config.inc.php'); 

//returns 1 
echo Configuration::get('PS_LANG_DEFAULT'); 

$id_category = 123; 

$category = new Category($id_category, (int)Configuration::get('PS_LANG_DEFAULT'),(int)Configuration::get('PS_SHOP_DEFAULT')); 

//works 
echo $category->getName(); 

//returns 1 
echo is_object($category); 

//returns the correct number but with a PHP notice ("Trying to get property of non-object in Category.php on line 671") 
echo $category->getProducts(1,1,1000,null,null,1,1); 

回答

2

該通知被拋出,因爲你沒有任何控制器在上下文中設置做。

如果你看一下Category.php上線671:

public function getProducts($id_lang, $p, $n, $order_by = null, $order_way = null, $get_total = false, $active = true, $random = false, $random_number_products = 1, $check_access = true, Context $context = null) 
{ 
    // [...] 
    $front = in_array($context->controller->controller_type, array('front', 'modulefront')); 
    // [...] 
} 

問題來源於此代碼$context->controller->controller_type。在您的上下文中沒有定義Controller,因爲您沒有從Prestashop中運行腳本。

你可以嘗試將控制器手動添加到上下文對象:

$context = Context::getContext(); 
$context->controller = new FrontController(); 
echo $category->getProducts(1,1,1000,null,null,1,1); 
+0

我說: '$背景=背景::的getContext(); $ context-> controller = new Controller();' 最後一行給我一個致命錯誤**不能實例化抽象類Controller **。 –

+0

我的不好,試着用'AdminController'代替。 –

+0

AdminController引發了一些錯誤,但FrontController工作正常。所以代碼是: '$ context = Context :: getContext(); $ context-> controller = new FrontController();' –

相關問題