Posting in the Magento forums has been disabled pending the implementation of a new and improved forum solution which should better serve the community.

For new questions please post at magento.stackexchange.com, the community-run support site for the Magento community. We will be providing updates on the new forum solution soon. For questions or concerns please email community@magento.com.

Magento Forum

Using Remote Image URLs
 
NELAGeek
Sr. Member
 
Avatar
Total Posts:  193
Joined:  2010-01-23
US
 
imwy2cool - 14 December 2010 10:16 AM

mike305 - 02 August 2010 04:41 PM
I need some help…

How do enable the RADIO BUTTONS in a bulk upload ..please SEE ATTACHED IMAGE!

I am able to upload everything but cant seem to figure out how to enable those buttons.

Thank You

I’m having this same issue. Import goes well with all data, but the No image radio buttons are checked on import. Why is defaulting to have no image? I could manually go through and check all of the radio buttons, but it would take quite a long time.

Any help would be very much appreciated.

Here is a sample of the import csv i used.  Its about all i have left hanging around.  Haven’t really messed with Magento in a while.  I think i had the same issue, also. I had to set the store field to admin and status field has to be Enabled.  Hope this helps.

File Attachments
productfeed_sample.txt  (File Size: 2KB - Downloads: 367)
 
Magento Community Magento Community
Magento Community
Magento Community
 
imwy2cool
Sr. Member
 
Total Posts:  164
Joined:  2009-05-07
 

Thank you, I figured this out last night after much trial and error. I compared some of my other imports that had been successful and realized that I needed to change the store to admin. While I’m glad this worked, what a pain that it wouldn’t check off the radio buttons automatically when you import pictures to a store view. This is very frustrating and I think it probably needs to be considered a bug. I loath to think of when I want to import to a store view . . . maybe I’m missing something here.

 
Magento Community Magento Community
Magento Community
Magento Community
 
VanGilsWeb
Sr. Member
 
Total Posts:  97
Joined:  2010-03-26
 
jackiellowery - 08 February 2010 07:14 AM

This will basically download the images record by record to the ‘/media/import’ directory and import the image when you run the Import All Products profile.
I use the following field names for the image fields and populate them with the appropriate urls:  image, small_image, thumbnail

Open ‘/httpdocs/app/code/core/Mage/Catalog/Model/Convert/Adapter/Product.php’ and change the following code:

