Як програмно створити категорію в Magento 2?

Категорії 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 програмно. Ви можете обрати будь-який варіант, який вам більше підходить. Після створення категорій вам також може знадобитися додавання товарів до категорій програмно .

Щоб зробити управління категоріями ще ефективнішим, ви можете створювати динамічні правила категорій дозволити автоматичне додавання та видалення ваших продуктів з категорій. Хіба це не економія часу?