Попытка получить доступ к значениям из узлов для рендеринга в шаблоне электронной почты с помощью быстрой почтовой программы - PullRequest
0 голосов
/ 22 ноября 2018

В настоящее время я пытаюсь создать шаблон HTML для электронной почты, используя swift mailer .Моя проблема сейчас заключается в том, как я могу настроить шаблон для извлечения значений из узлов и отображения их в шаблоне электронной почты.Извлекать и печатать / отображать значения узлов только из узлов, которые будут отправлены, как показано на снимке экрана ниже.

enter image description here

enter image description here

enter image description here

Swift Mailer имеет способ по умолчанию для вывода значений из всех полей, используя {{ body }}

Есть литаким образом я мог получить доступ к значениям из полей и отобразить их в шаблоне.Нечто подобное приведенному ниже коду, работающему с шаблоном узла

{{content.field_title.value}} или {{node.field_title.value}}

Swift Mailer имеет способ визуализации значений с помощью предварительной обработки, но я не могу заставить его работать.Ниже приведен код, который находится в стадии разработки

https://www.drupal.org/node/1590184

function swiftmailer_preprocess_swiftmailer(&$variables) {
    $variables['node_title'] = $node->getTitle();
}

Ответы [ 2 ]

0 голосов
/ 29 ноября 2018

@ clestcruz, Preprocess - хороший вариант для этого.Но Вы также можете создать сервис для этого.

Создать пользовательский модуль с именем foo.Создайте все необходимые файлы, а затем создайте foo.services.yml.упоминание службы, например:

services:
  foo.twig.TwigExtension:
    class: Drupal\foo\XYZ
    tags:
      - {name: twig.extension}

создание файла службы в foo/src/XYZ.php

<?php
namespace Drupal\foo;
use Drupal\block\Entity\Block;
use Drupal\user\Entity\User;
use Drupal\node\Entity\Node;
use Drupal\taxonomy\Entity\Term;
use Drupal\paragraphs\Entity\Paragraph;
use Drupal\Core\Url;

/**
 * Class DefaultService.
 *
 * @package Drupal\foo
 */
class XYZ extends \Twig_Extension {

  /**
   * {@inheritdoc}
   * This function must return the name of the extension. It must be unique.
   */
  public function getName() {
    return 'product_listing_extend_display';
  }

  /**
   * In this function we can declare the extension function.
   */
  public function getFunctions() {
    return array(
      'getData' => new \Twig_Function_Method( $this, 'getData', array('is_safe' => array('html'))),
    );
  }

// Function to get tax childs by tid
  function getData($id) {
    // query for data 
   // return value
  }

}

вызов метода {{getData ()}} в файле ветки.

0 голосов
/ 23 ноября 2018
function swiftmailer_preprocess_swiftmailer(&$variables) {
    // Don't forget to use the Node class on top of your .module or .theme file.
    $node = Node::load(YourNodeId); // Here add your node id. If you don't want it to be hardcoded I would suggest you to create a config page for it. The other way is to put a checkbox in it and then find it here with a query.
    $variables['node_title'] = $node->getTitle();
}

После того, как вы сделаете это в вашем swiftmailer.html.twig, вы сможете отобразить заголовок узла следующим образом: {{node_title}}

...