本文介绍了Magento编程:在检查现有重复项时导入制造商并获取manu。 ID的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要一些帮助来执行以下操作。

I need some help doing the following.

我正在尝试导入一个制造商列表,其中包含来自目标商店的预验证,即要导入的新制造商尚未存在(如果已经存在新的制造商名称,请跳过)并在导入时获取新的制造商ID。

I am trying to import a list of manufacturers with pre-verification from the targeted store that new manufacturer to be imported does not already exist (if new manufacturer name already exist, skip) and get its new manufacturer ID if imported.

我有代码只添加制造商没有检查现有制造商的名称,也没有获得新的制造商ID。代码在这里,但我需要上面提到的能力。

I have the code to just add manufacturer w/o checking for existing manufacturer by name nor getting the new manufacturer ID. The code is here, but I need the abilities thats stated above.

任何帮助都会很棒。提前致谢。

Any help would be great. Thanks in advance.

<?php
require_once 'app/Mage.php';
umask(0);
Mage::app('default');
$_manufacturers = file('manufacturers.txt');
$_attribute = Mage::getModel('eav/entity_attribute')->loadByCode('catalog_product', 'manufacturer');
$manufacturers = array('value' => array(), 'order' => array(), 'delete' => array());
$i = 0;
foreach($_manufacturers as $_manufacturer){
$i++;
$manufacturers['value']['option_' . $i] = array($_manufacturer);
}
$_attribute->setOption($manufacturers);
try{
$_attribute->save();
echo 'Manufacturer successfully imported';
}catch(Exception $e){
echo 'Import Error::'.$e->getMessage();
}

?> 


推荐答案

只是一个快速而又脏的脚本,但这应该是你要找的是什么...

Just a quick and dirty script, but this should be what you are looking for...

<?php

error_reporting(E_ALL | E_STRICT);    
ini_set('display_errors', 1); 


/*
 * Boostrap Magento
 */
$mageFilename = '../app/Mage.php';
require_once $mageFilename;        
Mage::setIsDeveloperMode(true);     
umask(0);

$mageRunCode = '';
$mageRunType = 'store';
Mage::init($mageRunCode, $mageRunType);

/*
 * Set up required data
 */
$newManufacturers = file('manufacturers.txt', FILE_SKIP_EMPTY_LINES | FILE_IGNORE_NEW_LINES);
$newManufacturers = array_unique($newManufacturers);

$attribute = Mage::getModel('eav/entity_attribute')
                ->loadByCode('catalog_product', 'manufacturer');

$valuesCollection = Mage::getResourceModel('eav/entity_attribute_option_collection')
            ->setAttributeFilter($attribute->getData('attribute_id'))
            ->setStoreFilter(0, false)
            ->getColumnValues('value');

$installer = new Mage_Eav_Model_Entity_Setup('core_setup'); 

/*
 * Add new attributes
 */
$addedManufacturers      = array();
$skippedManufacturers    = array();

$i = count($valuesCollection);
foreach($newManufacturers as $manufacturer) {

    // If the value already exists then skip to next  
    if (in_array($manufacturer, $valuesCollection)) {
        $skippedManufacturers[] = $manufacturer;
        continue;
    }

    //If we have reached here then lets add the new attribute option
    $newOption = array();
    $newOption['attribute_id'] = $attribute->getData('attribute_id');
    $newOption['value']['option_'.++$i][0] = $manufacturer;
    $installer->addAttributeOption($newOption);

    $optionValue = Mage::getResourceModel('eav/entity_attribute_option_collection')
            ->setAttributeFilter($attribute->getId())
            ->setStoreFilter(0, false)
            ->addFilter('value_id', $installer->getConnection()->lastInsertId())   
            ->getColumnValues('option_id');

    $addedManufacturers[] = $optionValue[0];
}

if (count($addedManufacturers)) {
    echo "<h2>Manufacturers Added</h2><ul>";
    foreach($addedManufacturers as $added) {
        echo "<li>" . $added . "</li>";
    }
    echo "</ul>";
}

if (count($skippedManufacturers)) {
    echo "<h2>Manufacturers Skipped</h2><ul>";
    foreach($skippedManufacturers as $skipped) {
        echo "<li>" . $skipped . "</li>";
    }
    echo "</ul>";
}

这篇关于Magento编程:在检查现有重复项时导入制造商并获取manu。 ID的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-29 07:44