图像无法上传以编程方式创建的产品

时间:2017-04-17 09:32:37

标签: magento magento-1.8

我正在尝试下面的代码以编程方式创建产品,一切都很好,但是如果客人创建产品,那么自定义图像不会上传

有人能告诉我正确的方法吗?

protected function _thisProduct($type, $doSave=true, $originalProduct, $newImagePath="") 
{

    // code for Guest

     $session = Mage::getSingleton('customer/session');

    if ($session->isLoggedIn()) {
        return;
    }

    $result = array(
        'success' => false
    ); 

 if ($this->getRequest()->isPost()) {
        $login = $this->getRequest()->getPost('login');
        $productId=$this->getRequest()->getPost('product_id');
       // echo $login['product_id'];die;
        if (!empty($login['username']) && !empty($login['password'])) {
            try {

                  $session->login($login['username'], $login['password']);
                $result['redirect'] = $this->_getRefererUrl() ? $this->_getRefererUrl() : Mage::getUrl('customer/account', array('_secure' => true));
                $result['success'] = true;
                $customerId = Mage::getSingleton('customer/session')->getCustomerId();

        // code for guest end       

    $product = Mage::getModel('catalog/product');

    //  product images

    $images = array(
        'thumbnail'   => 'image.png', // displaying under cart page
        //'small_image' => 'image.png',
        'image'       => 'image.png',  // displaying under my design
    ); 

    foreach ($images as $imageType => $imageFileName) {
        if($newImagePath != ""){
            $dir = Mage::getBaseDir('media') . DS . 'one_two_three/quote/';
            $path = $dir . $newImagePath;
        }else{
            $dir = Mage::getBaseDir('media') . DS . 'example/super/';
            $path = $dir . $imageFileName;
        }
        //echo $path."<br>";
        if (file_exists($path)) {
            try {
                $product->addImageToMediaGallery($path, $imageType, false);
            } catch (Exception $e) {
                echo $e->getMessage();
            }
        } else {
            echo "No image path found dear: `{$path}`<br/>";
        }
    }

    $customerId = Mage::getSingleton('customer/session')->getCustomerId();
   $product->setCreatedByCustomerId($customerId);

    if ($doSave)
        $product->save();

    return $product;

    // code for guest

    } catch (Mage_Core_Exception $e) {
                switch ($e->getCode()) {
                    case Mage_Customer_Model_Customer::EXCEPTION_EMAIL_NOT_CONFIRMED:
                        $message = Mage::helper('customer')->__('This account is not confirmed.username');
                        break;
                    case Mage_Customer_Model_Customer::EXCEPTION_INVALID_EMAIL_OR_PASSWORD:
                        $message = $e->getMessage();
                        break;
                    default:
                        $message = $e->getMessage();
                }
                $result['error'] = $message;
                $session->setUsername($login['username']);
            } catch (Exception $e) {
                Mage::helper("ajaxlogin")->log("There has been an error during the login.");
                // Mage::logException($e); // PA DSS violation: this exception log can disclose customer password
            }
        } else {
            $result['error'] = Mage::helper('customer')->__('Login and password are required.');
        }
    }

    $this->getResponse()->setBody(Mage::helper('core')->jsonEncode($result));
    // code for guest end
}

以下代码适用于注册用户:

protected function _thisProduct($type, $doSave=true, $originalProduct, $newImagePath="") 
{                   

    $product = Mage::getModel('catalog/product');   
    // product images

    $images = array(
        'thumbnail'   => 'image.png', // displaying under cart page
        //'small_image' => 'image.png',
        'image'       => 'image.png',  // displaying under my design
    ); 

    foreach ($images as $imageType => $imageFileName) {
        if($newImagePath != ""){
            $dir = Mage::getBaseDir('media') . DS . 'one_two_three/quote/';
            $path = $dir . $newImagePath;
        }else{
            $dir = Mage::getBaseDir('media') . DS . 'example/super/';
            $path = $dir . $imageFileName;
        }
        //echo $path."<br>";
        if (file_exists($path)) {
            try {
                $product->addImageToMediaGallery($path, $imageType, false);
            } catch (Exception $e) {
                echo $e->getMessage();
            }
        } else {
            echo "No image path found dear: `{$path}`<br/>";
        }
    }

    $customerId = Mage::getSingleton('customer/session')->getCustomerId();
   $product->setCreatedByCustomerId($customerId);

    if ($doSave)
        $product->save();           

    return $product;

}

1 个答案:

答案 0 :(得分:0)

使用soap api上传图片

 $base_url =  Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_WEB);
 $client = new SoapClient($base_url.'index.php/api/soap/?wsdl',array('trace' => 1,'connection_timeout' => 120));
 $session = $client->login('admin','admin123');
 function uploadImage($productId,$session,$client,$image)
 {
 // need to check on child image
 $file_image = explode(".",basename(trim($image)));
 $fileName = $file_image[0];
 $file = array(
               'content' => base64_encode(file_get_contents($image)),
               'mime' => 'image/jpeg',
               'name' => $fileName
               );
  $result = $client->call(
  $session,
  'catalog_product_attribute_media.create',
  array(
    $productId,
    array('file'=>$file, 'label'=>'label', 'position'=>'100', 'types'=>array('small_image','image','thumbnail'), 'exclude'=>0)
  )
  );
 }