【问题标题】:Update Magento SKU with EAN + Product ID使用 EAN + 产品 ID 更新 Magento SKU
【发布时间】:2015-06-08 10:01:43
【问题描述】:

我正在尝试使用由 EAN(破折号)产品 ID 组成的字符串批量更新我的产品的 SKU。

例如

EAN=1234 & ID=44

Result=1234-44

我很高兴使用可以复制/粘贴到 phpMyAdmin 中的 PHP 或 MySQL 语句。

请尽可能具体,因为您正在与一个完全的初学者打交道。

【问题讨论】:

  • 所有产品的 EAN 都会被修复吗?
  • 不确定您的意思,但每个产品都会有制造商提供的自己的 EAN 编号。实际上,我可能会忘记填写一些 EAN 数字,所以它可能是空白的。出于这个原因,我想最好像这样 ID-EAN 格式化 SKU(而不是 EAN-ID,如果 EAN 不存在,则使用不带破折号的 ID。例如 44 Sounds resonable?

标签: php mysql magento skus


【解决方案1】:

在您的 magento 根文件夹中创建一个文件 Updatesku.php 并在该文件中编写以下代码,然后使用以下 URL http://www.yourdomain.com/Updatesku.php 执行它

<?php
require_once('app/Mage.php'); 
umask(0);
Mage::app();
$_productCollection = Mage::getModel('catalog/product')
               ->getCollection()->addAttributeToSelect('*');
foreach($_productCollection as $_product)
{   
     try
     {
          $ean = $_product->getAttEan();
          $id  =  $_product->getEntityId();
          $newSku = $ean . '-' . $id;
          $_product->setSku($newSku);
          $_product->save();
     }
     catch(Exception $e){
          echo $e->getMessage();
     }
}

【讨论】:

  • 这是结果: SQLSTATE[40001]: Serialization failure: 1213 Deadlock found when trying to get lock;尝试重新启动事务,查询是:INSERT INTO catalog_product_entity_int (entity_type_id,attribute_id,store_id,entity_id,value) VALUES (?, ?, ?, ?, ?), (?, ? , ?, ?, ?), (?, ?, ?, ?, ?), (?, ?, ?, ?, ?), (?, ?, ?, ?, ?), (?, ?, ? , ?, ?), (?, ?, ?, ?, ?), (?, ?, ?, ?, ?), (?, ?, ?, ?, ?), (?, ?, ?, ? , ?), ON DUPLICATE KEY UPDATE value = VALUES(value).....等等。
  • 其实大部分的SKU都是按我的意愿修改的,但也有一些是空白的
  • @Pablo 检查我的第二个答案。这将以您想要的格式更新所有 SKus(保留为空白)。
【解决方案2】:

为了更新所有空白的SKUs,请在您的文件中进行以下更改。

<?php
    require_once('app/Mage.php'); 
    umask(0);
    Mage::app();
    $_productCollection = Mage::getModel('catalog/product')
                   ->getCollection()
                   ->addAttributeToFilter('sku',array('null' => true))
                   ->load();
    foreach($_productCollection as $_product)
    {   
         try
         {
              $ean = $_product->getAttEan();
              $id  =  $_product->getEntityId();
              $newSku = $ean . '-' . $id;
              $_product->setSku($newSku);
              $_product->save();
         }
         catch(Exception $e){
              echo $e->getMessage();
         }
    }

【讨论】:

    【解决方案3】:

    下面的代码应该可以......根据你的喜好调整它......

    更新

    <?php
    
    require_once('app/Mage.php'); //Path to Magento
    umask(0);
    Mage::app();
    
    // Loading products that satisfies the criteria
    $productList = Mage::getModel('catalog/product')
                    ->getCollection()
                    ->addAttributeToSelect('*')
                //  ->addAttributeToFilter('sku', array('like' => '%-T')) //if criteria
                    ; 
    
    //Writing to Magento Log
    $totalString = count($productList)." Products were found.";         
    Mage::log($totalString, null, 'listProducts.log');
    echo $totalString;
    
    if(count($productList)){
        foreach($productList as $product){
            //updating products now
            try{
                $EAN = $product->getAttEan(); // sample EAN, eg $EAN = '1234';
                $ID = $product->getEntityId(); // sample  ID, eg, $ID = $product->getSku();
                $newSku = $EAN . '-' . $ID;//build your new custom sku as per need
                $product->setSku($newSku);
                //update other if you want
    
                $product->save();
                $skuString = "Product with SKU : ".$product->getSku()." updated!!";
                Mage::log($skuString, null, 'listProducts.log');
                echo $skuString;
            }catch(Exception $ex){
                Mage::log($ex->getMessage(), null, 'listProducts.log');
                echo $ex->getMessage();
            }
        }
        echo "Custom Sku has been updated Succesfully";
    }
    
    ?>
    

    【讨论】:

    • 我应该将此代码粘贴到记事本中,将其命名为updatesku.php并运行它吗?对不起,我不知道我在做什么,,,
    • 查看更新后的答案。您可以将其保存在 Magento 安装根目录中的 PHP 文件中,然后从浏览器中运行。您需要根据需要填充 $EAN 和 $ID。在执行此操作之前进行数据库备份,以确保绝对安全。通过在完成后删除文件或重命名难以处理的文件名来解决安全问题。
    • 它不太奏效。页面加载了很长的白色,之后所有产品现在都有一个短划线(仅)用于 SKU
    • 你不需要知道EAN属性码att_ean吗?
    • 如何填写 EAN 和 ID?对不起,我不知道 php 和 MySQL
    猜你喜欢
    • 2023-03-06
    • 2014-07-04
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多