codeigniter从数据库加载视图

时间:2011-10-25 11:51:22

标签: php database templates codeigniter

我有不同语言的邮件模板,在这个模板中有一些php变量正在使用。我必须在DB中存储模板,然后在发送邮件之前,接收当前语言的模板并替换所有的php变量。虽然我在视图的帮助下这样做 - 没有问题,但现在我不知道如何在模板中替换php变量? 或者也许有更好的方法来解决这个问题?我只需要能够从管理员端编辑模板。

1 个答案:

答案 0 :(得分:4)

为什么不将电子邮件模板中的变量存储为非PHP的...

Thank you %name% for registering!

这样便于管理员编辑。

然后在您发送之前的代码中,您将拥有一组要替换的所有变量...

$template = $this->load->view('email_template.html', '', true);

foreach ($vars as $key => $value) {
    $template = str_replace('%' . $key . '%', $value, $template);
}

修改

在回复下面的评论时,我会在数组中设置语言,然后在视图中使用PHP输出正确的语言,然后进行替换......

// List of message translations
$messages = array(
    'en' => array(
        'thank_you' => 'Thank you %name% for registering!',
        'username_details' => 'Your username is %username%'
    ),
    'fr' => array(
        'thank_you' => 'Merci %name% de l\'enregistrement!',
        'username_details' => 'Votre username est %username%'
    )
);

// Variables to replace
$vars = array(
    'name' => 'John Smith',
    'username' => 'john'
);

// Choose language
$lang = 'en';

// Load the template
$template = $this->load->view('email_template.html', array('messages' => $messages, 'lang' => $lang), true);

// Replace the variables
foreach ($vars as $key => $value) {
    $template = str_replace('%' . $key . '%', $value, $template);
}

email_template.html

<html>
<body>
    <p><?php echo $messages[$lang]['thank_you']; ?></p>
    <hr />
    <p><?php echo $messages[$lang]['username_details']; ?></p>
</body>
</html>