Создайте продукт программно с тем же названием продукта


Мы показываем ссылку "Создать продукт" на странице просмотра продукта, как только мы нажимаем на ссылку, мы создаем продукт в бэкэнде.

Addtocart.phtml Добавить карту.phtml

<button>
<a href="<?php echo Mage::getUrl("example/amasty/createSimpleProductAndRedirect"); ?>">Create product</a>
</button>

Создает простой продукт и перенаправление()

public function createSimpleProductAndRedirectAction() 
    { 
          if($product = $this->_createProduct(Mage_Catalog_Model_Product_Type::TYPE_SIMPLE))
            { 
              $this->_redirect("catalog/product/view/id/".$product->getId());
            } 
    }

Когда я использовал ->setName($rand), названия продуктов генерируются как случайные числа . но вместо случайных чисел мы хотим создать новый продукт с тем же названием продукта, которое присутствует в представлении продукта страница.

Пример: Если ссылка присутствует на странице продукта с названием продукта Пользовательский Apple iPhone 4, как только мы нажмем "создать ссылку на продукт", он должен создать продукт с именем "Пользовательский Apple iPhone 4"

Я пытаюсь сделать это: ->setName($product->getName()), чтобы получить те же названия продуктов, что и в приведенном ниже коде: app/code/local/Amasty/Example/controllers/AmastyController.php , но это не работает.

class Amasty_Example_AmastyController extends Mage_Core_Controller_Front_Action
{

protected function _createProduct($type, $doSave=true) 
    {
        // required for some versions
        Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);

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

        // set madatory system attributes
        $rand = rand(1, 9999);

        // finally set custom data
        $product
            ->setName($product->getName()) // add string attribute
            ->setShortDescription('description') // add text attribute          
        ;           

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

        return $product;
    }
}

Полный код : http://pastebin.com/i6bQFeLa

enter image description here

Author: Baby in Magento, 2017-03-13

2 answers

Вот что вы можете сделать.
Обновите код кнопки, чтобы передать текущее название продукта вашему контроллеру, как показано ниже.

<button>
<a href="<?php echo Mage::getUrl("example/amasty/createSimpleProductAndRedirect", array('name' => $_product->getName())); ?>">Create product</a>
</button>

Обновите свою функцию createsimpleproductandredirectaction

public function createSimpleProductAndRedirectAction() 
{ 
      $productNameArray = explode(" - ",$this->getRequest()->getParam("name"));
      $productName = $productNameArray[0];
      if($product = $this->_createProduct(Mage_Catalog_Model_Product_Type::TYPE_SIMPLE, true, $productName))
        { 
          $this->_redirect("catalog/product/view/id/".$product->getId());
        } 
}

Теперь обновите свой _созданный продукт

protected function _createProduct($type, $doSave=true, $productName = NULL) 
{
    // required for some versions
    Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);

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

    // set madatory system attributes
    $rand = rand(1, 9999);

    // finally set custom data
    if($productName){
    $product
        ->setName($productName) // add string attribute
        ->setShortDescription('description') // add text attribute          
    ;
    }else{
    $product
        ->setName("Test Product") // add string attribute
        ->setShortDescription('description') // add text attribute          
    ;
    }

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

    return $product;
}
 8
Author: Jaimin Sutariya, 2017-03-15 09:26:55

Ответ, предоставленный Джеймином, должен работать, но для общего и расширяемого решения....

Вы можете отправить по ссылке создать продукт идентификатор продукта, который вы клонируете.
Тогда вы можете просто взять все, что вам нужно, из оригинального продукта.

Сделайте ссылку такой:

<?php echo Mage::getUrl("example/amasty/createSimpleProductAndRedirect", array('id' => $_product->getId())); ?>

Затем в своем действии контроллера загрузите исходный продукт (возможно, в текущем представлении магазина) и клонируйте то, что вам нужно, в новый продукт.

public function createSimpleProductAndRedirectAction() 
{ 
      $originalProductId = $this->getRequest()->getParam("id");
      $originalProduct = Mage::getModel('catalog/product')
                ->setStoreId(Mage::app()->getStore()->getId())
                ->load($originalProductId);
      if($product = $this->_createProduct(Mage_Catalog_Model_Product_Type::TYPE_SIMPLE, true, $originalProduct))
      { 
          $this->_redirect("catalog/product/view/id/".$product->getId());
      } 
}

И затем

protected function _createProduct($type, $doSave=true, $originalProduct) 
{
    // required for some versions
    Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);

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

    $product->setName($originalProduct->getName()); 
    //clone the description if needed
    //$product->setDescription($originalProduct->getName());
    //or assign an other description
    $product->setDescription('what ever you need here');

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

    return $product;
}
 5
Author: Marius, 2017-04-13 12:55:02