Prestashop 1.6.0.9 - 循环中的$product->save()只需要10个产品


Prestashop 1.6.0.9 - $product->save() in loop takes only 10 products

我在尝试通过对象$product为我的商店导入一些xml时遇到问题。当我尝试填写$product成员时,一切正常,它在整个 cca 中循环。我的 xml 中有 800 种产品。但是当我在循环结束时添加方法保存时,它只需要前 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,因此它不执行其他代码。