Помогите разобраться в чем ошибка.
При добавлении товаров ошибка.
Есть 2 версии сайта, тестовая и основная.
Ранее писал код который добавляет товары через API который на основном сайте работает.
На тесте с ним возникли какие-то проблемы.
Проблемы с добавлением новых.
define('ROOT_DIR', realpath(__DIR__ . '/../../'));
set_include_path(ROOT_DIR);
$ROOT_PATH = ROOT_DIR . '/';
$AMI_ENV_SETTINGS = [
'mode' => 'fast',
'disable_cache' => TRUE
];
require_once 'vendor/autoload.php';
require_once __DIR__ . '/TestImport.php';
try {
$obj = new TestImport();
require ROOT_DIR . '/ami_env.php';
AMI_Event::addHandler('v5_on_item_prepare', 'handleItemPrepare', AMI_Event::MOD_ANY);
$obj->run();
$obj->clearCache();
} catch (Exception $ex) {
echo "root Exception";
print_r($ex);
}
<?php
use ParserBase\Log;
class TestImport
{
private $_dom = null;
/***
* @var SimpleXMLElement
*/
private $_s = null;
/***
* @var AMI_DB
*/
private $_oDb = null;
/***
* @var string
*/
public $sm_data = [];
/***
* @var AmiCatalog_Items_Table
*/
private $_oModel = null;
/***
* @var null
*/
protected $rawData = null;
private $_date = "test11";
private $_init = false;
private $_items_local = [];
private $_items_wait = [];
private $_items_add = [];
private $_add_counter = 0;
private $_update_counter = 0;
private $_stock_counter = 0;
private $_hidden_counter = 0;
private $_wait_counter = 0;
private $_error_counter = 0;
private $_add_list = '';
private $_update_list = '';
private $_stock_list = '';
private $_hidden_list = '';
private $_wait_list = '';
private $_run_status = false;
public function __construct()
{
}
function init()
{
if ($this->_init == false) {
$this->_init = true;
$this->_oDb = AMI::getSingleton('db');
$this->_oModel = AMI::getResourceModel('eshop_item/table', [['extModeOnConstruct' => 'all']]);
}
}
public function run()
{
$this->init();
echo 222;
$i = 0;
$this->addNewItemList("test_ext_id" . time() . ++$i, 26556, "Тест", mt_rand(10, 2000), "", "Тест");
$this->addNewItemList("test_ext_id" . time() . ++$i, 26556, "Тест", mt_rand(10, 2000), "", "Тест");
$this->addNewItemList("test_ext_id" . time() . ++$i, 26556, "Тест", mt_rand(10, 2000), "", "Тест");
$this->addItems();
}
private function addNewItemList($id_external, $category_Id, $name, $price, $f_182, $status)
{
$this->_items_add[] = [
'cat_id' => $category_Id,
'public' => 1,
'sku' => $id_external,
'id_external' => $id_external,
'header' => $name,
'price' => $price,
'custom_field_182' => $f_182,
'custom_field_365' => $status,
'custom_field_366' => PROVIDER,
'custom_field_395' => $this->_date,
'ext_img' => 'impost/test/1.jpg',
'ext_img_popup' => 'impost/test/2.jpg',
'ext_img_small' => 'impost/test/3.jpg',
// 'img1' => 'impost/test/4.jpg',
// 'img2' => 'impost/test/5.jpg',
];
}
private function addItems()
{
// сохраняет новые товары
$s_item_array = sizeof($this->_items_add);
$a = 0;
while ($a < $s_item_array) {
echo 3333;
$db_item = $this->_oModel->getItem()->setData($this->_items_add[$a]);
echo 4444;
$save = true;
try {
$db_item->save();
echo 555;
} catch (Exception $ex) {
echo "add Exception\n";
print_r($ex);
$save = false;
}
if ($save) {
$this->_add_list .= $this->_items_add[$a]['id_external'] . ' ';
$this->_add_counter++;
} else {
$this->_error_counter++;
}
$a++;
}
}
public function clearCache()
{
$this->init();
$this->_oDb->query(DB_Query::getSnippet("TRUNCATE TABLE cms_cache"));
$this->_oDb->query(DB_Query::getSnippet("TRUNCATE TABLE cms_cache_content"));
$this->_oDb->query(DB_Query::getSnippet("TRUNCATE TABLE cms_cache_blocks"));
}
}
Если
$AMI_ENV_SETTINGS = [
'mode' => 'full'',
'disable_cache' => TRUE
];
то получаю сообщение ERROR: Wrong request. и Warning в логе об отсутствии файла ( файл одного из модулей сторонний )
Если
$AMI_ENV_SETTINGS = [
'mode' => 'fast',
'disable_cache' => TRUE
];
Call to a member function GetModule() on a non-object in _shared/code/hyper_modules/code/AmiCatalog_Items_Table.php on line 569
Через админку товары добавляются.
Думаю проблема в методах подключения к API и загрузкой модулей.
Плюс как загружать изображения в дополнительные поля, через API ?