In Sylius, Taxons work similarly to categories in other eCommerce systems. They allow you to organize and categorize your products in a highly flexible way, which is essential for modern eCommerce. The Taxon system is hierarchical, meaning you can create parent categories with nested subcategories.
Example of a Category Tree:
Copy Category
|
|\__ Clothes
| \_ T-Shirts
| \_ Shirts
| \_ Dresses
| \_ Shoes
|
\__ Books
\_ Fantasy
\_ Romance
\_ Adventure
\_ Other
Gender
|
\_ Male
\_ Female
How to create a Taxon?
As always with Sylius resources, to create a new object you need a factory.
Creating a Single (Non-Nested) Taxon:
Copy /** @var FactoryInterface $taxonFactory */
$taxonFactory = $this -> get ( 'sylius.factory.taxon' ) ;
/** @var TaxonInterface $taxon */
$taxon = $taxonFactory -> createNew () ;
$taxon -> setCode ( 'category' ) ;
$taxon -> setName ( 'Category' ) ;
Creating a Nested Taxon (Category Tree):
To create a tree of categories, first create the parent taxon. Then, create child taxons and add them as children to the parent.
Copy /** @var TaxonInterface $childTaxon */
$childTaxon = $taxonFactory -> createNew () ;
$childTaxon -> setCode ( 'clothes' ) ;
$childTaxon -> setName ( 'Clothes' ) ;
$taxon -> addChild ( $childTaxon ) ;
Saving the Taxon:
Once the parent taxon is added to the system, all its child taxons will be saved automatically.
Copy /** @var TaxonRepositoryInterface $taxonRepository */
$taxonRepository = $this -> get ( 'sylius.repository.taxon' ) ;
$taxonRepository -> add ( $taxon ) ;
How to assign a Taxon to a Product?
To categorize your products, you need to assign them to taxons using the addProductTaxon()
method.
Example: Assigning a Taxon to a Product
Copy /** @var ProductInterface $product */
$product = $this -> container -> get ( 'sylius.factory.product' ) -> createNew () ;
$product -> setCode ( 'product_test' ) ;
$product -> setName ( 'Test' ) ;
/** @var TaxonInterface $taxon */
$taxon = $this -> container -> get ( 'sylius.factory.taxon' ) -> createNew () ;
$taxon -> setCode ( 'food' ) ;
$taxon -> setName ( 'Food' ) ;
/** @var RepositoryInterface $taxonRepository */
$taxonRepository = $this -> container -> get ( 'sylius.repository.taxon' ) ;
$taxonRepository -> add ( $taxon ) ;
/** @var ProductTaxonInterface $productTaxon */
$productTaxon = $this -> container -> get ( 'sylius.factory.product_taxon' ) -> createNew () ;
$productTaxon -> setTaxon ( $taxon ) ;
$productTaxon -> setProduct ( $product ) ;
$product -> addProductTaxon ( $productTaxon ) ;
/** @var EntityManagerInterface $productManager */
$productManager = $this -> container -> get ( 'sylius.manager.product' ) ;
$productManager -> persist ( $product ) ;
$productManager -> flush () ;
What is the mainTaxon of a Product?
The mainTaxon field in the product entity is used to designate the primary taxon for a product. It is especially useful for generating breadcrumbs or for custom logic like link generation.
To set the mainTaxon on a product, use the setMainTaxon()
method.