J'ai un fichier xml email comme ceci:Modèles d'e-mail stockés en XML. Comment faire pour exécuter php à l'intérieur du xml?
<?xml version='1.0' standalone='yes'?>
<emails>
<email id="contract-expired">
<description>We send this email when we want to inform a user that a contract is coming up to it's expiration date</description>
<subject>Example: Contract Expiration</subject>
<parameters>
<param>name</param>
<param>number_of_contracts</param>
</parameters>
<content>
<html>
<![CDATA[
Dear %name%, <br />
<p>
<?php
foreach($contract as $value):
echo $value->getTitle()
endforeach;
?>
You have %number_of_contracts% contracts that are due to expire in under 30 days. Please log in to example.com to review the contracts.
<br /><br />
This is an automated email. Please do not reply.
</p>
]]>
</html>
<plain>
Dear %name%, You have %number_of_contracts% contracts that are due to expired in under 30 days. Please log in to example.com to review the contracts. This is an automated email. Please do not reply.
</plain>
</content>
</email>
</emails>
J'ai une classe qui traite le modèle de courrier électronique.
I.e. vous définissez un paramètre comme ceci:
$mail->setParameter("name", "Jamie");
Et lorsque vous appelez setContent il fera un str_replace sur le contenu de% name% et tous les autres paramètres. Assez simple. Puis j'ai réalisé, et si j'ai besoin de faire une boucle dans le modèle pour lister tous les contrats etc. Je devrais faire une boucle php dans le fichier xml, mais comment puis-je passer à travers un objet et alors exécutez le contenu comme php et recevez la sortie?
Des idées?
Merci mec!
EDIT: Juste pour être clair sur quelque chose. Je ne souhaite pas construire le code HTML et le passer en paramètre. J'utilise symfony et donc je veux garder html hors du contrôleur.
C'est là où il est appelé:
public function executeContractExpired(sfWebRequest $request)
{
$mail = new Mail("contract-expired");
$mail->setParameter("name", "Joe Bloggs");
$mail->setParameter("number_of_contracts", 567);
$mail->setContent();
$message = $this->getMailer()->compose();
$message->setSubject($mail->getSubject());
$message->setTo("[email protected]");
$message->setFrom(array("[email protected]"=>"Automated Message"));
$message->setBody($mail->getHtmlContent(), 'text/html');
$message->addPart($mail->getPlainContent(), 'text/plain');
$this->getMailer()->send($message);
}
Faire quelque chose comme (dans l'action):
$contracts_html = "<ul>";
foreach($contracts as $contract)
{
$contracts .= "<li>" . $contract->getTitle() . "</li>"
}
$contracts .= "</il>";
Et puis en passant à travers comme paramètre:
$mail->addParameter("contracts", $contracts_html);
Cette méthode est juste moche.
Aha, je savais que je recevrais cette réponse. Le problème est, j'utilise symfony, et je suis en train de traiter ce modèle d'email dans une action.Je ne souhaite donc pas générer de code HTML dans une action, la stocker dans une variable et la passer en paramètre. Je veux garder le html loin du contrôleur. J'aurais dû le mentionner. – Flukey