You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Magento 2 SKU空格移除脚本失效问题求助

Magento 2.3.7-p2 SKU去空格脚本失效问题修复

问题现象

在Magento 2.3.7-p2版本中运行SKU去空格脚本,输入商品ID范围点击Trim按钮后,结果表格空无一物,商品SKU也完全没被修剪。

问题根源

  1. 循环判断逻辑完全错误:脚本里用循环计数器$i和商品ID范围对比,$i只是循环的次数序号,和商品实际ID毫无关系,导致所有商品都被跳过处理。
  2. SKU处理逻辑冗余:用explode拆分空格再循环拼接,不如直接用str_replace一次性替换所有空格高效可靠。
  3. 重复实例化ObjectManager:已经通过Bootstrap初始化过ObjectManager,函数内再次实例化既多余又不符合Magento开发规范。
  4. 表格表头列数不匹配:结果表格表头设置了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>";
            }
        } 
    }

?>

使用注意事项

  1. 将脚本保存为trim_sku.php,上传到Magento网站根目录
  2. 访问你的域名/trim_sku.php,输入商品ID范围后点击「修剪」按钮
  3. 执行完成后会展示所有被修改的商品ID和对应的修剪后SKU
  4. 操作完成后请及时删除该脚本,避免安全隐患

内容的提问来源于stack exchange,提问作者VGC

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 08:35:30