-3

次のことを行うのに助けが必要です。

インポートする新しいメーカーがまだ存在しないことを対象ストアから事前検証してメーカーのリストをインポートしようとしています (新しいメーカー名が既に存在する場合はスキップ) インポートされた場合、その新しいメーカー ID を取得します。

既存のメーカーを名前でチェックしたり、新しいメーカーIDを取得したりせずに、メーカーを追加するだけのコードがあります。コードはここにありますが、上記の機能が必要です。

どんな助けでも素晴らしいでしょう。前もって感謝します。

<?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();
}

?> 
4

1 に答える 1

1

簡単で汚いスクリプトですが、これはあなたが探しているものでなければなりません...

<?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>";
}
于 2012-06-03T18:33:09.343 に答える