【问题标题】:Module that edits existing product names in magento?在magento中编辑现有产品名称的模块?
【发布时间】:2013-05-24 05:20:25
【问题描述】:

请我尝试在 magento 中创建一个模块,通过将现有产品名称与随机生成的数字连接来编辑产品名称。

$model = Mage::getModel('catalog/product') ->load(1111) //getting 产品型号

$collection = $model->getCollection(); //产品集合

foreach ($collection as $product) //循环获取产品

{

$model->load($product->getId());

$pname = $product->getName();

$this->model = Mage::getModel('catalog/product');

$new_name = $pname。 '.rand(1000,5000);

$this->model->setName($new_name);

}

这是我的代码,我正在尝试创建一个模块来实现此功能,而无需编辑核心文件或使用管理面板。

【问题讨论】:

  • 你应该可以使用magento api来做到这一点
  • @Orangepill 有我的代码,这是一项必须以这种方式完成的技术任务,而且也很紧迫。在此先感谢各位
  • 您对此有任何错误吗?
  • 我不知道您是要更改现有模型的名称还是创建新模型
  • 你添加了 $this->model->save(); ?

标签: php magento module


【解决方案1】:

抱歉,您的代码很丑。

如果你想使用集合(这是从对象列表访问数据的好方法),你不能使用 ->load() (非常昂贵并且应该只在访问单个对象的数据时使用,像产品页面)

试试这个代码:

    $collection = Mage::getModel('catalog/product')->getCollection(); //products collection
    $collection->addAttributeToSelect('name'); //retrieve only product name (optimising SQL)

    foreach ($collection as $product) //loop for getting products
    {
        $pname = $product->getName(); 
        $new_name = $pname.' '.rand(1000,5000);
        $product->setName($new_name);
        $product->save(); // you missed that
    }

如果您有大量的数字或产品,您还可以使用 SQL CONCAT() 函数进行单个 SQL 查询...

【讨论】:

  • 谢谢@Bixi,我刚刚开始从事magento模块开发,是的,您的代码确实更有意义。我已经设置了基本的目录结构,但是在使用该代码编辑产品名称之前应该调用哪个事件观察器?
  • 您可以使用catalog_product_save_before,但这需要您重新编写代码。如果您正在使用 ImportExport 来导入您的产品,请小心:不会调用模型事件。
  • 是的,它们包含在 config.xml 中
【解决方案2】:

类 Digital_GoogleMpn_Model_Observer {

public function googleMpn(Varien_Event_Observer $observer)
{

$product = $observer->getEvent()->getProduct();

    $pname = $product->getName();         

$google_mpn = rand(1000,5000);
  
    $new_name = "{$pname}.' '.{$google_mpn}"; 
  
    $product->setName($new_name);
  
    $product->save(); 

  
}      }

【讨论】:

  • @Bixi,这就是我重组当前代码的样子,但模块仍然无法工作。使用的观察者是在xml文件中设置的catalog_product_save_before。产品对象旨在将产品名称设置为$new_name variable
  • don't ->save() 在保存产品(before_save 观察者)之前你自己有你的正义。如果你这样做,你可能会陷入无限循环。如果它不起作用,请确保通过添加 Mage::log() 日志来调用您的观察者
  • 已删除 $product->save() 但代码仍然无法正常工作。那么如何使用 Mage::log() 呢?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-11
  • 2011-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多