@MakLeR

Как сделать замену данных по регулярному выражению?

Здравствуйте!
Имеется скрипт отправки форм с сайта на e-mail.

Для каждой формы используется свой шаблон .tpl
...
  <tr>
    <td><strong>%%matr_sever.title%%</strong></td>
    <td colspan="2">%%matr_sever.value%%</td>
  </tr>
  <tr>
    <td><strong>%%matr_mezen.title%%</strong></td>
    <td colspan="2">%%matr_mezen.value%%</td>
  </tr>
...

Код ниже парсит шаблон формы и подставляет в письмо введенные данные:
function tpl($vars) {
    $tpl = 'tpl/'.$vars['name'].'.tpl';
    if(file_exists($tpl)) {
      $template = file_get_contents($tpl);
        foreach($vars['getdata'] as $name => $data) {
            $template = str_replace(array("%%".$name.".title%%", "%%".$name.".value%%"), array($data['title'], $data['value']), $template);
        }
        return $template;
      }
     else {
      return false;
    }
 }

Но есть проблема, если поле остается пустым, то в письме выводится переменная как в шаблоне, например "%%matr_mezen.title%%".
Как модифицировать код парсера, чтобы он искал незамененные переменные и делал вместо них пустые поля.
Предположу, что работает следующий код:
$template = preg_replace('/%%.*?%%/is', 'здесь пусто', $template);
return $template;


Но в PHP вообще не соображаю =( и не могу модифицировать код парсера...
  • Вопрос задан
  • 209 просмотров
Решения вопроса 1
ProjectSoft
@ProjectSoft
Front-end && Back-end разработчик
Парсинг шаблона
<?
function parseTpl($tpl, $values = array(), $left = '%%', $right = '%%') {
	foreach ($values as $key => $value) {
		$tpl = str_replace('%%'.$key.'%%', $value, $tpl); 
	}
	$tpl = preg_replace('/('.$left.'.*?'.$right.')/' ,'', $tpl);
	return $tpl;
}
$tpl = '
<tr>
	<td><strong>%%matr_sever.title%%</strong></td>
	<td colspan="2">%%matr_sever.value%%</td>
</tr>
<tr>
	<td><strong>%%matr_mezen.title%%</strong></td>
	<td colspan="2">%%matr_mezen.value%%</td>
</tr>';
$fields= array(
	"matr_sever.title"=>"matr sever title",
	"matr_sever.value"=>"matr sever value"
);
?>
<table>
	<?=parseTpl($tpl, $fields);?>
</table>
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
proudmore
@proudmore
Гуглите документацию на шаблонизатор, либо подставляйте пустую строку в переменную.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы