0

私の質問: Magento へのイメージの一括インポートに Magmi をどのように使用しますか?

私はそれをインストールしました。また、「画像属性プロセッサ」プラグインも取得しました。それで?sourceforge のドキュメントは薄く、Google でもあまり見つけられないようです。「ハウツー」、またはチュートリアルへのリンクをいただければ幸いです。

ありがとうございました。乾杯!

4

2 に答える 2

1

Magento への変換のために、製品データと画像のインポートにも Magmi を使い始めました。半日後、画像側で停止したため、適切に機能させることができませんでした。

いくつかの調査とグーグルを行い、画像をインポートするスクリプトに出くわしました。もうどこからかわかりませんが、ベースの作成者に小道具を!

あなたの質問を見て、私の苦労を思い出して、それをあなたと共有したいと思いました. それがあなたにも役立つことを願っています;)

スクリプトは、イメージ パスと sku を保持する Magento-db のテーブルを使用します。パスから画像を取得し、Magento db に直接インポートします。

実際のサイトで起動する前に、注意してテスト環境でテストドライブしてください。十分にテストして、magento データベースを台無しにしないことを確認してください。また、image_attribute_id が正しいことを確認することもできます。これは、私が気付いた Magento のバージョンごとに異なるためです。

それが役に立てば幸い:)

############################################################################
#
#  Change these variables to suit your store!
#
$_mediaBase = realpath('../media/catalog/product').'/';
$_imagesSrc = realpath('../media/import/_osc_media').'/';
// Image attribute_id's: image=79, small_image=80, thumbnail=81, gallery=82
$imgAttrIds = array(79,80,81,88);
$imageGalId = array(82);
require_once '../app/Mage.php';
#
############################################################################
#
#  Debug (true/false)
#
    $debug = false;
#
############################################################################

umask(0);
error_reporting(E_ALL);
ini_set('display_errors', '1');
Mage::setIsDeveloperMode(true);
Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);
$conn = Mage::getSingleton('core/resource')->getConnection('core_read');
$connW = Mage::getSingleton('core/resource')->getConnection('core_write');
//$images = scandir($_imagesSrc);
/*
*    Relocate the images into Magento friendly format
*/
$imgArr = array();
$imgSkuArr[] = array();
$imgSrcArr[] = array();

$sql = "SELECT sku, image_path
          FROM aa_image_paths";
$images = $conn->fetchAll($sql);
/**
 * $images =
 * [8] => Array(
 *   [sku] => ST-P006
 *   [image_path] => 47/ST-P006/Carying bag Heli P005A.jpg
 * )
 */
#debug
if($debug == true){
    echo '<p>Images: <pre>';
    print_r($images);
    echo '</pre>';
}//end: debug

//iterator
$y = $z = 0;

