У меня проблемы при попытке выпустить какой-то импорт XML для моего магазина через объект $product
, Когда я пытаюсь заполнить $product
члены, все работает отлично, это циклы по всей CCA. 800 продуктов у меня есть в моем XML. Но когда я добавляю метод save в конце цикла, он занимает только первые 10 продуктов и никогда больше не делает.
Я пытался поставить sleep(1)
после $product->save()
как я думал, что SQL разрывает соединение из-за запросов с большим доходом, но это не помогло ни тем, ни другим.
Ребята, вы знаете, почему это происходит? Ниже приведен мой код (я не вставляю сюда XML-файл, так как считаю, что это не важно).
Работа с Prestashop 1.6.0.9.
<?
include('../config/config.inc.php');
include('../init.php');
if (file_exists('exportgoods.xml'))
{
$xml = simplexml_load_file('exportgoods.xml');foreach ($xml->PRODUCTS->PRODUCT as $jmena_produktu)
{
if($jmena_produktu->PRODUCER == "2"):
$reference=$string = str_replace(' ', '', $jmena_produktu->NAME);
$id_product = (int)Db::getInstance()->getValue('SELECT id_product FROM '._DB_PREFIX_.'product WHERE reference = \''.pSQL($reference).'\'');
$product = $id_product ? new Product((int)$id_product, true) : new Product();
$product->reference = $reference;
$product->price = (float)$jmena_produktu->PRICEWITHDPH;
$product->id_category_default = 2;
$product->category = 15;
$product->name[1] = (string)$jmena_produktu->NAME;
$product->description[1] = (string)$jmena_produktu->LONGDESCRIPTION;
$product->description_short[1] = (string)$jmena_produktu->DESCRIPTION;
$product->link_rewrite[1] = Tools::link_rewrite($reference);
if (!isset($product->date_add) || empty($product->date_add))
$product->date_add = date('Y-m-d H:i:s');
$product->date_upd = date('Y-m-d H:i:s');
$id_product ? $product->updateCategories(array(2,15)) : $product->addToCategories(array(2,15));
#Here start my problem
$product->save();
echo 'Product <b>'.$product->name[1].'</b> '.($id_product ? 'updated' : 'created').'<br />';
endif;
}
}
else
{
exit('Failed to open exportgoods.xml.');
}
?>
Я помню, что у меня была похожая проблема, и я использовал simplexml_load_file()
тоже. Я не уверен, что это была проблема тогда, но здесь ничего не говорится:
$data = file_get_contents('exportgoods.xml');
$xml = new SimpleXMLElement($data);
Иногда элементы XML вложены друг в друга не так, как вы видите во время выполнения var_dump($xml)
или же print_r($xml)
в теме. XML — странный зверь, если вы спросите меня.
И что ты видишь, когда ты только распечатывать $jmena_produktu->NAME
, просто чтобы проверить, идет ли он дальше 10. Примерно так:
foreach ($xml->PRODUCTS->PRODUCT as $jmena_produktu)
{
echo $jmena_produktu->NAME . '</br>';
}
exit;
Обратите внимание exit
, поэтому он не выполняет другой код.
Других решений пока нет …