Prestashop 1.6.0.9 - 循环中的 $product->save() 只需要 10 个产品
Posted
技术标签:
【中文标题】Prestashop 1.6.0.9 - 循环中的 $product->save() 只需要 10 个产品【英文标题】:Prestashop 1.6.0.9 - $product->save() in loop takes only 10 products 【发布时间】:2015-03-13 18:08:48 【问题描述】:我在尝试通过对象 $product
为我的商店导入一些 xml 时遇到问题。当我尝试填写 $product
成员时,一切正常,它在 cca 上循环。我的 xml 中有 800 种产品。但是当我在循环结束时添加方法 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.');
?>
【问题讨论】:
你的问题解决了吗? 【参考方案1】:我记得有一个类似的问题,我也在使用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
,所以它不会执行其他代码。
【讨论】:
以上是关于Prestashop 1.6.0.9 - 循环中的 $product->save() 只需要 10 个产品的主要内容,如果未能解决你的问题,请参考以下文章
Prestashop 数据库中的新 javascript 变量