最近我将测试服务器上的 magento 从 1.4.1.1 升级到 1.7.0.2
以前所有产品都是虚拟产品,没有真正的发货。
我通过shell升级了magento,除了这个问题之外它很顺利:
旧产品不可见(无论是在前端还是后端),但在添加新产品时它们在交叉销售/相关产品中可见(所有产品仅在此处可见)
我可以通过访问 url index.php/admin/catalog_product/edit/id/[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 中,以上两个属性可以从属性集中删除,但在 Magento 1.7.0.2 中不能。