
Категорії Magento 2 допомагають організувати ваш магазин та зробити його зручним для перегляду. Вони значно покращують навігацію, оскільки клієнти можуть переходити з однієї категорії до іншої, не шукаючи якийсь товар у всьому каталозі.
Як ви знаєте, ви можете легко створювати та керувати категоріями Magento 2 в адміністративній панелі. Це найпоширеніший спосіб. Але є й інший підхід.
Ви також можете створити категорію в Magento 2 програмно. У цьому посібнику ви знайдете два способи зробити це.
Створення категорії Magento 2 за допомогою ін'єкції залежностей
Одним із методів програмного створення категорії є використання ін'єкції залежностей. Ось код, який вам потрібно виконати:
<?php
declare(strict_types=1);
namespace Vendor\Module;
use Magento\Store\Model\StoreManagerInterface;
use Magento\Catalog\Model\ResourceModel\Category\CollectionFactory;
use Magento\Catalog\Model\CategoryRepository;
use Magento\Framework\Exception\NoSuchEntityException;
use Magento\Framework\Exception\CouldNotSaveException;
use Psr\Log\LoggerInterface;
class CreateCategoryService
{
protected $storeManager;
protected $categoryCollectionFactory;
protected $categoryRepository;
protected $logger;
public function __construct(
StoreManagerInterface $storeManager,
CollectionFactory $categoryCollectionFactory,
CategoryRepository $categoryRepository,
LoggerInterface $logger
)
{
$this->storeManager = $storeManager;
$this->categoryCollectionFactory = $categoryCollectionFactory;
$this->categoryRepository = $categoryRepository;
$this->logger = $logger;
}
public function execute(string $categoryName)
{
$category = $this->categoryCollectionFactory->create()
->addAttributeToFilter('name', $categoryName)
->getFirstItem();
if ($category->getId()) {
return $category;
}
$parentId = $this->storeManager->getStore()->getRootCategoryId();
try {
$parentCategory = $this->categoryRepository->get($parentId);
} catch (NoSuchEntityException $noSuchEntityException) {
$this->logger->error('This is an error while getting rootCategory');
return $category;
}
$category->setPath($parentCategory->getPath())
->setParentId($parentId)
->setName($categoryName)
->setIsActive(true);
try {
$this->categoryRepository->save($category);
} catch (CouldNotSaveException $couldNotSaveException) {
$this->logger->error('This is an error while saving category');
return $category;
}
return $category;
}
}
Створення категорії Magento 2 за допомогою диспетчера об'єктів
Крім того, ви можете створити категорію Magento 2 за допомогою менеджер об'єктів . Однак майте на увазі, що пряме використання цього методу приховує реальні залежності класу.
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
use Magento\Framework\App\Bootstrap;
require __DIR__ . '/app/bootstrap.php';
$bootstrap = Bootstrap::create(BP, $_SERVER);
$obj = $bootstrap->getObjectManager();
$state = $obj->get(Magento\Framework\App\State::class);
$state->setAreaCode('adminhtml');
$categoryFactory = $obj->create(\Magento\Catalog\Model\CategoryFactory::class);
$storeManager = $obj->create(\Magento\Store\Model\StoreManagerInterface::class);
$categoryName = 'test category';
$parentId = $storeManager->getStore()->getRootCategoryId();
$parentCategory = $categoryFactory->create()->load($parentId);
$categoryFactory->create()->setPath($parentCategory->getPath())
->setParentId($parentId)
->setName($categoryName)
->setIsActive(true)
->save();
Отже, ось як ви створюєте категорії Magento програмно. Ви можете обрати будь-який варіант, який вам більше підходить. Після створення категорій вам також може знадобитися додавання товарів до категорій програмно .
Щоб зробити управління категоріями ще ефективнішим, ви можете створювати динамічні правила категорій дозволити автоматичне додавання та видалення ваших продуктів з категорій. Хіба це не економія часу?