To make entity available for the email template you need to make it configurable with the Config Annotation.
To make the SellerReview entity available for templating, simply import the @Config annotation and use it in the class.
<?php
namespace Webkul\MarketplaceBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Oro\Bundle\EntityConfigBundle\Metadata\Annotation\Config;
/**
* SellerReview.
*
* @ORM\Entity
* @ORM\Table(name="wk_mp_seller_reviews")
* @Config()
*/
class SellerReview
{
/**
* @var int
*/
private $id;
/**
* @var string
*/
private $heading;
/**
* @var string
*/
private $text;
/**
* @var \DateTime
*/
private $createdAt;
You can also change the default value of each configurable option using the default values argument:
<?php
namespace MarketplaceBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Oro\Bundle\EntityConfigBundle\Metadata\Annotation\Config;
use Oro\Bundle\EntityConfigBundle\Metadata\Annotation\ConfigField;
/**
* SellerReview.
*
* @ORM\Entity
* @ORM\Table(name="wk_mp_seller_reviews")
* @Config(
* defaultValues={
* "wk_mp_seller_reviews"={
* "comment"="reviews"
* }
* }
* )
*/
class SellerReview
{
/**
* @var int
*/
private $id;
/**
* @var string
*/
private $heading;
/**
* @var string
*/
private $text;
/**
* @var \DateTime
*/
private $createdAt;
/**
* @var bool
*/
Then you need to register this function in the Email templates using the Twig environment.
<?php
namespace Webkul\MarketplaceBundle\Twig;
use Twig\Extension\AbstractExtension;
use Webkul\MarketplaceBundle\Entity\Transaction;
use Twig\TwigFunction;
class EmailTwigExtension extends AbstractExtension
{
public function getFunctions()
{
return [new TwigFunction('getseller', [$this, 'getSomeVariableValue'])];
}
public function getSomeVariableValue(Transaction $entity): array
{
$result[] = [
'seller' => $entity->getAmount(),
];
return $result;
}
}
Register the Twig extension in the DI container:
wk_seller_product.twig.my_extension:
class: Webkul\MarketplaceBundle\Twig\EmailTwigExtension
public: false
tags:
- { name: twig.extension }
Create a DI compiler pass to register the created extension and function in the Email Twig Environment:
<?php
namespace Webkul\MarketplaceBundle\DependencyInjection\CompilerPass;
use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Reference;
class TwigSandboxConfigurationPass implements CompilerPassInterface
{
const EMAIL_TEMPLATE_SANDBOX_SECURITY_POLICY_SERVICE_KEY = 'oro_email.twig.email_security_policy';
const EMAIL_TEMPLATE_RENDERER_SERVICE_KEY = 'oro_email.email_renderer';
/**
* {@inheritdoc}
*/
public function process(ContainerBuilder $container)
{
$securityPolicyDef = $container->getDefinition('oro_email.twig.email_security_policy');
$securityPolicyDef->replaceArgument(
4,
array_merge($securityPolicyDef->getArgument(4), ['getseller'])
);
$container->getDefinition('oro_email.email_renderer')
->addMethodCall('addExtension', [new Reference('wk_seller_product.twig.my_extension')]);
}
}
Register the created compiler pass:
<?php
namespace Webkul\MarketplaceBundle;
use Symfony\Component\HttpKernel\Bundle\Bundle;
use Webkul\MarketplaceBundle\DependencyInjection\CompilerPass\TwigSandboxConfigurationPass;
use Symfony\Component\DependencyInjection\ContainerBuilder;
class WebkulMarketplaceBundle extends Bundle
{
public function build(ContainerBuilder $container)
{
$container->addCompilerPass(new TwigSandboxConfigurationPass());
parent::build($container);
}
}
Once you complete these steps, “your entity function” becomes available in Email templates.
I have explored these things while creating module for OroCommerce Multi-Vendor Marketplace.
Thanks for reading me. I hope you’ll get an idea of how you can use your entity for email templating in Oro-Commerce, please share your reviews on this, that will support me to write more.
Be the first to comment.