【问题标题】:Magento, programmatically adding category to products in script with SQLMagento,使用 SQL 以编程方式将类别添加到脚本中的产品
【发布时间】:2012-10-28 23:43:36
【问题描述】:

我正在确定以编程方式将类别添加到产品的最佳方式。类别是从 magento 安装之外的第三方数据获得的,然后我解析这些数据并想要更新 magento: "catalog_category_product" 表,将找到的类别与其各自的产品相关联。

在“catalog_category_product”中将类别添加到产品关联作为测试后,该类别未出现在 magento 前端站点上。经过更多搜索后,我在“catalog_category_product_index”表中添加了一个条目,该产品现在显示在前端站点的正确类别中。

这就是所有必要的吗?恐怕还有与 Products 和 Categories 相关联的其他 magento 事件挂钩,它们可能正在更新我不知道的其他表。

我可以使用 SQL 将行添加到这两个表中而不会发生意外,还是我需要加载 magento 应用程序并通过 EAV 产品和类别模型执行此操作?我在正确的轨道上吗?

更新

我实际上并没有“导入”任何新数据。产品和类别已经在系统中就位。我也没有添加任何自定义观察者,并且正在使用原始产品和类别模型。

我正在解析文本文件以获取正确的值,然后使用普通的 SQL UPDATE 语句。

我只是想确保通过这条路线,我需要以编程方式更新的唯一表是“catalog_category_product”和“catalog_category_product_index”。

【问题讨论】:

    标签: php sql magento


    【解决方案1】:

    我个人不建议您使用纯 SQL 而是使用 API,例如:

    define('MAGENTO', realpath(dirname(__FILE__)));
    require_once MAGENTO . '/app/Mage.php';
    Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);
    
    // Load products 
    $products = Mage::getModel('catalog/product')
                ->setStoreId(Mage_Core_Model_App::ADMIN_STORE_ID)
                ->getAll();
    
    // Load categories
    $category = Mage::getModel('catalog/category');
                ->setStoreId(Mage_Core_Model_App::ADMIN_STORE_ID);
    $categories = $category->getAll();
    foreach($products as $product) {
        // Get relevant category 
        $product->setCategoryIds(array($category->getId()));
        $product->save();
    }
    

    上面的代码是一个非常粗略的示例,但只需稍加调整即可完成工作。如果您使用纯 SQL,则可能会破坏您的数据或关系,但使用 API Magento 应该可以为您处理。

    【讨论】:

    • 非常感谢。我想我会走这条路线的一些变化。
    【解决方案2】:

    您如何链接您的类别和产品?您是否编写了特定的代码?如果是:显示一些代码。

    无论如何,magento 提供了多种方式来满足您在 STANDARD 中的需求。在菜单中查看后台:System / Imports-Exports

    magento 有两种不同的方法:

    • Dataflow 配置文件:它适用于模型并且非常慢(但是通过在所有模型上调用 ->save() 和 ->load(),它可以确保您添加的任何观察者都会被调用!!)

    • 新的 Imports/Exports 配置文件:它适用于纯 SQL 查询并且速度非常快(但它是硬编码的,所以......告别您添加的任何加载/保存自定义观察者)

      李>

    正如您所说,Magento 将事件挂钩与产品和类别(以及所有其他模型)相关联。例如,在产品和类别的保存后回调中,magento 将重新索引所有关联的 INDEXES,例如您尝试手动添加的 catalog_category_index..

    所以:

    • 不要自己这样做,使用 magento 导入/导出配置文件、数据流配置文件或 API。
    • 根据您拥有的产品/类别的数量,选择要使用的正确导入(见上文,差异)。数据流较慢,但使用模型 ..

    【讨论】:

    • 谢谢,我已经更新了最初的帖子以尝试回答您的一些回复。我不能发布代码,因为它是专有的,但它是一个简单的 PHP 脚本,它处理文本数据并使用 SQL 来更新 magento 表。
    猜你喜欢
    • 2011-09-23
    • 1970-01-01
    • 1970-01-01
    • 2016-03-14
    • 1970-01-01
    • 2015-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多