最近我将测试服务器上的magento从1.4.1.1升级到1.7.0.2
以前所有产品都是虚拟产品,没有真正的货运。
我通过shell升级了magento,除了这个问题之外它很顺利:
旧产品无法显示(无论是在前端还是后端),但在添加新产品时,它们在交叉销售/相关产品中可见(所有产品仅在此处可见)
我可以通过访问网址来编辑任何产品index.php / admin / catalog_product / edit / id / [id]
即使在保存/编辑产品后,它仍无法在admin / frontend上显示。
类别计数工作正常。
当我添加新产品时,它运行正常。 (继续id)
尝试完全清除var文件夹及其内容,重置文件权限,清空数据库日志表并完成我所知道的所有内容,但没有任何用处。
大约有4500种产品我负担不起。请帮我正确显示。
一些改进:
将此数据库与新创建的数据库进行比较后,我发现表catalog_product_entity_int
中没有与属性visibility
相关的条目。手动将它们添加到商店ID设置为admin的表中修复了问题。但试图通过PHP代码为所有产品做到这一点。尝试以下代码但无效:
<?php
require_once("app/Mage.php");
$store_id = '0';
Mage::app()->setCurrentStore($store_id);
$productModel = Mage::getModel('catalog/product');
$products = $productModel->getCollection()->getAllIds();
foreach($products as $productId)
{
$product = $productModel->load($productId);
$product->setVisibility(4);
$product->save();
echo $productId.' Finished<br>';
}
?>
但上面的代码不起作用。任何帮助????
出于某种原因,上面的代码没有用。所以我使用自定义代码将值直接插入数据库。
<?php
$con = mysql_connect($host, $user, $pass);
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db($db, $con);
$sql=mysql_query("SELECT DISTINCT(entity_id) AS pid FROM magentocatalog_product_entity_int ORDER BY entity_id DESC;");
while($row = mysql_fetch_array($sql)) {
if ($row['pid']<4152) { //Condition for Mangento 1.7.0.2 version products, below this pid, all are Magento 1.4.1.1. version products.
$insquery=mysql_query("INSERT INTO `magentocatalog_product_entity_int` (`value_id`, `entity_type_id`, `attribute_id`, `store_id`, `entity_id`, `value`) VALUES ('', 4, 89, 0, ".$row['pid'].", 0);");//89 is attribute id and 4 is default value for showing in admin. Tested against newly created product which has these values.
echo $row['pid']." Finished<br />";
}
}
mysql_close($con);
?>
产品现在显示在管理员中,但不在商店中显示。因此修改了上面的代码以为每个商店添加值。问题是固定的。但还是要确定这是正确的做法吗?
注意:在我的Magento 1.4.1.1中,上述两个属性可以从Attibute集中删除,但不能在Magento 1.7.0.2中删除。