Добавление пользовательской функции к ветке в OROcrm - PullRequest
0 голосов
/ 18 сентября 2018

Я создал расширение с моей пользовательской функцией.


    class AppExtension extends \Twig_Extension
    {
        private $_container;

        public function __construct($container)
        {
            $this->_container = $container;
        }

        public function getFunctions()
        {
            return [
                new \Twig_SimpleFunction('autologin', [$this, 'autologin'], ['is_safe' => ['all']])
            ];
        }

        public function autologin($customer, $url)
        {
            return sprintf('');
        }

        public function getName()
        {
            return 'xxx_app_extension';
        }
    }

Я добавил его в services.yml:

    xxx_opportunity.twig.helper:
    class: 'OpportunityBundle\Twig\AppExtension'
    public: false
    arguments:
        - '@service_container'
    tags:
        - { name: twig.extension }

Когда я проверяю, нашел ли он ORO, выполнив команду "php bin / console debug: twig", яможно увидеть, что моя пользовательская функция появится в списке.Когда я пытаюсь реализовать его в шаблоне электронной почты с помощью редактора шаблонов электронной почты в OROcrm, я получаю следующую ошибку:

The template for xxxx has syntax error: Unknown "autologin" function at line 18.

Это слишком долго мешало мне, у кого-нибудь есть решение?


Обновление:

$instance = new \Oro\Bundle\EmailBundle\Provider\EmailRenderer(${($_ = isset($this->services['oro_email
$instance->addExtension(${($_ = isset($this->services['oro_ui.twig.html_tag']) ? $this->services['oro_u
$instance->addExtension(${($_ = isset($this->services['oro_config.twig.config_extension']) ? $this->ser
$instance->addExtension(${($_ = isset($this->services['oro_ui.twig.extension.formatter']) ? $this->serv
$instance->addExtension(${($_ = isset($this->services['oro_locale.twig.address']) ? $this->services['or
$instance->addExtension(${($_ = isset($this->services['oro_locale.twig.date_time']) ? $this->services['
$instance->addExtension(${($_ = isset($this->services['oro_entity.twig.extension.entity']) ? $this->ser
$instance->addExtension(${($_ = isset($this->services['twig.extension.intl']) ? $this->services['twig.e
$instance->addExtension(${($_ = isset($this->services['oro_locale.twig.date_time_organization']) ? $thi
$instance->addExtension(${($_ = isset($this->services['oro_calendar.twig.dateformat']) ? $this->service
$instance->addExtension(${($_ = isset($this->services['oro_calendar.twig.recurrence']) ? $this->service
$instance->addExtension(${($_ = isset($this->services['oro_currency.twig.currency']) ? $this->services[
$instance->addExtension(${($_ = isset($this->services['twig.extension.routing']) ? $this->services['twi

Это то, чем заканчивается компилятор для getOroEmail_EmailRendererService.php, как вы видите, мне не хватает моего расширения.Как я могу это исправить?

1 Ответ

0 голосов
/ 13 февраля 2019

Веточка для рендеринга файлов и ветка для рендеринга шаблонов электронной почты - это не один и тот же экземпляр.ORO CRM расширяет функциональность Twig для рендеринга шаблонов электронной почты, смотрите Oro\Bundle\EmailBundle\Provider\EmailRendered.Мне не удалось найти какой-либо тег, связанный с этой вещью, поэтому вам может понадобиться CompilerPass, чтобы добавить расширение для EmailRenderer.

...