Magento 2 SKU空格移除脚本失效问题求助
Magento 2.3.7-p2 SKU去空格脚本失效问题修复
问题现象
在Magento 2.3.7-p2版本中运行SKU去空格脚本,输入商品ID范围点击Trim按钮后,结果表格空无一物,商品SKU也完全没被修剪。
问题根源
- 循环判断逻辑完全错误:脚本里用循环计数器
$i和商品ID范围对比,$i只是循环的次数序号,和商品实际ID毫无关系,导致所有商品都被跳过处理。 - SKU处理逻辑冗余:用
explode拆分空格再循环拼接,不如直接用str_replace一次性替换所有空格高效可靠。 - 重复实例化ObjectManager:已经通过Bootstrap初始化过ObjectManager,函数内再次实例化既多余又不符合Magento开发规范。
- 表格表头列数不匹配:结果表格表头设置了
colspan='3',但实际只有2列,导致显示异常。
修复后的完整代码
<!DOCTYPE unspecified PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <?php use Magento\Framework\App\Bootstrap; require __DIR__ . '/app/bootstrap.php'; $params = $_SERVER; $bootstrap = Bootstrap::create(BP, $params); $objectManager = $bootstrap->getObjectManager(); $state = $objectManager->get('Magento\Framework\App\State'); $state->setAreaCode('global'); ?> <html> <head> <title>修剪商品SKU</title> </head> <body> <h1>修剪商品SKU</h1> <div class="main-div"> <form action="" method="post"> <table> <tr> <td> <label><?php echo "起始商品ID";?></label> </td> <td> <input type="text" name="from" id="from" value="<?php echo (isset($_POST['from']))?$_POST['from']:"" ?>"/> <label class="suggestion-from">起始商品ID</label> </td> </tr> <tr> <td> <label><?php echo "结束商品ID";?></label> </td> <td> <input type="text" name="to" id="to" value="<?php echo (isset($_POST['to']))?$_POST['to']:"" ?>"/> <label class="suggestion-from">结束商品ID</label> </td> </tr> <tr></tr> <tr> <td colspan="2"><input class="search-button" type="submit" title="修剪" value="修剪"/> </td> </tr> </table> </form> </div> </body> </html> <?php if($_POST){ $from = $_POST['from']; $to = $_POST['to']; // 修复表头列数不匹配问题 echo "<table border='1' class='result-table'><thead><tr><td colspan='2'>处理结果</td></tr></thead><tbody><tr><td>商品ID</td><td>修剪后的SKU</td></tr>"; trimSKU($from, $to, $objectManager); echo "</tbody></table>"; } // 传入已初始化的ObjectManager,避免重复实例化 function trimSKU($from, $to, $objectManager){ $productCollection = $objectManager->create('Magento\Catalog\Model\ResourceModel\Product\CollectionFactory'); $collection = $productCollection->create() ->addAttributeToSelect('sku') // 只加载sku字段,提升查询性能 ->addAttributeToFilter('entity_id', array( 'from'=>$from, 'to'=>$to )) ->load(); foreach($collection as $product){ $originalSku = $product->getSku(); // 直接替换所有空格,逻辑简洁高效 $trimmedSku = str_replace(' ', '', $originalSku); // 仅当SKU确实有变化时才保存,避免不必要的数据库操作 if($product->getId() && $originalSku !== $trimmedSku){ $product->setSku($trimmedSku)->save(); echo "<tr><td>". $product->getId()."</td><td>".$trimmedSku."</td></tr>"; } } } ?>
使用注意事项
- 将脚本保存为
trim_sku.php,上传到Magento网站根目录 - 访问
你的域名/trim_sku.php,输入商品ID范围后点击「修剪」按钮 - 执行完成后会展示所有被修改的商品ID和对应的修剪后SKU
- 操作完成后请及时删除该脚本,避免安全隐患
内容的提问来源于stack exchange,提问作者VGC
相关产品推荐
相关产品推荐

