I have created a input type text i want to grab the data from that input and save that as a category name . I have a template simply where i am creating form and input and submit button. and i am taking value of input in block . look at the code please you will understand it more clearly ..
app/code/Mastering/SampleModule/Block/Hello.php
<?php namespace Mastering\SampleModule\Block; use Magento\Framework\View\Element\Template; use Mastering\SampleModule\Model\ResourceModel\Item\Collection; use Mastering\SampleModule\Model\ResourceModel\Item\CollectionFactory; use Magento\Framework\Catalog\CategoryFactory ; class Hello extends Template { private $cf; private $messageManager; public function __construct(Template\Context $context , CollectionFactory $collectionfactory , \Magento\Framework\Message\ManagerInterface $messageManager , array $data = [] ){ $this->cf = $collectionfactory ; parent::__construct($context,$data); //$this->messageManager=$messageManager; } public function getItemsResults(){ return $this->cf->create()->getItems(); } public function getFormData(){ $post=$this->getRequest()->getPost(); if(!empty($post)){ $name=$post['name']; //$this->messageManager->addSuccessManager("data saved"); } } }
Hello @samair
Please follow as shared code:
class MyClass { protected $storeManager; protected $categoryFactory; public function __construct( \Magento\Store\Model\StoreManagerInterface $storeManager, \Magento\Catalog\Model\CategoryFactory $categoryFactory ) { $this->storeManager = $storeManager; $this->categoryFactory = $categoryFactory; } public function fetchOrCreateProductCategory($categoryName) { // get the current stores root category $parentId = $this->storeManager->getStore()->getRootCategoryId(); $parentCategory = $this->categoryFactory->create()->load($parentId); $category = $this->categoryFactory->create(); $cate = $category->getCollection() ->addAttributeToFilter('name', $categoryName) ->getFirstItem(); if (!$cate->getId()) { $category->setPath($parentCategory->getPath()) ->setParentId($parentId) ->setName($categoryName) ->setIsActive(true); $category->save(); } return $category; }
Hello @samair
Try this
<?php protected $_categoryFactory; protected $_storeManager; public function __construct( \Magento\Store\Model\StoreManagerInterface $storeManager, \Magento\Catalog\Model\CategoryFactory $categoryFactory ) { $this->_storeManager = $storeManager; $this->_categoryFactory = $categoryFactory; } ..... ..... $storeId = $this->_storeManager->getStoreId(); $rootCategoryId = $this->_storeManager->getStore()->getRootCategoryId(); $rootCategory = $this->_categoryFactory->create()->load($rootCategoryId); $category = $this->_categoryFactory->create(); $category->setName('category name'); $category->setIsActive(true); $category->setUrlKey('category-url-key'); $category->setData('description', 'description'); $category->setParentId($rootCategoryId); $category->setStoreId($storeId); $category->setPath($rootCategory->getPath()); $category->save();