Текстовый шаблон электронной почты при использовании Zend_View без разрывов строк - PullRequest
4 голосов
/ 04 августа 2010

Я использую Zend_View для шаблонного текстового содержимого электронной почты.Однако я столкнулся с одной проблемой, которую мне не удалось решить: если строка заканчивается блоком php (?>), То разрыв строки теряется.

Кто-нибудь знает, как яможет решить эту проблему?

Приложение использует Zend Framework, но у меня нет особой причины использовать Zend_View для визуализации шаблона электронной почты (за исключением того, что это выглядело самым простым и очевидным способом сделать это), так что если естьальтернативное решение, которое было бы неплохо.

Я попытался проверить вывод необработанного текста, и разрывы строк полностью потеряны.Никаких "\ r" или "\ n" не видно, поэтому я ничего не могу заменить.

Код для отправки электронной почты:

$emailView = new Zend_View();
$emailView->setScriptPath( realpath (FRONTEND_APPLICATION_PATH .'/../email/') );
$bodyText = $emailView->render('recruitment-job-alert-text.phtml');

// $model = new Model_VacancyDetail();
// $model->find(1);
// $emailView->vacancyDetail = $model;

$mail = new Zend_Mail();
$mail->setSubject( 'Job Alert: ' . $model->references['vacancy_type'] );
$mail->addTo($fromEmail, $fromName);
$mail->setFrom( $fromEmail, $fromName );
$mail->setBodyHtml( $bodyHtml );
$mail->setBodyText( $bodyText );
$mail->send();

Содержимое шаблона электронной почты:

Title: <?= $this->escape($this->vacancyDetail->references['vacancy_type']) ?>

Location: <?= $this->vacancyDetail->references['name'] ?>
Department: <?= $this->vacancyDetail->references['department_name'] ?>
Require Driving Licence: <?= ( $this->vacancyDetail->requireDrivingLicence == 1 ) ? 'Yes' : 'No' ?>
Working Hours: <?= $this->vacancyDetail->workingHours ?>.
Benefits: <?= $this->vacancyDetail->benefits ?>.
Salary: <?= $this->vacancyDetail->salary ?>.

Details:
<?= strip_tags($this->vacancyDetail->description) ?>

Apply now at http://www.example.com/recruitment

Пример итогового содержимого электронной почты:

Title: Example Vacancy Type
Location: Example LocationDepartment: Example DepartmentRequire Driving Licence: YesWorking Hours: 40.
Benefits: Company car.
Salary: £15,000pa.

Details:
This is an example position. It does not really exist.
Apply now at http://www.example.com/recruitment

Ответы [ 2 ]

3 голосов
/ 05 августа 2010

Я считаю, что есть только 3 варианта.

1- Сделайте, как предложил Тим, и добавьте дополнительные "\ n" *

2- Добавьте один пробел в конец?>:

Title: <?= 'xxx' // NO SPACE here >>> ?>
Location: <?= 'loc' // SPACE HERE >>> ?> 
Department: <?= 'RIAA' ?>

Результаты следующие:

Title: xxxLocation: loc
Department:

3- Добавить вторую новую строку, например:

Title: <?= 'xxx' // NO EXTRA newline >>> ?>
Location: <?= 'loc' // EXTRA HERE >>> ?>

Department: <?= 'RIAA' ?>

Результаты:

Title: xxxLocation: loc
Department:

Отстой, я знаю, но не так много других вещей, которые ты можешь сделать.Вы могли бы сказать другим разработчикам, использующим вашу систему, что это ограничение PHP, я уверен, что они поймут.

Причина, по которой PHP это делает, заключается в том, что в целом PHP используется для файлов HTML, и ему НЕ требуетсявсе дополнительные строки, которые могут быть вызваны, что может вызвать проблемы с файлами HTML.Если вы имеете дело с простым текстом, вы должны быть готовы реализовать несколько особых вещей, поскольку вы столкнетесь с множеством странностей при работе с текстом плана и языками сценариев.

2 голосов
/ 04 августа 2010

Я полагаю, что PHP использует новую строку после?>.В общем, это хорошо, но я понимаю, почему это раздражает в вашем случае.

Возможно, вам понадобится сделать что-то вроде этого:

Title: <?= $this->escape($this->vacancyDetail->references['vacancy_type'])."\n" ?>

Location: <?= $this->vacancyDetail->references['name']."\n" ?>
Department: <?= $this->vacancyDetail->references['department_name']."\n" ?>

Редактировать:

Вот ссылка, чтобы подтвердить, что я не схожу с ума: http://www.php.net/manual/en/faq.using.php#faq.using.newlines

Почему это хорошо?Представьте, что ваш шаблон электронной почты был:

Title: <?= $this->escape($this->vacancyDetail->references['vacancy_type'])."\n" ?>

<?php if (!empty($this->vacancyDetail->references['name'])) { ?>
Location: <?= $this->vacancyDetail->references['name']."\n" ?>
<?php } ?>
Departments:
<?php foreach ($this->vacancyDetail->references['departments'] as $dept) { ?>
<?=$dept->name."\n"?>
<?php } ?>

, в этой ситуации вы не захотите получить несколько новых строк между каждой строкой, которая на самом деле выводится (проблема, с которой я недавно столкнулся в шаблоне электроннойне PHP проект).

Другой вариант для вас может заключаться в том, чтобы не хранить ваши шаблоны в PHP, просто используйте {name}, {Department_name} или аналогичные для ваших переменных, а затем проанализируйте их.

...