[![Latest Version on Packagist][ico-version]][link-packagist] ![Software License][ico-license] [![Build Status][ico-travis]][link-travis] [![Quality Score][ico-code-quality]][link-code-quality]
If you want to add a brand to your products this is the plugin to use. Use cases:
- Add brand logo to your product pages
- Filter by brand in the frontend or backend, i.e. product lists
This command requires you to have Composer installed globally, as explained in the installation chapter of the Composer documentation.
Then, enable the plugin by adding it to the list of registered plugins/bundles
in config/bundles.php
file of your project before (!) SyliusGridBundle
:
<?php
# config/bundles.php
return [
// ...
Loevgaard\SyliusBrandPlugin\LoevgaardSyliusBrandPlugin::class => ['all' => true],
Sylius\Bundle\GridBundle\SyliusGridBundle::class => ['all' => true],
// ...
];
# config/packages/loevgaard_sylius_brand.yaml
imports:
# ...
- { resource: "@LoevgaardSyliusBrandPlugin/Resources/config/app/config.yaml" }
- { resource: "@LoevgaardSyliusBrandPlugin/Resources/config/grids/sylius_admin_product.yaml" }
# config/routes/loevgaard_sylius_brand.yaml
loevgaard_sylius_brand:
resource: "@LoevgaardSyliusBrandPlugin/Resources/config/routing.yaml"
-
If you use
annotations
mapping:<?php declare(strict_types=1); namespace App\Entity; use Doctrine\ORM\Mapping as ORM; use Loevgaard\SyliusBrandPlugin\Model\ProductInterface as LoevgaardSyliusBrandPluginProductInterface; use Loevgaard\SyliusBrandPlugin\Model\ProductTrait as LoevgaardSyliusBrandPluginProductTrait; use Sylius\Component\Core\Model\Product as BaseProduct; /** * @ORM\Entity * @ORM\Table(name="sylius_product") */ class Product extends BaseProduct implements LoevgaardSyliusBrandPluginProductInterface { use LoevgaardSyliusBrandPluginProductTrait; }
-
If you use
xml
mapping:<?php // src/Model/Product.php declare(strict_types=1); namespace App\Model; use Loevgaard\SyliusBrandPlugin\Model\ProductInterface as LoevgaardSyliusBrandPluginProductInterface; use Loevgaard\SyliusBrandPlugin\Model\ProductTrait as LoevgaardSyliusBrandPluginProductTrait; use Sylius\Component\Core\Model\Product as BaseProduct; class Product extends BaseProduct implements LoevgaardSyliusBrandPluginProductInterface { use LoevgaardSyliusBrandPluginProductTrait; // ... }
<?xml version="1.0" encoding="UTF-8"?> <!-- config/doctrine/model/Product.orm.xml --> <doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd"> <mapped-superclass name="App\Model\Product" table="sylius_product"> <many-to-one field="brand" target-entity="Loevgaard\SyliusBrandPlugin\Model\BrandInterface" inversed-by="products"> <join-column name="brand_id" on-delete="SET NULL" /> </many-to-one> </mapped-superclass> </doctrine-mapping>
<?php
# src/Doctrine/ORM/ProductRepository.php
declare(strict_types=1);
namespace App\Doctrine\ORM;
use Loevgaard\SyliusBrandPlugin\Doctrine\ORM\ProductRepositoryInterface as LoevgaardSyliusBrandPluginProductRepositoryInterface;
use Loevgaard\SyliusBrandPlugin\Doctrine\ORM\ProductRepositoryTrait as LoevgaardSyliusBrandPluginProductRepositoryTrait;
use Sylius\Bundle\CoreBundle\Doctrine\ORM\ProductRepository as BaseProductRepository;
class ProductRepository extends BaseProductRepository implements LoevgaardSyliusBrandPluginProductRepositoryInterface
{
use LoevgaardSyliusBrandPluginProductRepositoryTrait;
// ...
}
config/services.yaml
sylius_product:
resources:
product:
classes:
model: App\Model\Product # Or App\Entity\Product
repository: App\Doctrine\ORM\ProductRepository
<?xml version="1.0" ?>
<serializer xmlns="http://symfony.com/schema/dic/serializer-mapping"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://symfony.com/schema/dic/serializer-mapping https://symfony.com/schema/dic/serializer-mapping/serializer-mapping-1.0.xsd"
>
<class name="Sylius\Component\Core\Model\Product">
<attribute name="brand">
<group>admin:product:read</group>
<group>shop:product:read</group>
</attribute>
</class>
</serializer>
$ php bin/console d:s:u-f
$ php bin/console sylius:theme:assets:install
$ php bin/console cache:clear