我目前正在尝试使用swift mailer构建电子邮件html模板。我现在的问题是如何自定义模板以从节点中获取值并将其呈现在电子邮件模板中。仅从将要发送的节点中获取和打印/渲染节点值,如下面的屏幕快照所示。
Swift mailer具有使用{{ body }}
有没有一种方法可以访问字段中的值并将其呈现在模板上。类似于下面的代码可用于节点模板
{{content.field_title.value}}
或{{node.field_title.value}}
Swift邮件程序可以通过预处理呈现值,但我似乎无法使其正常工作。以下是正在进行的代码
function swiftmailer_preprocess_swiftmailer(&$variables) {
$variables['node_title'] = $node->getTitle();
}
答案 0 :(得分:2)
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}}
来渲染节点标题。答案 1 :(得分:0)
@clestcruz,进行预处理是个不错的选择。但是您也可以为此创建服务。
创建名为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()}}。