我正在使用Magmi将产品导入我的Magento商店。即时创建类别并导入产品。一切都运作良好。
除了一件事:每次我运行Magmi导入时,Magento类别中产品的位置都设置为0.这样我就无法对我的产品进行排序。
我搜索过Magmi wiki和github,找到遇到同样问题的人,但没找到任何东西。
任何熟悉这个问题的人都有办法避免这个问题吗?
答案 0 :(得分:1)
我等了很长时间回答并自己做,这是一个修复:
我的修正工作方式不同 - 仅当您添加$ item [" category_reset"] == 1时,类别位置才会清除;产品参数的参数。
:1280 sting(在当前的magmi版本中)或在 magmi_productimportengine.php 中找到公共函数assignCategories($ pid,$ item)。 亚特
$cce = $this->tablename("catalog_category_entity");
$ccpt = $this->tablename("catalog_category_product");
添加下一个代码:
$sql = "SELECT $ccpt.*
FROM $ccpt
JOIN $cce ON $cce.entity_id=$ccpt.category_id
WHERE product_id=?";
$currentPositions = $this->selectAll($sql,$pid);
然后更改类别重置:
if (!isset($item["category_reset"]) || $item["category_reset"] == 1)
{...}
到
if (isset($item["category_reset"]) && $item["category_reset"] == 1)
{
$sql = "DELETE $ccpt.*
FROM $ccpt
JOIN $cce ON $cce.entity_id=$ccpt.category_id
WHERE product_id=?";
$this->delete($sql, $pid);
$currentPositions = array();
}
此定位后的更改块
foreach ($catids as $catdef)
{...}
为:
// find positive category assignments
if (is_array($currentPositions) && count($currentPositions)) {
foreach ($currentPositions as $currentPosition) {
$catPos[$currentPosition['category_id']] = $currentPosition['position'];
}
}
foreach ($catids as $catdef)
{
$a = explode("::", $catdef);
$catid = $a[0];
if (count($a) > 1 && $a[1] != 0) {
$catpos = $a[1];
}
else {
if (isset($catPos[$catid]) && $catPos[$catid] != 0) {
$catpos = $catPos[$catid];
}
else {
$catpos = "0";
}
}
$rel = getRelative($catid);
if ($rel == "-")
{
$ddata[] = $catid;
}
else
{
$cdata[$catid] = $catpos;
}
}
如果您不导入位置,您的当前位置将保存。如果为0,则保持为0.
用于明确实际位置 - 将参数添加到产品项目:
$item["category_reset"] == 1;
或更改字符串:
if ($item["category_reset"] == 1)
{ ....}
为:
if (!isset($item["category_reset"]) || $item["category_reset"] == 1)
{...}
答案 1 :(得分:1)
只有评论,但由于我是一位长期读者但从未设置过帐户,因此无法直接发表评论而无需代表。我知道这是一个老帖子,但我刚刚找到它并使用了AlexVegas的代码(谢谢!)。工作对我来说几乎没问题,但在我的情况下,我仍然希望类别完全重置为我的Magmi导入中的内容,但我希望这些位置保持不变。如上所述,除非您在导入中使用category_reset列,否则类别仅附加到现有类别,如果您这样做,它也会重置位置。
如果你像我一样,只希望保持完整位置,但每次允许Magmi覆盖类别,请使用上面的Alex代码,但稍微调整一下
他说改变的地方
if (!isset($item["category_reset"]) || $item["category_reset"] == 1)
{...}
到
if (isset($item["category_reset"]) && $item["category_reset"] == 1)
{
$sql = "DELETE $ccpt.*
FROM $ccpt
JOIN $cce ON $cce.entity_id=$ccpt.category_id
WHERE product_id=?";
$this->delete($sql, $pid);
$currentPositions = array();
}
不要改变它。就这么简单。在他的代码中,它会阻止类别重置,除非指定了列,这就是if语句被更改的原因。如果该列存在,它还会清除currentPositions数组,该数组存储类别中的当前位置,以便那些也被重置。
如果你要追加类别,除非你的导入中有category_reset,但又不想覆盖定位,请在答案中使用Alex的代码,但不要理会
$currentPositions = array();
这样它就不会覆盖存储类别中位置的数组
答案 2 :(得分:0)
不是实际的解决方案 -
您可以尝试使用此插件
http://www.magentocommerce.com/magento-connect/c3-category-position-import-export-extension.html/
答案 3 :(得分:0)
如果存在,您可以忽略UPDATE位置
类别创建者/导入者v0.2.5 在第1248行替换为
if (count($inserts) > 0) {
$sql = "INSERT IGNORE INTO $ccpt (`category_id`,`product_id`,`position`) VALUES ";
$sql .= implode(",", $inserts);
// $sql .= " ON DUPLICATE KEY IGNORE";
$this->insert($sql, $data);
unset($data);
}
答案 4 :(得分:-1)
Magmi wiki专门提到了项目定位功能here请参阅下面的引用文字。这似乎描述了您正在寻找的功能?我自己没有测试过。
引用:
项目定位
从magmi 0.7.18开始,使用项目定位增强了category_ids列。 0.2版本的类别导入器也支持此功能(因为类别导入器插件大致是category_ids生成器)
<强>示例强>
store,sku,....,categories
admin,00001,.....,cat name with \/ in the name and positioning::3
&lt; =这里我们&#34;逃脱&#34;带有反斜杠的树分隔符,该类别将被创建为&#34; catname,其名称和位置为&#34;
sku 00001将在类别
中设置位置3结束语