foreach($images as $image)
{
    $pathChunks = explode('/', $image['image_path']);
    $imgFile = end($pathChunks);

    $firstDir = strtolower($_mediaBase . substr($imgFile,0,1));
    $secondDir = strtolower($firstDir.'/' . substr($imgFile,1,1));
    $imageEntityDir = strtolower('/' . substr($imgFile,0,1) . '/' . substr($imgFile,1,1) . '/' . $imgFile);

    #debug
    if($debug == true){
        echo '<p>imgFile: ' . $imgFile . '<br />imageEntityDir: ' . $imageEntityDir  . '</p>';
    }//end: debug

    /**
     * Get the product_entity details
     */
    $sql = "SELECT *
          FROM catalog_product_entity
          WHERE sku = '" . $image['sku'] . "'";
    $_products = $conn->fetchAll($sql);

    #debug
    if($debug == true){
        echo '<p>SQL: ' . $sql . '<br />';
        echo '_products:<br />';
        echo '<pre>';
        print_r($_products);
        echo '</pre></p>';

        echo (isset($_products)) ? '<h6>products isset() = true</h6>' : '<h6>products isset() = false</h6>';
        echo (!empty($_products))? '<h6>products empty() = false</h6>' : '<h6>products empty() = true</h6>';
    }//end:debug

    if(!empty($_products))
    {
        if(file_exists($_imagesSrc . $image['image_path'])){

            $path = strtolower($secondDir . '/' . $imgFile);
            if(!file_exists($path)) {
                echo "Making $secondDir and copying to $path";
                /**
                 * If NOT debug than do copy and mkdir stuff!
                 */
                if($debug == false)
                {
                    if (!file_exists($secondDir)){
                        mkdir($secondDir, 0777, true);
                    }
                    copy($_imagesSrc . $image['image_path'], $path);

                }//end: debug FALSE


            }//end:if(!file_exists($path)) {

            #debug
            if($debug == true){
                echo '<p>_imagesSrc + image_path: ' . $_imagesSrc . $image['image_path'] . '<br />';
                echo 'image[image_path]' . $image['image_path'] . '<br />';
                echo 'path: ' . $path . '<br />';
                echo 'image[sku]: ' . $image['sku'] . '<br />';
                echo 'imgEntDir: ' . $imageEntityDir . '<br />';
                echo '</p>';
            }//end: debug

            /**
             * Create the array for the product with the data.
             * @var $product
             */
            $productData = array();
            $productData['sku'] = $image['sku'];
            $productData['entity_id'] = $_products[0]['entity_id'];
            $productData['imgSrc'] = $imageEntityDir;

            #debug
            if($debug == true){
                echo 'productData: ' .             $productData . '<br />';
                echo 'productData[sku]: ' .        $productData['sku'] . '<br />';
                echo 'productData[entity_id]: ' .  $productData['entity_id'] . '<br />';
                echo 'productData[imgSrc]: ' .     $productData['imgSrc'] . '<br />';
                echo 'productData: <pre>';
                var_dump($productData);
                echo '</pre></p>';
            }//end:debug

            /**
             *    Check the existing images
             */
            // General Base, small and thumb images
            $sql = "SELECT *
                FROM catalog_product_entity_varchar
                WHERE entity_id = '" . $productData['entity_id'] . "'
                AND attribute_id IN (".implode(",",$imgAttrIds).")";
            $_imageAssoc = $conn->fetchAll($sql);

            $existingImgs = array();
            foreach($_imageAssoc as $img)
            {
                $existingImgs[$img['entity_id']][$img['attribute_id']] = $img;
            }

            // Gallery Images
            $sql = "SELECT *
                    FROM catalog_product_entity_media_gallery
                    WHERE entity_id = '" . $productData['entity_id'] . "'";
            $_galleryImgs = $conn->fetchAll($sql);

            $existingGall = array();
            foreach($_galleryImgs as $img)
            {
                $existingGall[$img['entity_id']][$img['attribute_id']] = $img;

                #debug
                if($debug == true){
                    echo '<p>img print_r: <br /><pre>';
                    print_r($img);
                    echo '</pre></p>';
                }//end:debug
            }

            #debug
            if($debug == true){
                # print existingImg
                echo '<p>existingImgs print_r: <br /><pre>';
                print_r($existingImgs);
                echo '</pre></p>';
                # print existingGal
                echo '<p>existingImgs print_r: <br /><pre>';
                print_r($existingImgs);
                echo '</pre></p>';
            }//end:debug

            /**
             *    Then associate to the product itself.
             */
            //$insertData = array();
            //$skusToInsert = array();
            foreach($_products as $productArrId=>$product) {
                $missingImgs = $imgAttrIds;

                //$imageName = strtolower('/'.$product['sku'][0].'/'.$product['sku'][1].'/'.$product['sku'].'.jpg');
                $imageName = $productData['imgSrc'];

                #debug
                if($debug == true){
                    echo '<p>Imagename print_r: <br /><pre>';
                    print_r($imageName);
                    echo '</pre></p>';
                }//end:debug

                // Check if it has an image associated already ...
                if ( array_key_exists( $productData['entity_id'], $existingImgs) ) {
                    // Check which images exists and remove those already set
                    foreach ($imgAttrIds as $id=>$val) {
                        if ( array_key_exists( $val , $existingImgs[$productData['entity_id']] ) ) {
                            //if ( $existingImgs[$productData['entity_id']][$val]['value'] == "no_selection" ) {
                                $sql = "DELETE FROM catalog_product_entity_varchar WHERE value_id = '".$existingImgs[$productData['entity_id']][$val]['value_id']."'";

                                #debug
                                if($debug == true)
                                {
                                    echo 'SQL base images: <pre>' . $sql . '</pre>';
                                }
                                else
                                {
                                    //Execute the Query
                                    $connW->query($sql);
                                }

                            //} else {
                                unset($missingImgs[$id]);
                            //}

                        }//end:f ( array_key_exists( $val

                    }//end: foreach ($imgAttrIds as $id=>$val) {

                }//end;if ( array_key_exists( $productData['entity_id'], $existingImgs) ) {

                // Check if it has Gallery images associated already ...
                if ( array_key_exists( $productData['entity_id'], $existingGall) ) {
                    // Check which images exists and remove those already set
                    foreach ($imageGalId as $id=>$val) {
                        if ( array_key_exists( $val , $existingGall[$productData['entity_id']] ) ) {
                            //if ( $existingImgs[$productData['entity_id']][$val]['value'] == "no_selection" ) {
                            $sql = "DELETE FROM catalog_product_entity_media_gallery_value WHERE value_id = '".$existingGall[$productData['entity_id']][$val]['value_id']."'";

                            #debug
                            if($debug == true)
                            {
                                echo 'SQL gallery Value: <pre>' . $sql . '</pre>';
                            }
                            else
                            {
                                //Execute the Query
                                $connW->query($sql);
                            }

                            $sql = "DELETE FROM catalog_product_entity_media_gallery WHERE value_id = '".$existingGall[$productData['entity_id']][$val]['value_id']."'";

                            #debug
                            if($debug == true)
                            {
                                echo 'SQL gallery: <pre>' . $sql . '</pre>';
                            }
                            else
                            {
                                //Execute the Query
                                $connW->query($sql);
                            }

                            //} else {
                            unset($missingImgs[$id]);
                            //}

                        }//end:f ( array_key_exists( $val

                    }//end: foreach ($imgAttrIds as $id=>$val) {

                }//end;if ( array_key_exists( $productData['entity_id'], $existingImgs) ) {

                foreach ($imgAttrIds as $id=>$val) {

                    //Update the Media gallery items in DB
                    $sql = "INSERT INTO catalog_product_entity_varchar (entity_type_id, attribute_id, store_id, entity_id, value) VALUES " .
                           "(4, " . $val . ", 0, " . $productData['entity_id'] . ", '" . $imageName . "')";

                    #debug
                    if($debug == true)
                    {
                        echo 'SQL Insert1: <pre>' . $sql . '</pre>';
                    }
                    else
                    {
                        //Execute the Query
                        $connW->query($sql);
                    }
                    $y++;
                }//end:foreach ($imgAttrIds as $id=>$val) {

                foreach ($imageGalId as $id=>$val) {
                    //Update the
                    $sql = "INSERT INTO catalog_product_entity_media_gallery (attribute_id, entity_id, value) VALUES " .
                           "(".$val.", ".$productData['entity_id'].", '".$imageName."')";
                        //implode(",",$skusToInsert) . ";";

                    #debug
                    if($debug == true)
                    {
                        echo 'SQL Insert1: <pre>' . $sql . '</pre>';
                    }
                    else
                    {
                        //Execute the Query
                        $connW->query($sql);
                    }

                    //Update the Gallery value
                    /*
                    $sql = "INSERT INTO catalog_product_entity_media_gallery_value (value_id, store_id, position, disabled) VALUES " .
                            "((SELECT value_id FROM catalog_product_entity_media_gallery
                                WHERE attribute_id = '".$imageGalId."'
                                AND entity_id = '".$productData['entity_id']."'
                                AND value = '".$imageName."'),0, 1, 0)";
                    */
                    $sql = "INSERT INTO catalog_product_entity_media_gallery_value (value_id, store_id, position, disabled) " .
                            "SELECT value_id, 0 store_id, 1 position, 0 disabled
                                FROM catalog_product_entity_media_gallery
                                WHERE attribute_id = '".$val."'
                                AND entity_id = '".$productData['entity_id']."'
                                AND value = '".$imageName."'";
                    #debug
                    if($debug == true)
                    {
                        echo 'SQL Insert1: <pre>' . $sql . '</pre>';
                    }
                    else
                    {
                        //Execute the Query
                        $connW->query($sql);
                    }
                    $z++;
                }//end:foreach ($imgAttrIds as $id=>$val) {

            }//end:foreach($_products as $productArrId=>$product) {

        }//end: if(file_exists($_imagesSrc . $image['image_path']))

    }//end: if(!empty($_products))

    #debug
    if($debug == true){
        echo '<hr>';
    }//end:debug

}//end:foreach($images as $image)

echo "<h5>Updated ". $y ." images for products. </h5>";
echo "<h5>Updated ". $z ." images in MediaGallery</h5>";
于 2012-09-05T07:09:09.840 に答える