私の質問: Magento へのイメージの一括インポートに Magmi をどのように使用しますか?
私はそれをインストールしました。また、「画像属性プロセッサ」プラグインも取得しました。それで?sourceforge のドキュメントは薄く、Google でもあまり見つけられないようです。「ハウツー」、またはチュートリアルへのリンクをいただければ幸いです。
ありがとうございました。乾杯!
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>";