Создайте продукт программно с тем же названием продукта
Мы показываем ссылку "Создать продукт" на странице просмотра продукта, как только мы нажимаем на ссылку, мы создаем продукт в бэкэнде.
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
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;
}
Ответ, предоставленный Джеймином, должен работать, но для общего и расширяемого решения....
Вы можете отправить по ссылке создать продукт идентификатор продукта, который вы клонируете.
Тогда вы можете просто взять все, что вам нужно, из оригинального продукта.
Сделайте ссылку такой:
<?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;
}