如何用另一个类似于邮件合并的文本替换文本?

how to replace text with another similar to mail merge?

我在 Magento 工作,我开发了一个模块来向客户发送短信。在模块的设置中,管理员可以设置将发送给客户的消息。我正在尝试添加一个功能,允许用我的数据库中的数据替换文本。

例如,我目前有以下代码可以获取短信正文的已保存设置:

$body = $settings['sms_notification_message'];

获取的消息如下所示:

Dear {{firstname}},

your order ({{ordernumber}}) has been shipped.
tracking#: {(trackingnumber}}

Thanks for your business!
{{storename}}

目标是让模块用客户和商店信息替换“{{ }}”中的变量。 不幸的是,我无法弄清楚如何在发送消息之前让它替换信息。目前正在按原样发送。

最简单的方法是使用 str_replace,像这样:

// Set up the message
$message = <<< MESSAGE
Dear {{firstname}},

your order ({{ordernumber}}) has been shipped.
tracking#: {{trackingnumber}}

Thanks for your business!
{{storename}}

MESSAGE;

// Assign the values in an associative array
$values = [
    'firstname' => 'firstnamevalue',
    'ordernumber' => 'ordernumbervalue',
    'trackingnumber' => 'trackingnumbervalue',
    'storename' => 'storenamevalue'
];

// Create arrays $target indicating the value to change
$targets = [];
foreach ($values as $k => $v) {
    $targets[] = '{{'.$k.'}}';
}

// Use str_replace to perform the substitution
echo str_replace($targets,$values,$message);