foreach ($imageData as $file => $fields{
            
try {
        $product
->addImageToMediaGallery(Mage::getBaseDir('media') . DS 'import' $html_filename$fields);
            
}
            
catch (Exception $e{}
        }

to look like this:

foreach ($imageData as $file => $fields{
        $path_parts 
pathinfo($file);
        
$html_filename DS $path_parts['basename'];
        
$fullpath Mage::getBaseDir('media') . DS 'import' $html_filename;
        try 
{
        $ch 
curl_init ($file);
            
curl_setopt($chCURLOPT_HEADER0);
                
curl_setopt($chCURLOPT_RETURNTRANSFER1);
                
curl_setopt($chCURLOPT_BINARYTRANSFER,1);
                
$rawdata=curl_exec($ch);
            
curl_close ($ch);
                if(
file_exists($fullpath)) {
            unlink($fullpath)
;
            
}
            $fp 
fopen($fullpath,'x');
                
fwrite($fp$rawdata);
                
fclose($fp);
        
}
        
catch (Exception $e{}
            
try {
        $product
->addImageToMediaGallery(Mage::getBaseDir('media') . DS 'import' $html_filename$fields);
            
}
            
catch (Exception $e{}
        }

Now just run the regular product import profile and import the csv with the urls for the image fields.
If someone can make these changes w/o modifying the core Magento code, please do so and let me know how.

Does this mean that the image is copied from the remote url to your own magento server? (So you only have to import the remote urls for each product once and if the remote url was deleted the images will still remain on your own server?)

Or does this code make a link to the remote url?

 
Magento Community Magento Community
Magento Community
Magento Community
 
NELAGeek
Sr. Member
 
Avatar
Total Posts:  193
Joined:  2010-01-23
US
 
VanGilsWeb - 13 January 2011 03:17 AM


Does this mean that the image is copied from the remote url to your own magento server? (So you only have to import the remote urls for each product once and if the remote url was deleted the images will still remain on your own server?)

Or does this code make a link to the remote url?

Yes, the image is copied to your server.  You would have to manually delete the images if you didn’t need them after importing.  The import does overwrite an image if an image with the same name already exists.

 
Magento Community Magento Community
Magento Community
Magento Community
 
Justin W.
Jr. Member
 
Total Posts:  3
Joined:  2009-02-23
 

I used the modified import code with partial success. Some of the source image names contain spaces.

ex: http://somedomain.com/images/products/1023 Large Helmet.jpg

After the import all the images without spaces copied over and are working great. But images with spaces are being copied to the server with the spaces replaced with underscores and they are empty image files.

ex: http://mydomain.com/shop/media/catalog/product/2/7/270271023_Large_Helmet.jpg

Is there a patch for the curl code that would fix this problem?

Thanks.

 
Magento Community Magento Community
Magento Community
Magento Community
 
NELAGeek
Sr. Member
 
Avatar
Total Posts:  193
Joined:  2010-01-23
US
 

For anyone trying to use my method, unless you just need to copy the images locally to your server, a better method is posted here.  I haven\’t tested it, but it sounds like a much better idea.

http://www.magentocommerce.com/boards/viewreply/47889/

 
Magento Community Magento Community
Magento Community
Magento Community
 
NELAGeek
Sr. Member
 
Avatar
Total Posts:  193
Joined:  2010-01-23
US
 
Justin W. - 13 January 2011 09:34 PM

I used the modified import code with partial success. Some of the source image names contain spaces.

ex: http://somedomain.com/images/products/1023 Large Helmet.jpg

After the import all the images without spaces copied over and are working great. But images with spaces are being copied to the server with the spaces replaced with underscores and they are empty image files.

ex: http://mydomain.com/shop/media/catalog/product/2/7/270271023_Large_Helmet.jpg

Is there a patch for the curl code that would fix this problem?

Thanks.

Try replacing this:

$ch curl_init ($file);

With this:

$ch curl_init (htmlentities($file));
 
Magento Community Magento Community
Magento Community
Magento Community
 
NELAGeek
Sr. Member
 
Avatar
Total Posts:  193
Joined:  2010-01-23
US
 

OK. I added the code to the new 1.5.0.1 ver. of Magento and successfully ran some imports.  I also fixed the issue with having spaces in the names of the urls.

Here’s what to do:

In ‘app\code\core\Mage\Catalog\Model\Convert\Adapter\Product.php’ beginning on line 691

Replace this

foreach ($product->getMediaAttributes() as $mediaAttributeCode => $mediaAttribute{
    
if (isset($importData[$mediaAttributeCode])) {
       $file 
$importData[$mediaAttributeCode];
       if (
trim($file) && !$mediaGalleryBackendModel->getImage($product$file)) {
            $arrayToMassAdd[] 
= array('file' => trim($file), 'mediaAttribute' => $mediaAttributeCode);
        
}
    }
}

With this

foreach ($product->getMediaAttributes() as $mediaAttributeCode => $mediaAttribute{
     
if (isset($importData[$mediaAttributeCode])) {
         $file 
$importData[$mediaAttributeCode];
         if (
trim($file) && !$mediaGalleryBackendModel->getImage($product$file)) {
             
// Start Of Code To Import Images From Urls
             
$path_parts pathinfo($file);
             
$html_filename DS $path_parts['basename'];
             
$fullpath Mage::getBaseDir('media') . DS 'import' $html_filename;
             
$ch curl_init(str_replace(" ","%20",$file)); 
             
curl_setopt($chCURLOPT_HEADER0);
             
curl_setopt($chCURLOPT_RETURNTRANSFER1);
             
curl_setopt($chCURLOPT_BINARYTRANSFER,1);
             
$rawdata=curl_exec($ch);
             
curl_close ($ch);
             if(
file_exists($fullpath){
                 unlink($fullpath)
;
             
}
             $fp 
fopen($fullpath,'x');
             
fwrite($fp$rawdata);
             
fclose($fp);
             
$arrayToMassAdd[] = array('file' => trim($html_filename), 'mediaAttribute' => $mediaAttributeCode);
             
// End Of Code To Import Images From URLs
         
}
     }
}
 
Magento Community Magento Community
Magento Community
Magento Community
 
TunerzEdge
Jr. Member
 
Total Posts:  4
Joined:  2009-09-08
 
jackiellowery - 20 February 2011 09:45 AM

OK. I added the code to the new 1.5.0.1 ver. of Magento and successfully ran some imports.  I also fixed the issue with having spaces in the names of the urls.

Here’s what to do:

In ‘app\code\core\Mage\Catalog\Model\Convert\Adapter\Product.php’ beginning on line 691

Replace this

foreach ($product->getMediaAttributes() as $mediaAttributeCode => $mediaAttribute{
    
if (isset($importData[$mediaAttributeCode])) {
       $file 
$importData[$mediaAttributeCode];
       if (
trim($file) && !$mediaGalleryBackendModel->getImage($product$file)) {
            $arrayToMassAdd[] 
= array('file' => trim($file), 'mediaAttribute' => $mediaAttributeCode);
        
}
    }
}

With this

foreach ($product->getMediaAttributes() as $mediaAttributeCode => $mediaAttribute{
     
if (isset($importData[$mediaAttributeCode])) {
         $file 
$importData[$mediaAttributeCode];
         if (
trim($file) && !$mediaGalleryBackendModel->getImage($product$file)) {
             
// Start Of Code To Import Images From Urls
             
$path_parts pathinfo($file);
             
$html_filename DS $path_parts['basename'];
             
$fullpath Mage::getBaseDir('media') . DS 'import' $html_filename;
             
$ch curl_init(str_replace(" ","%20",$file)); 
             
curl_setopt($chCURLOPT_HEADER0);
             
curl_setopt($chCURLOPT_RETURNTRANSFER1);
             
curl_setopt($chCURLOPT_BINARYTRANSFER,1);
             
$rawdata=curl_exec($ch);
             
curl_close ($ch);
             if(
file_exists($fullpath)) {
                 unlink($fullpath)
;
             
}
             $fp 
fopen($fullpath,'x');
             
fwrite($fp$rawdata);
             
fclose($fp);
             
$arrayToMassAdd[] = array('file' => trim($html_filename)'mediaAttribute' => $mediaAttributeCode);
             
// End Of Code To Import Images From URLs
         
}
     }
}

AWESOME! Works perfectly! Thanks for the update!!

 
Magento Community Magento Community
Magento Community
Magento Community
 
NELAGeek
Sr. Member
 
Avatar
Total Posts:  193
Joined:  2010-01-23
US
 

This extension works great for me. Cheap too.

External Images 1.5.0.1 by Toybanana Software

 
Magento Community Magento Community
Magento Community
Magento Community
 
lukso
Jr. Member
 
Total Posts:  26
Joined:  2009-12-05
 

Hi,
I buy the modul and it\’s working fine. But now I have a problem with Magenot Lightbox extention -> I can not \"exlude\" images and they are appeared twice .
Any help pleasee.

 
Magento Community Magento Community
Magento Community
Magento Community
 
NELAGeek
Sr. Member
 
Avatar
Total Posts:  193
Joined:  2010-01-23
US
 
lukso - 15 April 2011 03:07 AM

Hi,
I buy the modul and it\’s working fine. But now I have a problem with Magenot Lightbox extention -> I can not \"exlude\" images and they are appeared twice .
Any help pleasee.

Thanks for the feedback Lukso.  It’s surprising that noone has noticed this yet.  We’re working on a fix for it. Should be completed by today.

 
Magento Community Magento Community
Magento Community
Magento Community
 
VanGilsWeb
Sr. Member
 
Total Posts:  97
Joined:  2010-03-26
 

At this very moment I use the solution that Jackiellowery gave. Although it works great, I have the following problem…

Jackiellowery\’s code copies the images from the remote url to the media/catalog/product directory on our magento server. Because we have about 20.000 products, the server get\’s full. Hiring a bigger server would be too expensive.

That\’s why we would like to display the product images remotely, and not copy them anymore to our server. Like this solution:
http://www.magentocommerce.com/boards/viewthread/6947/#t47889

But the disadvantage of that solution is, you have to edit every single file where images are being displayed. And there are a lot of files where images are being displayed (view, list, upsell, crosssell, relative, compare, cart, search, etc etc etc..... and don\’t forget all blocks!)

That\’s why I\’m figuring.. would it be possible to alter the app>code>core in such a way, that you don\’t have to edit al those files???

I already gave it a shot, but I got stuck. This is what I figured out… (I use magento 1.5 by the way)

In template>catalog>product>view.phtml it calls the image box with:

<?php echo $this->getChildHtml(\'media\'?>

In template>catalog>product>view>media.phtml it calls the image with:

echo $_helper->productAttribute($_product$_img\'image\');
where…
$_helper $this->helper(\'catalog/output\');
$_product $this->getProduct();
$_img \'<img id=\"image\" class=\"photo fn\" src=\"\'.$this->helper(\'catalog/image\')->init($_product\'image\').\'\" alt=\"\'.$this->htmlEscape($this->getImageLabel()).\'\" title=\"\'.$this->htmlEscape($this->getImageLabel()).\'\" />\';

In app>code>core>Mage>Catalog>Helper>Output.php is calls the attribute with:

public function productAttribute($product$attributeHtml$attributeName)
    
{
        $attribute 
Mage::getSingleton(\'eav/config\')->getAttribute(\'catalog_product\'$attributeName);
        if (
$attribute && $attribute->getId() && ($attribute->getFrontendInput() != \'media_image\')
            && (!
$attribute->getIsHtmlAllowedOnFront() && !$attribute->getIsWysiwygEnabled())) {
                $attributeHtml 
$this->htmlEscape($attributeHtml);
                if (
$attribute->getFrontendInput() == \'textarea\'{
                    $attributeHtml 
nl2br($attributeHtml);
                
}
        }
        
if ($attribute->getIsHtmlAllowedOnFront() && $attribute->getIsWysiwygEnabled()) {
            
if (Mage::helper(\'catalog\')->isUrlDirectivesParsingAllowed()) {
                $attributeHtml 
$this->_getTemplateProcessor()->filter($attributeHtml);
            
}
        }
        $attributeHtml 
$this->process(\'productAttribute\'$attributeHtml, array(
            
\'product\'   => $product,
            
\'attribute\' => $attributeName
        
));
        return 
$attributeHtml;
    
}

But I don\’t understand what the above function does, so this is where I got stuck. Who is helping me out????

 
Magento Community Magento Community
Magento Community
Magento Community
 
VanGilsWeb
Sr. Member
 
Total Posts:  97
Joined:  2010-03-26
 

Gave it another shot via list.phtml…

In template>catalog>product>list.phtml

<img src="<?php echo $this->helper('catalog/image')->init($_product, 'small_image')->resize(170); ?>" />

This redirects to the function “init” in app>code>core>Mage>Catalog>Helper>Image.php

public function init(Mage_Catalog_Model_Product $product$attributeName$imageFile=null)
    
{
        $this
->_reset();
        
$this->_setModel(Mage::getModel('catalog/product_image'));
        
$this->_getModel()->setDestinationSubdir($attributeName);
        
$this->setProduct($product);

        
$this->setWatermark(Mage::getStoreConfig("design/watermark/{$this->_getModel()->getDestinationSubdir()}_image"));
        
$this->setWatermarkImageOpacity(Mage::getStoreConfig("design/watermark/{$this->_getModel()->getDestinationSubdir()}_imageOpacity"));
        
$this->setWatermarkPosition(Mage::getStoreConfig("design/watermark/{$this->_getModel()->getDestinationSubdir()}_position"));
        
$this->setWatermarkSize(Mage::getStoreConfig("design/watermark/{$this->_getModel()->getDestinationSubdir()}_size"));

        if (
$imageFile{
            $this
->setImageFile($imageFile);
        
}
        
else {
            
// add for work original size
            
$this->_getModel()->setBaseFile( $this->getProduct()->getData($this->_getModel()->getDestinationSubdir()) );
        
}
        
return $this;
    
}

This redirects to the function “setBaseFile” in app>code>core>Mage>Catalog>Model>Product>Image.php

public function setBaseFile($file)
    {
        $this
->_isBaseFilePlaceholder false;

        if ((
$file) && (!== strpos($file'/'0))) {
            $file 
'/' $file;
        
}
        $baseDir 
Mage::getSingleton('catalog/product_media_config')->getBaseMediaPath();

        if (
'/no_selection' == $file{
            $file 
null;
        
}
        
if ($file{
            
if ((!$this->_fileExists($baseDir $file)) || !$this->_checkMemory($baseDir $file)) {
                $file 
null;
            
}
        }
        
if (!$file{
            
// check if placeholder defined in config
            
$isConfigPlaceholder Mage::getStoreConfig("catalog/placeholder/{$this->getDestinationSubdir()}_placeholder");
            
$configPlaceholder   '/placeholder/' $isConfigPlaceholder;
            if (
$isConfigPlaceholder && $this->_fileExists($baseDir $configPlaceholder)) {
                $file 
$configPlaceholder;
            
}
            
else {
                
// replace file with skin or default skin placeholder
                
$skinBaseDir     Mage::getDesign()->getSkinBaseDir();
                
$skinPlaceholder "/images/catalog/product/placeholder/{$this->getDestinationSubdir()}.jpg";
                
$file $skinPlaceholder;
                if (
file_exists($skinBaseDir $file)) {
                    $baseDir 
$skinBaseDir;
                
}
                
else {
                    $baseDir 
Mage::getDesign()->getSkinBaseDir(array('_theme' => 'default'));
                    if (!
file_exists($baseDir $file)) {
                        $baseDir 
Mage::getDesign()->getSkinBaseDir(array('_theme' => 'default''_package' => 'base'));
                    
}
                }
            }
            $this
->_isBaseFilePlaceholder true;
        
}

        $baseFile 
$baseDir $file;

        if ((!
$file) || (!file_exists($baseFile))) {
            
throw new Exception(Mage::helper('catalog')->__('Image file was not found.'));
        
}

        $this
->_baseFile $baseFile;

        
// build new filename (most important params)
        
$path = array(
            
Mage::getSingleton('catalog/product_media_config')->getBaseMediaPath(),
            
'cache',
            
Mage::app()->getStore()->getId(),
            
$path[] $this->getDestinationSubdir()
        );
        if((!empty(
$this->_width)) || (!empty($this->_height)))
            
$path[] "{$this->_width}x{$this->_height}";

        
// add misk params as a hash
        
$miscParams = array(
                (
$this->_keepAspectRatio  '' 'non') . 'proportional',
                (
$this->_keepFrame        '' 'no')  . 'frame',
                (
$this->_keepTransparency '' 'no')  . 'transparency',
                (
$this->_constrainOnly 'do' 'not')  . 'constrainonly',
                
$this->_rgbToString($this->_backgroundColor),
                
'angle' $this->_angle,
                
'quality' $this->_quality
        
);

        
// if has watermark add watermark params to hash
        
if ($this->getWatermarkFile(){
            $miscParams[] 
$this->getWatermarkFile();
            
$miscParams[] $this->getWatermarkImageOpacity();
            
$miscParams[] $this->getWatermarkPosition();
            
$miscParams[] $this->getWatermarkWidth();
            
$miscParams[] $this->getWatermarkHeigth();
        
}

        $path[] 
md5(implode('_'$miscParams));

        
// append prepared filename
        
$this->_newFile implode('/'$path) . $file// the $file contains heading slash

        
return $this;
    
}

Would it be possible to edit something in this function, to display the remote url image???

 
Magento Community Magento Community
Magento Community
Magento Community
 
NELAGeek
Sr. Member
 
Avatar
Total Posts:  193
Joined:  2010-01-23
US
 
VanGilsWeb - 29 June 2011 12:11 AM

Gave it another shot via list.phtml…

In template>catalog>product>list.phtml

<img src="<?php echo $this->helper('catalog/image')->init($_product, 'small_image')->resize(170); ?>" />

This redirects to the function “init” in app>code>core>Mage>Catalog>Helper>Image.php
public function init(Mage_Catalog_Model_Product $product$attributeName$imageFile=null)
    
{
        $this
->_reset();
        
$this->_setModel(Mage::getModel('catalog/product_image'));
        
$this->_getModel()->setDestinationSubdir($attributeName);
        
$this->setProduct($product);

        
$this->setWatermark(Mage::getStoreConfig("design/watermark/{$this->_getModel()->getDestinationSubdir()}_image"));
        
$this->setWatermarkImageOpacity(Mage::getStoreConfig("design/watermark/{$this->_getModel()->getDestinationSubdir()}_imageOpacity"));
        
$this->setWatermarkPosition(Mage::getStoreConfig("design/watermark/{$this->_getModel()->getDestinationSubdir()}_position"));
        
$this->setWatermarkSize(Mage::getStoreConfig("design/watermark/{$this->_getModel()->getDestinationSubdir()}_size"));

        if (
$imageFile{
            $this
->setImageFile($imageFile);
        
}
        
else {
            
// add for work original size
            
$this->_getModel()->setBaseFile( $this->getProduct()->getData($this->_getModel()->getDestinationSubdir()) );
        
}
        
return $this;
    
}

This redirects to the function “setBaseFile” in app>code>core>Mage>Catalog>Model>Product>Image.php
public function setBaseFile($file)
    {
        $this
->_isBaseFilePlaceholder false;

        if ((
$file) && (!== strpos($file'/'0))) {
            $file 
'/' $file;
        
}
        $baseDir 
Mage::getSingleton('catalog/product_media_config')->getBaseMediaPath();

        if (
'/no_selection' == $file{
            $file 
null;
        
}
        
if ($file{
            
if ((!$this->_fileExists($baseDir $file)) || !$this->_checkMemory($baseDir $file)) {
                $file 
null;
            
}
        }
        
if (!$file{
            
// check if placeholder defined in config
            
$isConfigPlaceholder Mage::getStoreConfig("catalog/placeholder/{$this->getDestinationSubdir()}_placeholder");
            
$configPlaceholder   '/placeholder/' $isConfigPlaceholder;
            if (
$isConfigPlaceholder && $this->_fileExists($baseDir $configPlaceholder)) {
                $file 
$configPlaceholder;
            
}
            
else {
                
// replace file with skin or default skin placeholder
                
$skinBaseDir     Mage::getDesign()->getSkinBaseDir();
                
$skinPlaceholder "/images/catalog/product/placeholder/{$this->getDestinationSubdir()}.jpg";
                
$file $skinPlaceholder;
                if (
file_exists($skinBaseDir $file)) {
                    $baseDir 
$skinBaseDir;
                
}
                
else {
                    $baseDir 
Mage::getDesign()->getSkinBaseDir(array('_theme' => 'default'));
                    if (!
file_exists($baseDir $file)) {
                        $baseDir 
Mage::getDesign()->getSkinBaseDir(array('_theme' => 'default''_package' => 'base'));
                    
}
                }
            }
            $this
->_isBaseFilePlaceholder true;
        
}

        $baseFile 
$baseDir $file;

        if ((!
$file) || (!file_exists($baseFile))) {
            
throw new Exception(Mage::helper('catalog')->__('Image file was not found.'));
        
}

        $this
->_baseFile $baseFile;

        
// build new filename (most important params)
        
$path = array(
            
Mage::getSingleton('catalog/product_media_config')->getBaseMediaPath(),
            
'cache',
            
Mage::app()->getStore()->getId(),
            
$path[] $this->getDestinationSubdir()
        );
        if((!empty(
$this->_width)) || (!empty($this->_height)))
            
$path[] "{$this->_width}x{$this->_height}";

        
// add misk params as a hash
        
$miscParams = array(
                (
$this->_keepAspectRatio  '' 'non') . 'proportional',
                (
$this->_keepFrame        '' 'no')  . 'frame',
                (
$this->_keepTransparency '' 'no')  . 'transparency',
                (
$this->_constrainOnly 'do' 'not')  . 'constrainonly',
                
$this->_rgbToString($this->_backgroundColor),
                
'angle' $this->_angle,
                
'quality' $this->_quality
        
);

        
// if has watermark add watermark params to hash
        
if ($this->getWatermarkFile()) {
            $miscParams[] 
$this->getWatermarkFile();
            
$miscParams[] $this->getWatermarkImageOpacity();
            
$miscParams[] $this->getWatermarkPosition();
            
$miscParams[] $this->getWatermarkWidth();
            
$miscParams[] $this->getWatermarkHeigth();
        
}

        $path[] 
md5(implode('_'$miscParams));

        
// append prepared filename
        
$this->_newFile implode('/'$path) . $file// the $file contains heading slash

        
return $this;
    
}

Would it be possible to edit something in this function, to display the remote url image???

We’ve done all the work for ya bud.  This extension does exactly what you’re looking for.

External Images 1.5.0.1 by Toybanana Software

 
Magento Community Magento Community
Magento Community
Magento Community
Magento Community
Magento Community
Back to top